mit SELECT und WHERE mySQL lesen



  • Hallo leute,

    ich will bestimmte datenbanksätze lesen:

    rs.m_strFilter = "SerNr = 'sSerNrPer'";
    	rs.Open(CRecordset::forwardOnly, _T( "SELECT SerNr FROM personen" ));
    

    d.h ich möchte sagen können: such in der spalte SerNr nach sSerNrPer und gib mir dann den datensatz zurück, falls vorhanden.

    ich habs wie da oben probiert (quelle msdn2), aber ich finde meinen datensatz nicht. und die SerNr ist 100% in der DB vorhandne.

    bitte um hilfe, danke



  • Überleg mal, um was du die Datenbank da bittest:

    select * from wasweissich where SerNr = 'sSerNrPer';
    

    😉
    Erstens musst du die ' quoten, also mit \ davor.
    Zweitens versuchs mal mit Zeichenkettenaddition oder rs.m_strFilter.Format 🙂



  • Erstens musst du die ' quoten, also mit \ davor.

    du meinst so:

    rs.Open(CRecordset::forwardOnly, _T( "SELECT SerNr FROM personen WHERE SerNr = 'sSerNrPer'" ));
    

    mein problem ist ich weis nicht in welcher variable sich der datensatz befindet, welcher von der mySQL gefunden wurde. oder ist es gar nicht möglich sollch eine operation durchzuführen?


  • Mod

    Nein! Du musst den Query variabel aufbauen oder Parameterisierte Abfragen stellen.
    Sofern sSerNrPer ein CString ist geht das folgende:

    rs.Open(CRecordset::forwardOnly, _T( "SELECT SerNr FROM personen WHERE SerNr = '" + sSerNrPer + "'" ));
    


  • mein problem ist ich weis nicht in welcher variable sich der datensatz befindet, welcher von der mySQL gefunden wurde.

    Der Datensatz befindet sich in rs.

    oder ist es gar nicht möglich sollch eine operation durchzuführen?

    Ich würde es anders schreiben:

    re.m_strFilter = _T( "SELECT SerNr FROM personen WHERE SerNr = \'") + sSerNrPer + _T("\'");
    rs.Open();
    if (!rs.IsBOF())
    {
    if (!rs.IsEOF())
    {
    AfxMessageBox(rs.m_serno); // Achtung, Variablenname geraten!!!
    }
    }
    

    Achja, dein String war immer noch falsch, ich hab ihn so gemacht, wie ich meinte. Vergleich mal.



  • elegante lösung.
    ich bekomme aber eine fehlermenldung beim ausführen des Programms.
    dort heiß es:"You have am error in your SQL Sysntax...." in der nähe von SELECT ...



  • Hmm, hätte gehen müssen. Versuch mal:

    re.m_strFilter = _T( "SELECT SerNr FROM personen WHERE SerNr LIKE \'") + sSerNrPer + _T("\'");
    


  • ...oder

    rs.m_strFilter = "SerNr = '" + sSerNrPer + "'";
    

    [edit]...und dann

    rs.Open(CRecordset::forwardOnly, _T( "SELECT * FROM personen" )); // mit *
    

    [\edit]



  • Gleiche meldung:

    You have an error in your SQL sysntax. Check the manual corresponds to your MySQL server versiion for the right syntax to use near 'SELECT SerNr FROM personen WEHRE SerNr = 'E0070000567" at

    wobei das E0070000567 der inhalt von der vergleichsvariable, der pass also.



  • super klasse danke euch.

    so gehts:

    rs.m_strFilter = "SerNr = '" + sSerNrPer + "'";
    rs.Open(CRecordset::forwardOnly, _T( "SELECT * FROM personen" ));
    

    aber wo finde ich die anderen spalteninhalte die zum datensatz mit sSerNrPer gehören?



  • sorry letze frage ist wirklich eine dumme...

    danke für die hilfe. habs geschafft. lesen und schreiben. 😉


Anmelden zum Antworten