C++ und Datenbank - GetDefaultSQL()
-
Hallo,
ich versuch mich gerade an der Datenbankprogrammierung unter MS Visual Studio.
Dazu hab ich die Beispiel im Buch "Jetzt lerne ich Visual C++ 6.0" durchgearbeitet. Das funktioniert auch super. Ich hab ne MS Access DB und greif über ODBC zu.Für die Rückgabe gibt es doch folgende Funktion:
CString CDatenbankSet :: GetDefaultSQL() { return _T ("SELECT * FROM [Adr1] Where Stadt = 'Regensburg'"); }Wie müßte diese Anweisung aussehen, wenn nur der Name angezeigt werden soll und nicht alle Spalten? Ich habs mit
return _T ("SELECT Name FROM [Adr1] Where Stadt = 'Regensburg'");da bekomme ich immer die Meldung "Ungültiger Deskriptorindex.
Was ist also falsch?THX Manuela
-
Hallo,
vielleicht sollte ich es anders formulieren.
Wie kann ich im C++ eine Select-Anweisung formulieren und mir zum Beispiel nur den Namen eines Eintrags vom Adressbuch anzeigen lassen, wo zum Beispiel Stadt gleich Regensburg ist.THX Manuela
-
Vielleicht mit
pSet->m_strFilter = "[Stadt] = 'Regensburg'"; pSet->Requery();und dann nur die entsprechende Membervariable (z.B.: m_namedeseintrags o.ä.) anzeigen.
Ich hoffe, dass ich dein Problem richtig verstanden habe.
-
Hmm, damit klappts.
Aber widerspricht das nicht irgendwie dem Sinn der SQL Anweisung wenn man noch mit dem Filter "rummachen" muss? Hab es auch so gamecht da ich es nicht besser wusste.MfG Torsten
-
Wieso sollte der Filter dem Sinn einer SQL Anweisung widersprechen?
m_strFilter ist nichts anderes als die WHERE-Bedingung einer SQL Anweisung. CRecordSet macht anschließend auch nix anderes, als sich daraus ein SQL-Statment zu basteln.
-
Genau.
Eigentlich spart man sich die Arbeit einen kompletten SQL-String zusammensetzen zu müssen.
Übrigens: m_strSort ersetzt die ORDER BY Klausel.
Und wenn du wirklich einen ganzen SQL-String brauchst, dann kannst du ihn einfach in Open(...) übergeben.
-
Ja, ok, ich will nicht anfangen zu streiten aber der ablauf scheint ja dann so zu sein (CRecordset - intern):
1. SQL Anfrage schicken
2. Datenbank Rückfrage aufnehmen
3. p_strFilter drüberlaufen lassen
4. Ergebnis ausgebenUnd das ist doch aufwendiger als das alles gleich per SQL zu machen.
Oder hab ich das noch nicht begriffen?

-
-
TorstenM schrieb:
Ja, ok, ich will nicht anfangen zu streiten aber der ablauf scheint ja dann so zu sein (CRecordset - intern):
1. SQL Anfrage schicken
2. Datenbank Rückfrage aufnehmen
3. p_strFilter drüberlaufen lassen
4. Ergebnis ausgebenUnd das ist doch aufwendiger als das alles gleich per SQL zu machen.
Oder hab ich das noch nicht begriffen?

Nein, meines Wissens läuft das nicht so! Das SQL-Statement wird über den m_strFilter zusammengesetzt und dann als Anfrage abgeschickt. Damit ist der Ablauf in etwa so:
1. SQL Anfrage mit m_strFilter für WHERE-Klausel erstellen (bei Requery)
2. SQL-Anfrage abschicken (bei Requery)
3. Ergebnis im Recordset (nach Requery)
-
Hallo,
vielen Dank für die Antworten, ich werd es ausprobieren. Und mich dann nochmal melden.
-
Hallo,
ich hab es ausprobiert und es funzt, genauso hab ich mir das vorgestellt.
Vielen Dank.