von Edit->Text in DB speichern ???



  • Hallo !!!
    Ich habe jetzt schon ein wenig Zeit hier verbracht um das ein und andere mit Hilfe des Builders zu realisieren. In fast allen Fällen bin ich auch fündig geworden und es hat auch super funktioniert.

    Nun arbeite ich an einem Projekt in dem eine Kunden-DB in das Programm integriert werden soll. Wie ich mit TTable, DBGrid und sonstigen Komponenten arbeite ist mir schon ein wenig bekannt. Aber ich bin erst seit 14 Tagen am arbeiten mit DB beschäftigt.
    Da ich ein Eingabe-Dialog zu den Kundendaten erstellt habe, würde ich gerne die Daten aus den Edit-Komponenten anschließend per OnButtonClick() in die DB schreiben lassen.

    Mein Problem ist, dass ich nicht weiß wie ich das realisieren kann. Ich wäre für Hilfe sehr dankbar.

    (*wenn ich einen Beitrag überlesen haben sollte und den Thread umsonst erstellt habe, dann bitte zum entsprechenden verlinken und meinen Fehler zu entschuldigen*)



  • Ich denke an dieser stelle musst du die Daten "selber" in die Datenbank schreiben.

    void __fastcall TfrmMain::Button1Click(TObject *Sender)
    {
      AnsiString asSQL;
    
      asSQL="insert into TABELLE (SPALTE) Values ( '" + Edit1->Text  +  "')";
      InsertUpdate(asSQL);
    }
    


  • oder so

    Query->FieldByName("Spaltenname")->AsString (oder AsInteger...) = Edit->Text;
    Query->Post();
    

    find ich persönlich besser....;)



  • @5er1al
    Das ist Geschmackssache 😋
    Wie Du siehst übergebe ich einfach den String einer Funktion und gut is.
    Kein ParameterByNAme für jedes Update, insert delete Sondern eine Funktion für alle 😉



  • stimmt, aber ich hab nur 2 zeilen....;)

    Nee is wirklich geschmackssache...find ich!



  • @5er1al
    Jetzt hast Du mich doch neugierig gemacht.
    Denn ->Post ist mir gar nicht geläufig. 🤡

    Meine Funktion die hinter InsertUpdate steht ist wirklich länger wie zwei zeilen.
    Die Frage die sich mir jetzt stellt ist das alles überflüssig was ich hier mache ?

    Was Für Komponenten benutzt Du und was für eine Datenbank hast Du ?

    Ich benutze die IBO's und habe ein Firebird 1.5x

    😕

    Mein Code :

    void __fastcall frmMain::InsertUpdate(AnsiString asSQL)
    {
        qryWrite->Close();
        qryWrite->SQL->Clear();
        SQL->Add(asSQL);
    
        if(!db_BASIS->InTransaction)
        {
          db_BASIS->StartTransaction();
        }
        qryWrite->ExecSQL();
        db_BASIS->Commit(); 
      }
      catch(...)
      {
        Protokol(asSQL,"Datenbank.log");  
        qryWrite->Close();
        qryWrite->Unprepare();
        db_BASIS->Rollback();
      }           
    
    }
    


  • Meiner Erfahrung nach bietet die Vorgehensweise über Insert/Update Statements mehr Flexibilität (Selects über mehrere Tabellen). Außerdem finde ich eine Fehlerbehandlung unter Verwendunng von Insert/Update Statements einfacher.

    Bei Serials Code muss die Datenmenge erst einmal in den entsprechenden Modus vesetzt werden (->Append()/->Insert, oder ->Edit()) und man sollte tunlichst überprüfen, ob die Datenmenge tatsächlich in diesen Modus gesetzt werden konnte. (->State = dsGewünschterModus). Inklusive Fehlerüberprüfung ist auch Serials Code deutlich länger als zwei Zeilen.

    Ich habe es nicht explizit überprüft, aber ich meine, dass Insert/Update Statements schneller ausgeführt werden (bei einzelnen DS macht das keinen Unterschied, beim Verabeiten größerer Mengen schon).



  • Danke für die viele schnelle und gute Hilfe.
    Ich hatte dann aber noch eine andere Art gefunden, die den Zweck auch erst mal erfüllt hatte.

    DB->Insert();
       DB->FielByName("Name")->AsString = EditName->Text;
       DB->Post();
    

    Eure Lösungen werd ich dann wohl weiter verwenden. 🙂


Anmelden zum Antworten