SQL-Befehl DELETE flexible gestalten



  • Danke erstmal für die schnelle Antwort...

    aber wie soll das gehen, Strings in Sql-Anweisungen zusammenbauen und was meinst du mit Datenbankparameter verwenden???
    Ich verwende ja die DB Parameter Test und Symbolname in meinem Befehl. Hast du ein kl. Beispiel das mir das ganze verdeutlicht?



  • String zusammensetzen:

    CString sql = _T("DELETE From Test WHERE Symbolname = '") + fac + _T("'");

    Datenbank-Platzhalter:

    sql = "DELETE From Test WHERE Symbolname = ?";

    Da musst du der Datenbank dann natürilich noch mitteilen, was sie anstelle des Platzhalters einsetzen soll (siehe Doku des APIs das du verwendest. Bei ODBC heisst die Funktion z.B. SQLBindParameter() wenn mich mein Gedächtnis nicht trügt).



  • Dank dir frenki ... kaum macht man es richtig funktioniert es!!!

    Jetzt will bloß meine INSERT INTO - Anweisung noch nicht so wirklich funktionieren, es liegt ein Fehler in der Syntax vor. Ich halt mich hier an Datenbankzugriffe die in meinem C++ Buch enthalten sind ... aber das funktioniert bei mir nicht.

    Folgende Ziele schrieb ich:

    String.Format(_T("INSERT INTO Test(Symbol,Value) VALUES('Test',2)));

    ... und irgentwas scheint an hier nicht zu passen? Sieht jemand meinen Fehler?



  • Hatte noch einen Tippfehler gesehen, so steht die Anweisung bei mir im Programm.

    String.Format(_T("INSERT INTO Test(Symbol,Value) VALUES('Test',2)"));

    Ich hoffe mir kann jemand helfen?



  • Die Spalte heißt doch Symbolname, nicht Symbol.



  • Ja ich hatte zwischenzeitig den Bezeichner in der DB geändert...trotzdem danke! Ich wollte bloß nachfragen ob hier in dieser INSERT INTO Anweisung irgentwo ein Syntaxfehler, den ich ja gemacht haben muss, zu sehen ist?



  • Die Syntax scheint so in Ordnung zu sein, aber genaueres kann dir nur deine Datenbank sagen. Setzt doch mal diesen Befehl in deinem DB-Frontend ab.
    Welche DB verwendest du eigentlich?

    Evtl. sollest du alle Namen mit Hochkommata ("...") maskieren (falls Test, Symbol oder Value reservierte Namen sind).



  • Ich benutze die Mircosoft Access Datenbank Version 2003. Ich weiß leider nicht wie man diesen Befehl im DB-Frontend setzt. Kannst du mir da genaueres sagen? Ich habe zwar in der Hilfe schon nachgeschaut aber bis jetzt nichts finden können.

    Daraufhin habe ich auch in C++ mal die Namen mit Hochkommata ("...") maskiert und bekomme dann aber einen Klammerfehler gemeldet.
    Hab es so geschrieben:

    String.Format(_T("INSERT INTO "Test"("Symbol","Value") VALUES('Test',2)"));

    Ich hatte dann auch noch mal Klammern um die Hochkommas gesetzt aber bekomme totzdem dann einen Klammerfehler gemeldet.



  • NA, dass ist ja nun syntaktisch falsch. Woher soll der Compiler wissen wann der String zuende ist? Teste bei Access die eckigen Klammern

    String.Format(_T("INSERT INTO Test([Symbol],[Value]) VALUES('Test',2)"));
    


  • Ja genau und so funktioniert es, also mit den eckigen Klammern!!! Danke dir jetzt komme ich erstmal weiter. Gruß Kollin


Anmelden zum Antworten