' in SQL anweisung vergessen..



  • Xqgene schrieb:

    na ich vermutte, dass der Text in irgendeinem Editfeld auch ein ' enthält..

    Hmm, das ist merkwürdig, übergebe eigentlich in keinem der Felder ein'



  • schtreibe doch mal so:

    String SQL = "insert into DB values ('"+ed_uid->Text+"', '"+ed_passwort->Text+"', '"+cb_status->Text+"', '"+
    ed_bemerkung->Text+"', '"+state+"')";
    

    und dann schau im Debuger was, wirklich in dem String steht.

    was ist ds_insert: TQuery?
    ich würde lieber ds_insert->ExecSQL(); machen

    und
    führe commit erst dann wenn du die erste Anweisung ausgefürt hast und nicht in einem rutsch.

    brauchst du überhaupt commit?
    ich kenne micht mit Oracle nicht aus, aber wird INSERT nicht in einer expliziten Transaction ausgefürt. aus deinem code kann ich nicht sehen, dass eine Transaction gestartet wird.



  • Der Debugger äußert sich dazu nicht, komme bis zum Formular.. und dann kommt die Fehlermeldung zur Laufzeit. ds_insert ist´n dataset. Habs jetzt mal mit ner Query Kompo versucht und den übergeben SQL Befehl, dann executed. Nur da kam wieder der Fehler zur Laufzeit. Da geh ich ma jeden einzeln durch...



  • Hab jetzt mal einwenig probiert..

    OracleQuery1->SQL->Add("insert into DB values (USER_NAME='"+ed_uid->Text+"', PASSWORT='"+ed_passwort->Text+"', STATUS='"+cb_status->Text+"', BEMERKUNG='"+ed_bemerkung->Text+"', AKTIV='"+state+"')");
    

    Mach ich es so, dann meint er, das angeblich ein Komma fehlt. Das ist doch echt komisch, übergebe nichts der gleichen. Und wenn ich bei den Kompos auf .Text zugreife, bekomme ich doch eigentlich nur den Text und nicht den Text in Anführunszeichen, oder? So kenn ich es zumindest.



  • moment, moment.....

    insert into DB values (USER_NAME='"+ed_uid->Text+"', PASSWORT='"+ed_passwort->Text+"', STATUS='"+cb_status->Text+"', BEMERKUNG='"+ed_bemerkung->Text+"', AKTIV='"+state+"')

    ist doch kein richtiger INSERT String. USER_NAME=, PASSWORT=, ...
    sind dort falsch. das macht man nur bei UPDATE

    INSERT INTO DB (name) values ('Xqgene')

    was ist DB? ist das der Tabellenname?



  • Joa, das ist mein tabellenname.



  • Ich habe jetzt den Fehler gefunden... es liegt an der state variable.. wenn meine checkbox nicht gechecked ist, müsst ich dann nun ein einzelnes Anführungszeichen in die Variable setzen. mit state=''' funzt es nicht. Ist ja auch logisch.. nur wie kann ich das Zeichen extra einfügen? mit state='\''?? Ist die Checkbox gechecked, dann macht er den Eintrag. 😕



  • mit doppel '

    also wirds so aussehen

    INSERT INTO DB (STATE) VALUES('''')
    


  • Also hier mal die anweisung, anstatt sie auszuführen, hab ich sie in ein Memo anzeigen lassen..

    insert into LKI_USER values ('u0003', 'test', 'Standard - User', 'hallo', '
    

    Und das kommt raus, wenn die Checkbox nicht gechecked ist. Nacht dem Wert "hallo" fehlt ein ', welches nun von der variable "state" kommen müsste. dieses Zeichen kann ich aber nicht so ohne weiters verwenden, da ich ja auch den Wert mit '' übergebe. Wie krieg ich da jetzt trotzdem das extra ' rein?

    Ne Freistelle mach ich ja mit state='\0'; wie bekomm ich an stelle der Freistelle das ' rein?



  • ist state ein String?

    suche in dem String nach allen ' und, wenn gefunden, füge zu jedem ' noch ein ' dazu.

    dann sieht es so aus:

    state ==> ''

    insert into LKI_USER values ('u0003', 'test', 'Standard - User', 'hallo', '''')
    


  • Hmm, hätts ja gern als string, löse es aber als char.. :o? er akzeptiert die stirng definition bei mir nicht..



  • na ist das denn so schwierig?

    String SQL = "insert into DB values ('" + ed_uid->Text + "', '" + ed_passwort->Text + "', '" + cb_status->Text + "', '" +
      ed_bemerkung->Text + "', '";
    if (state == '\'')
      SQL = SQL + "''";
    else
      SQL = SQL + String(state);
    SQL = SQL + "')";
    

    so ungefähr



  • jetzt klingelt es bei mir. 💡
    du versuchst das, was ich in deinem anderen thread gesagt habe, hier umsusetzen.

    deshalb auch diese komische ausgabe:

    insert into LKI_USER values ('u0003', 'test', 'Standard - User', 'hallo', '
    

    wenn in deinem state '\0' steht und du dann so was machst:

    String s = "vor_state" + state + "nach_state";
    

    dann steht in s nur "vor_state", weil mit '\0' wird der String terminiert/beendet.

    dehalb auch kommt bie dir auch die sql exception, der SQL string ist nicht vollständig, da fählt noch ein '

    mch doch folgendes

    String SQL = "insert into DB values ('" + ed_uid->Text + "', '" + ed_passwort->Text + "', '" + 
      cb_status->Text + "', '" + ed_bemerkung->Text + "', '";
    if (state != '\0')
      SQL = SQL + String(state);
    SQL = SQL + "')";
    

    also das nechste mal überlege, bevor du eine Antwort aus einem Thread einz zu einz an einer anderen stelle verwendest.

    und wie Jester2000 und ich schon sagten: etwas Grundwissen konnte nicht schaden.


Anmelden zum Antworten