Datensatz ändern über normales Editfeld



  • Kannst du mir mal ein kleines Beispiel geben?
    Habe Tabelle test, da stehen Artikel drin!

    Ich will den ArtikelA in ArtikelB umbenennen!

    Wie müsste ich das machen?



  • Query1->SQL->Clear();
    Query1->SQL->Add("UPDATE artikel SET artikelname='B' WHERE artikelname='A';");
    Query1->ExecSQL();
    

    Da findest du auch die Syntax für andere SQL Statements:
    [url]
    http://dev.mysql.com/doc/mysql/de/UPDATE.html
    [/url]



  • Du wirst lachen,aber soweit war ich auch...

    mein problem ist etwas komplizierter...also für mich!

    Erstmal möchte ich die änderungen über eine Editeingabe machen...also normal geht das ja so:

    Query->SQL->Add("select * from Table where Feld = '" +Edit1->Text+ "'");
    

    Nur wie würde das beim Update aussehen?



  • Du willst also über das Editfeld bestimmten welcher Datensatz aktualisiert werden soll?

    Und über ein anderes Editfeld soll der geänderte Eintrag geschrieben werden?

    Dann steht in diesem thread doch schon alles was du brauchst.
    😕



  • Ja ungefähr!

    Hmm...ich geb mal ein Beispiel wie ich mir es vorstelle:

    Ich will meinen Namen ändern, der steht in einer Datenbank (Test) in der Tabelle (namen)!

    So nun möchte ich in das erste Edit meinen alten Namen eingeben...da soll geprüft werden ob vorhanden...

    Wenn vorhanden will ich in ein 2 Editfeld den neuen reinschreiben und somit den alten ändern!

    Das update is scho klar....aber wie kann ich das machen per Editfeldeingabe?

    wie lautet der syntax dafür?



  • Nach folgendem Prinzip:

    [/cpp]
    String alt=Query1->FieldByName("Feld")->AsString;
    String neu=Edit1->Text;
    String sql="UPDATE Table SET Feld='"+neu+"' WHERE Feld='"+alt+"';"
    [cpp]



  • So habs mal probiert...geht irgendwie nich....er bringt keine Fehlermeldung...aber ändert auch nix ...

    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    Table1->Open();
    
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from TLogin where LName like '" +Edit1->Text+ "' AND Passwort = '"+Edit2->Text+ "';");
    Query1->Open();
    String alt = Query1->FieldByName("Passwort")->AsString;
    String neu = Edit3->Text;
    if (Edit3->Text == Edit4->Text)
    {
     if (!Query1->Eof)
     String SQL="UPDATE TLogin SET Password ='"+neu+"' WHERE Password = '"+alt+"'";
     else
     ShowMessage ("Unbekannter Benutzer oder falsches Psswort");
    }
    else
    ShowMessage ("Passwörter stimmen nicht überein");
    }
    //---------------------------------------------------------------------------
    

    woran kanns liegen?



  • Vielleicht das was im String sql steht noch an die Datenbank senden ? 🙄



  • void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    //Table1->Open();
    
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from TLogin where LName like '" +Edit1->Text+ "' AND Passwort = '"+Edit2->Text+ "';");
    //Form3->Query1->Open();
    String alt = Query1->FieldByName("Passwort")->AsString;
    String neu = Edit3->Text;
    if (Edit3->Text == Edit4->Text)
    {
     if (!Query1->Eof)
     {
     String SQL="UPDATE TLogin SET Passwort ='"+neu+"' WHERE Passwort = '"+alt+"'";
     Form3->Query1->ExecSQL();
     }
     else
     ShowMessage ("Unbekannter Benutzer oder falsches Psswort");
    }
    else
    ShowMessage ("Passwörter stimmen nicht überein");
    }
    

    Jetzt sagt er mir das er das Feld "Passwort" nicht finden kann....es ist aber da...



  • Das ist nicht dein ernst oder ?

    Kleiner Tip:Schau dir nochmal die ersten Zeilen deines Quelltextes an und dann den Teil wo du Updaten willst.



  • Hallo

    was Fragg meint :
    - Du weist Query1 eine Anweisung zu, aber du führst die nicht aus, den der Ope-Befehl ist auskommentiert.
    - Du baust eine Anweisung mit Update zusammen, übergibst den aber nicht an Form3->Query1 (?? warum nicht nur Query1?)

    du solltest dir noch mal dem Ablauf deines Programms überlegen, ich denke nicht, das du etwas verstanden hast, was hier erzählt wurde.

    bis bald
    akari



  • Hallo 🙄 🙄

    Peinlich peinlich...doch hab schon kapiert....nur eben nicht nachgedacht...werd jetzt meinen code mal ändern...

    Zzzzorry! Mal schauen ob ichs noch hinbekomme 😉



  • So hab jetzt wie folgt geändert:

    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    //Table1->Open();
    
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from TLogin where LName like '" +Edit1->Text+ "' AND Passwort = '"+Edit2->Text+ "';");
    Form3->Query1->Open();
    String alt = Query1->FieldByName("Passwort")->AsString;
    String neu = Edit3->Text;
    

    und:

    if (Edit3->Text == Edit4->Text)
    {
     if (!Query1->Eof)
     {
     String SQL="UPDATE TLogin SET Passwort ='"+neu+"' WHERE Passwort = '"+alt+"'";
     Query1->SQL->Add(SQL);
     Query1->ExecSQL();
     }
    

    jetzt sagt er das er Zeichen nach abgeschlossener SQL Anweisung gefunden hat! 😮 😮

    Bei ExecSQL!

    Ich verzweifel langsam 😞 😞

    PS: das mit Form3->Query1 war nur...weil ich erst die SQL auf einer anderen Form hatte...und beim Post vergessen zu ändern!



  • Die SQL-Anweisung sieht OK aus, außer das beim oberen das ";" nicht nötig ist, sollte aber trotzdem funktionieren.

    Aber beim unteren da fügste die Anweisung ein ohne vorher den Inhalt von Query1->SQL löschen.Falls du den Inhalt der Query noch brauchst sollteste besser eine 2te TQuery Komponente nehmen zum eintragen.



  • ES geht!!!! 🙂 🙂

    Ein Query1->SQL->Clear() war ganz hilfreich!

    DANKE @ ALL


Anmelden zum Antworten