CRecordset::Delete() Was mach ich falsch??
-
Hallo alle zusammen,
ich zerbrech mir jetzt seit gut einem Tag den Kopf darüber was ich in meiner ODBC-Verbindung falsch mache, so dass ich nicht den CRecordset::Delete() Befehl ausführen kann.
Folgenden Code habe ich geschrieben:[cpp] CUserRecordset user; CDatabase UserData; CString DB_File = "Fuhrpark"; CString SqlString; long status = 2; std::ostringstream message; std::vector< std::string > parameters = StringHelper::split( messageFromClient, ';' ); std::string dataInfo = parameters[0]; TRY { // Open the database if( UserData.Open( DB_File ) ) { SqlString.Format( "SELECT * FROM tbl_Benutzerliste WHERE Personalnummer = %s and Benutzer = %s", parameters[1].c_str(), parameters[2].c_str()); // Allocate the recordset // CRecordset recset( &UserData ); // Execute the query if( user.Open( CRecordset::dynaset, SqlString ) == TRUE ) { user.Delete(); } // Close the database UserData.Close(); } } CATCH(CDBException, e) { e->ReportError(); return "false"; } END_CATCH; return "true";[/cpp]Momentan bekomme ich beim SELECT für fast jeden Datensatz eine andere Execption.
Wenn ich einen Datensatz falsch eingebe und diesen dann löschen möchte z.B. in das Feld Personalnummer habe ich das Passwort test geschrieben und in Benutzer eine Zahlen-Buchstabenkombination dann bekomme ich die Exeption:
Syntaxfehler (fehlender Operator)in Abfrageausdruck'Personalnummer = test and Benutzer = 0032FACWenn ich einen korrekt geschriebenen Datensatz löschen möchte bekomme ich die Exeption:
1 Parametern wurde erwartet, aber es wurden zu wenig Parameter übergebenDa ich in beiden Fällen den gleichen Weg benutze kann ich mir das absolut nicht erklären

Hat jemand eine Idee?
gruß Silver
-
Setz die %s mal in \'.
Also \'%s\' damit dann später 'test' drin steht.
-
Sensationell es funktioniert

Was bezwecket den \' das Zeichen??
Ich mein der Debuger zeigt mir an das er in Personalnummer und in Benutzer ebenfalls die Daten geschrieben hat, sowie mit \' aber da funktioniert das nicht. Ich versteh nicht wieso das ohne \' nicht geht. Muss man das immer bei dem Delete benutzen??
-
Naja, das hat mit dem Delete nicht direkt was zu tun.
Du arbeitest mit Zeichenketten (Strings) und mit SQL - und Zeichenketten packt man in SQL zwischen ' '. Du hast dem also nur die ganze Zeit einen falschen Datentyp gegeben, den er vielleicht noch versucht hat, zu verarbeiten.
Das ist so ähnlich, als wenn du in C sowas machst:
char = 9; CString strMsg; strMsg.Format("%c"); TRACE(strMsg);und dich dann wunderst, wieso der nicht "9" ausgibt.

-
Ja aber wozu dann dieser Backslash??
-
Weil es ein Escapezeichen ist.
Afair kann man ihn auch weglassen, der Compiler meckert wohl nicht (hat hier mal wer geschrieben) - aber ich habe es so gelernt und mache es deswegen auch so.Ist eben genauso wie:
\n \" \\usw.