SQL String, Abfrage auf DB
-
Hi,
Ich habe folgendes Problem :
Ich habe eine Accesstabelle (Tab1). Diese besitzt 3 Spalten ( Zahl, Text, Textt). In der ersten Spalte stehen Zahlen und in den zwei Text Spalten steht entweder " ja " oder garnichts. Ich will dass mein Programm erst eine Abfrage anhand einer Zahl durchführt (nummer)und nur dann ein return 0 zurückgibt wenn in einer der zwei, oder in beiden Textsplalten nichts steht!bissher habe ich folgenden Code :
_TCHAR sqlString[]=_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE 'nummer'=true "); m_pRS->Open(dbOpenSnapshot,sqlString); COleVariant a; CString c; m_pRS->GetFieldValue("text",a); // m_pRS->GetFieldValue("2",a); habe ich auch schon versucht! a = c; AfxMessageBox(c);
ich wollte eigentlich dass (zum Testen) in der variable c der inhalt der des Feldes aus der Textspalte steht!! bekomme aber nie was raus
-
versuch mal:
_TCHAR sqlString[]=_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE nummer=-1;");
-
Nein dess muss natürlich WHERE Zahl = nummer heißen aber ich bekomm trotzdem nichts in der Ausgabe
-
Okay, dann versuchs mal so:
CString strSql; strSql.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE zahl=%d;"), nummer);
Nun musst du das nur mit der neuen Variable aufrufen - ich brauchte halt den Format Befehl.
-
was bedeutet " zahl = %d "??
ich wollte ja die Zeile in der die nummer vorhanden ist! Wenn ich dass nache deinem Vorschlag mache Sagt er mir nur : "kein aktueller Datensatz"!! woran kann dass liegen?
-
hi
probier mal das so :void XY::Test (CString sInhalt) { _TCHAR sqlString[]=_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = '" + sInhalt +"' AND (Text <> "" OR Textt <> ""); ..... }
kommt halt drauf an ob in der DB "" oder Null drin steht
-
Schau dir mal printf an, da steht, was %d macht.
wenn in nummer z.B. 5 drin steht, wäre der String
nummer = 5Die Meldung: Kein aktueller Datensatz heißt, das nichts gefunden wurde.
Du solltest mal auf EOF abfragen.
-
Also wenn ich dass so mache Zeigt er mir an : "Datentypen in Kriterienausdruck unverträglich."
CString sqlString; sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = 'nummer' AND (Text "" OR Textt "")")); m_pRS->Open(dbOpenSnapshot,sqlString); if( m_pRS->IsEOF( ) ) { COleVariant a,b; CString c; m_pRS->GetFieldValue("Text",a); a = c; AfxMessageBox(c); }
-
Klar geht das nicht, weil du Stgt's Lieblingsfehler abgeschrieben hast.
Wenn, dann versuch es mal so:
sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = \'%d\' AND (Text <> \"\" OR Textt <> \"\")"), nummer);
Falls nummer ein Text ist, verwende bitte %s statt %d.
Und ich würde statt
Text <> ""
ein
Text NOT IS NULL
bevorzugen.Achja: Ist Zahl (also das Feld in der Datenbank) eine Zahl oder ein Text?
So wie du abfragst scheint es ein Text zu sein, aber der Name spricht dagegen.
-
welchen Fehler? den \"\" ?
-
Jupp, der Compiler denkt doch sonst, dass der Formatstring da schon zu Ende ist.
Schau doch mal aufmerksam die Farben in der Zeile von dir an. Die "" sind schwarz (was sie als Quelltext kennzeichnet) und nicht rot (was sie als String kennzeichnen würde).
-
In der Spalte "Zahl" steht eine nummer. diese will ich ja abfragen
bewkomme immer wieder dei Fehlermeldung
:
"Datentypen in Kriterienausdruck unverträglich."
-
ich seh nur dass das weg muss
sqlString.Format und deine where bedingung anders lauten muss
-
Dann frag es bitte ohne Anführungsstriche ab.
Wer meckert eigentlich? Der Compiler? Oder die Datenbank, wenn du die Abfrage machst?Zeig nochmal die aktuelle Version des Query.
-
Die Datenbank meckert, weil Zahlen nun mal nicht mit Apostroph umschlossen werden.
da: ...WHERE Zahl = 'nummer'...
da auch: ...WHERE Zahl = \'%d\'...
-
@isabeau: Es könnte ja auch eine Zahl sein, die als Text gespeichert wird - hatten wir heute ja auch schon. (Der Thread mit der Farbe in der ini.)
-
Ich werde noch verückt!!
wenn ich
sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = \'%d\' AND (Text NOT IS NULL OR Textt NOT IS NULL)"), nummer); m_pRS->Open(dbOpenSnapshot,sqlString);
schreibe sagt mit die Ausgabe " Syntaxfehler in Abfrageausdruck 'Zahl='3295420' AND (Text NOT IS NULL OR Textt NOT IS NULL)'."
Vielleicht liegt es daran nummer ist ein CString mit dem wert "123" aber wie kommt der dann auf 3295420???
-
@ estartu_de: Stimmt.
Tommy005 schrieb:
In der Spalte "Zahl" steht eine nummer.
Ich war so frei, "nummer" als Zahlenwert zu interpretieren. "nummer" als Text habe ich mal ausgeschlossen.
Die Fehlermeldung weist aber auch unauffälligdarauf hin, dass die Datentypen nicht passen:
"Datentypen in Kriterienausdruck unverträglich."
Also vermute ich mal, dass es kein String ist...
P.S.:
nicht NOT IS NULL sondern IS NOT NULL, oder ?
-
Ich hab doch gesagt, dass du %s nehmen sollst, wenn nummer ein string ist...
Außerdem würde ich noch Klammern setzen:sqlString.Format(_T("SELECT Zahl ,Text ,Textt FROM Tabelle1 WHERE Zahl = \'%s\' AND ((Text IS NOT NULL) OR (Textt IS NOT NULL))"), nummer);
Ansonsten hilft nur ruhig bleiben. *kopftätschel*
-
isabeau schrieb:
P.S.:
nicht NOT IS NULL sondern IS NOT NULL, oder ?*schäm*
DAS ist mein Standardfehler...