SQL Statment was da dran flasch?
-
Hallo
ich hänge schon wieder an eine SQL Statment.
statment = "UPDATE seiten SET status='"+status+"' WHERE id='+id+'";
db.ExecuteSQL(statment);Ich weiß das irgednwas in dem Stantemtn falsch sein muss. Nur was?
status ist vom Typ CString und in der Access Datenbank Text.
id ist in Access ein Autowert und im Programm auch ein CString.Es kommt beim ausführen immer der Fehler:
Datentypen in Kriterienausdrücken unverträglichWo dran kann das liegen?
-
Hi,
ich denke das der ID-Wert nicht in Hochkomma gesetzt werden mus.
Gruss
EB
-
Wieso gehören SQL Fragen ins MFC Forum?
-
Prinzipiell sollte man SQL strings nicht aus variablen zusammensetzen!!! Da öffnest Du Tür und Tor für SQL-Injections...
Der SQL-String sollte so aussehen:
"UPDATE seiten SET status=@Status WHERE id=@ID"
und die beiden Parameter musst Du separat dem SQL-Objekt mitgeben!
-
Jochen Kalmbach schrieb:
Prinzipiell sollte man SQL strings nicht aus variablen zusammensetzen!!! Da öffnest Du Tür und Tor für SQL-Injections...
Gibts hier keine PreparedStatements?
-
asdfghjklöä schrieb:
Wieso gehören SQL Fragen ins MFC Forum?
Weil das eine Frage zu CDatabase ist.
-
hä? @ usw? wie geht das?
-
Jochen Kalmbach schrieb:
Prinzipiell sollte man SQL strings nicht aus variablen zusammensetzen!!! Da öffnest Du Tür und Tor für SQL-Injections...
Der SQL-String sollte so aussehen:
"UPDATE seiten SET status=@Status WHERE id=@ID"
und die beiden Parameter musst Du separat dem SQL-Objekt mitgeben!
joar schön und gut, aber wie schon erwähnt wird hier mit CDatabase gearbeitet, da bringt die schöne Theorie nix
-
ich bin meinem Problem immer noch nicht weiter
-
Was sind status und id für datentypen?
-
Pellaeon_home schrieb:
joar schön und gut, aber wie schon erwähnt wird hier mit CDatabase gearbeitet, da bringt die schöne Theorie nix
Wenn das für Dich ersichtlich war, dann bin ich ja beruhigt...
ADD: Wenn "status" und "id" in der Datenbank keine Strings sind, dann musst Du die ' weglassen:statment = "UPDATE seiten SET status=" + status + " WHERE id=" + id;
-
Jochen Kalmbach schrieb:
Pellaeon_home schrieb:
joar schön und gut, aber wie schon erwähnt wird hier mit CDatabase gearbeitet, da bringt die schöne Theorie nix
Wenn das für Dich ersichtlich war, dann bin ich ja beruhigt...
ADD: Wenn "status" und "id" in der Datenbank keine Strings sind, dann musst Du die ' weglassen:statment = "UPDATE seiten SET status=" + status + " WHERE id=" + id;
is alles CString also status ist so oder so immer 0 egal was ist brauch eigentlich keine Variable zu sein und id ist auch ein CString.
Aber es geht trotzdem nicht
-
Es kommt nicht (primär) darauf an was die Variablen sind, sondern wie die Spalten in der Tabelle (also in der Datenbank) definiert sind.
-
das habe ich mir auch schon aus verdachte gedacht und habe auch mal alles zum Text gemacht!
-
Probier doch zuerst mal ob folgendes geht:
statment = "UPDATE seiten SET status=0 WHERE id=1";
(die ID muss es natürlich geben!)
-
auhc das ist der fall
Nur ist die id autowert in der access tabelle und in meinem programm ein CString meint ihr das ist nicht gut und macht den fehler?
ich auch schon mal Update seiten set status=0 gemacht da kommt auch nen fehler
-
Jens Bond schrieb:
auhc das ist der fall
Wolltest Du damit sagen, dass es geht oder dass es nicht geht?
Jens Bond schrieb:
Nur ist die id autowert in der access tabelle und in meinem programm ein CString meint ihr das ist nicht gut und macht den fehler?
Dann sollte folgendes auch gehen:
CString id; CString statement; id = _T("1"); statment = _T("UPDATE seiten SET status=0 WHERE id="); statement += id;
-
wie sollte es anders sein es geht natürlich nicht
-
irgendjemand muss doch schon mal eine update gemacht haben damit oder sagt mir wenigstens eine Alternative
Ich habe alles mal hoch geladen:
http://rapidshare.de/files/13187935/Crawler.rar.html
is alles drinnen!
-
http = adresse.Find("http://");
Hast du da keinen Compilefehler??? http is ja nen CString und das Find gibt aber nen int zurück.