Abfragenproblem
-
Hallo,
ich versuche mich jetzt an Datenbanken und bin noch Anfänger. Ich habe ein Programm mit C++ (MFC) erstellt und möchte nun bestimmte Daten aus einer SQLite DB abfragen. Ich benutze einen SQLite Wrapper, der den Code etwas MFC freundlicher macht.
Ich möchte eine einfache Abfrage starten und die Straße von einer bestimmten Person ausgegeben bekommen:
BOOL fTest; CDbSQLite sqlite; fTest = sqlite.Open(m_szDbFile); if(!fTest) { CString szError = _T("Could not open "); szError += m_szDbFile; AfxMessageBox(szError); return; } m_szTest = _T("INVALID STATEMENT"); // Abfrage nach Straße von Anton Weber CSqlStatement* stmt = sqlite.Statement(_T("SELECT adressen.Strasse FROM adressen WHERE((adressen.Name) LIKE 'Anton Weber'")); // Ausgabe des Straßennamens CString text; text = stmt->ValueString(0); //Fehler MessageBox(text);
In der Zeile
text = stmt->ValueString(0);
kommt ein Fehler. Die Funktion ValueString schaut so aus:
LPCTSTR CSqlStatement::ValueString(int pos_zero_indexed) { m_szText.Format(_T("%s"), _sqlite3_column_text(m_stmt, pos_zero_indexed)); return m_szText; }
Ich weiß nicht was ich ValueString übergeben soll. Vielleicht verwende ich auch einfach die falsche Funktion. Für Hilfe wäre ich sehr dankbar.
-
Mach doch mal einen Debug und schau welcher Fehler.
-
Hallo,
Stefan H. schrieb:
In der Zeile
text = stmt->ValueString(0);
kommt ein Fehler.
schreibe doch bitte das nächste Mal dazu, welchen Wrapper du nutzt, das hat mich immerhin die Zeit einer Google-Suche gekostet
Der Wrapper basiert auf dem hier:
http://www.adp-gmbh.ch/sqlite/wrapper.html
Und dort gibt es ein Beispiel, das zeigt, dass du nur vergessen hast, dich auf eine (die erste) gültige Zeile der Ergebnismenge zu bewegen, bevor du ValueString aufrufen darfst, mit NextRow, siehe:
http://www.adp-gmbh.ch/sqlite/wrapper_test_4.html
Und verwende den LIKE-Operator nicht, wenn du nicht nach einem Muster suchst.
MfG,
Probe-Nutzer
-
Vielen Dank für die Hilfe. Jetzt klappt alles