zu vorhanden Datensatz etwas hinzufügen



  • Hallo,

    ich hab ein kleines Problem in Bezug auf das schreiben in eine Datenbank.
    Kurz geschildert:
    Ich hab in meiner Anwendung ein DBGrid, verbunden mit einer gefilterten Tabelle. Der Anwender kann da auch Daten hinzufügen, so wenn er einen Datensatz hizugefügt hat, betätigt er den den Speichernbutton den Navigators, dieses Ereignis fang ich ab. Und dann will ich meinem Program beibringen, das es zu diesem Datensatz, blind in eine Spalte die nicht angezeigt wird den Wert '0' speichert.
    Ich habs jetzt so versucht:

    if(Button == nbPost)
          {
             TQuery *query = new TQuery(Application);
             query->DatabaseName = "IM7_1";
             query->SQL->Add("INSERT INTO Auftragsdaten (Aufterledigt) VALUES('0')");
             query->ExecSQL();
             delete query;
    
          }
    

    aber da speichert er die '0' in eine neuen Datensatz( ist ja auch irgendiwe logisch) aber wie mach ich das, wenn die '0' dazu soll?



  • Soll da jetzt '00' drin stehen oder was? Verstehe das Problem nicht ganz. Zudem es auch nach einem SQL Problem mehr aussieht!


  • Mod

    Hallo

    das Zauberwort heisst UPDATE
    (zB UPDATE auftragsdaten SET feld = 'XXX' WHERE feld2 = 'YYY')

    ⚠ - ohne WHERE werden alle Datensaetze ueberschrieben ⚠

    MfG
    Klaus



  • Hallo,

    also mit UPDATE hab ich es auch versucht, wie kann ich das aber inbekommen?
    Meine Abfrage sieht so aus:

    query->SQL->Add("UPDATE Auftragsdaten SET Aufterledigt = '0' where Aufterledigt = NULL");
    

    zu besseren Verständnis: '0' ist der Int-Wert
    und NULL ist das was vom SQL reingeschrieben wird wenn man für die Salte nichts angibt. Eigentlich steht da ja <NULL>, aber das will er granicht.

    Ja kann sein, das das ein SQL Problem ist, aber vielleicht könnt Ihr ja trotdem helfen?



  • Habs hinbekommen, danke.


  • Mod

    Hallo

    normalerweise sollte man allen mitteilen wie man es geschafft hat 😉

    MfG
    Klaus



  • KlausB schrieb:

    <snip>

    So laßt sich das mit der NULL lösen:

    query->SQL->Add("UPDATE Auftragsdaten SET Aufterledigt = '0' where Aufterledigt is NULL");
    

    Mfg Burkhard

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • Genau so hab ich es auch gelöst.
    Danke Burkih für den Code, den eigentlich ich posten sollt.
    Bin aber ein wenig im Stress. 😉



  • Dir ist aber hoffentlich klar, daß das update-Statement nicht nur den
    gerade eingefügten Datensatz ändert, sondern alle, für die die Bedingung
    (is NULL) zutrifft.
    Zum einen kann es da passieren, daß Du ungewollt andere Datensätze änderst.
    Zum anderen kann es dadurch auch irgendwann zu Performance-Problemen kommen.
    Wenn Du sehr viele Datensätze in der Tabelle gespeichert hast und über eine
    Bedingung darauf zugreifst, die durch keinen Schlüssel abgedeckt wird, werden
    die Datensätze sequentiell durchsucht, was z.B. bei einer Million schon
    ein paar Momente dauern kann.

    Gruß,

    Alexander


Log in to reply