Problem mit Variablen bei Update SQL



  • Hallo

    ich will den Inhalt der Eingabefelder Edit3 und DBLookupComboBox1 in die SQL Anweisung in SQLQuery haben. Bring das aber nicht hin.

    UPDATE T_USER
    SET PASSWORT = 'Edit3->Text
    WHERE BENUTZER = 'DBLookupComboBox1->Text

    Fehlermeldung: Token unknown - line2 char46 DBLookupComboBox1

    Das ist der bisherige Stand - aber das geht alles nicht. Hab es mit der Übergabe in eine Variable probiert also zuerst:
    AnsiString benutzer;
    benutzer = DBLookupComboBox1->Text;
    passwort = Edit3->Text;

    in SQL

    UPDATE T_USER
    SET PASSWORT = :passwort
    WHERE BENUTZER = :benutzer

    Fehlermeldung: Cursor nicht aus Abfrage zurückgekehrt.

    dann geht es aber auch nicht

    Könnt ihr mir helfen ??



  • "Geht nicht" ist keine zulässige Fehlermeldung oder Problembeschreibung.



  • Die Fehlermeldungen stehen jetzt oben drin. Ich hoffe das hilft was.



  • Hi,

    falls Du noch keine Lösung für Dein Problem gefunden hast, versuch doch mal das hier.

    char SQL_String[500];
    
    sprintf(SQL_String,"select * from T_USER where PASSWORT = '%s' and BENUTZER = '%s'",Edit3->Text, DBLookupComboBox1->Text );
    Query1->SQL->Clear();
    Query1->SQL->Add(SQL_String);
    Query1->Open();
    

    So habe ich bis jetzt immer Variablen in einen SQL String kopiert. Evtl. mußt Du die Anführungszeichen beim %s noch weglassen, je nach dem wie Du die SQL Tabelle definiert hast.

    Gruß Borste



  • Du kannst für drartige Prameter auch die Eigenschaft Parameter deiner Oquery- Komponete benutzen.
    In der eigenschaft SQL gibst du zum Beispiel ein:

    Select * from user where name=:Name
    

    Dann gehst du auf die Eigenschaft Parameter, klickst auf den bereits eingefügten Parameter und expandierst die Eigenschaft Value;
    Im Type gibst du "String" ein.

    Im Quelltext schreibst du dann:

    Query->Close();
    Query->Parameters->Items[0]->Value="Andreas";
    Query->Open();
    

    Näheres kann man in der Hilfe nachlesen.

    Auch das Thema Filter und Filtred ist interesant....



  • Hallo Borste

    dein Tip funktioniert - d.h. der String wird zusammengesetzt das habe ich noch in einem Editfeld kontrolliert.
    Aber:
    Bei der Ausführung des SQLQuery kommt immer folgende Fehlermeldung

    "Cursor nicht aus Abfrage zurückgekehrt" und das Programm bricht ab

    Mein Quelltext lautet:

    char String[500];
    sprintf (String,"UPDATE T_USER SET PASSWORT = '%s' WHERE BENUTZER = \"%s\" ", Edit3->Text, DBLookupComboBox1->Text);

    SQLQuery1->SQL->Add(String);
    Edit4->Text = String; // Kontrollausgabe des Strings
    SQLQuery1->Active = true;
    ShowMessage ("Passwort wurde erfolgreich geändert");
    SQLQuery1->Active = false;

    Kennst du diesen Fehler auch ?? bzw weißt du was man hier tun kann??

    Gruss
    Bernd



  • Hallo BerndKa,

    dieses Problem habe ich bisher noch nicht beobachtet.

    Falls Du Mircosoft SQL verwendest, versuch doch mal, einen Trace mitlaufen zu lassen. Vielleicht ergibt sich da ein Ansatz. Bei MySQL gibt es auch entsprechende Programme.

    Ansonsten würde ich mal versuchen den Query nicht mit SQLQuery1->Active = true bzw. false zu öffnen bzw. zu schließen.

    Ich verwende immer

    SQLQuery1->SQL->Clear(); 
    SQLQuery1->SQL->Add(String); 
    SQLQuery1->Open();
    

    Vielleicht funktioniert es ja dann. 😃

    Gruß Borste



  • Bei UPDATE-Statements würde ich es lieber mal mit ExecSQL() versuchen.
    Siehe Hilfe und/oder das DB-Tutorial in der FAQ.


Anmelden zum Antworten