Entwickler-Ecke

Datenbanken - Datensatz ändern per SQL


Nikola - Do 06.02.03 15:09
Titel: Datensatz ändern per SQL
Hallo,

Wie kann ich per SQL ein Datensatz ändern, :?:

ZB.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    DM.TerminalDB.Close;
    DM.TerminalDB.SQL.Clear;
    DM.TerminalDB.SQL.add('select * from terminal where');
    DM.TerminalDB.SQL.add('LfdNr='+#39+IntToStr(BDE.LfdNr)+#39);
    DM.TerminalDB.Open;
    if (DM.TerminalDB.RecordCount>0) then
    begin
      DM.TerminalDB.SQL.add('UPDATE terminal');
      DM.TerminalDB.SQL.add('SET P_und_U_Zeit='+#39+IntToStr(20)+#39);
      DM.TerminalDB.SQL.add('SET Start='+#39+IntToStr(1000)+#39);
      DM.TerminalDB.SQL.add('SET Stopp='+#39+IntToStr(500)+#39);
      DM.TerminalDB.SQL.add('SET Bemerkung='+#39+'Prüfung'+#39);
      try
        DM.TerminalDB.ExecSQL;
      except
        on E : Exception do ShowMessage(E.Message);
      end;
      DM.TerminalDB.Close;
      DM.TerminalDB.Refresh;
    end;


kann das funktionieren wenn nicht was mache ich falsch :?:

Mit freundlichen Grüßen

Nikola


bis11 - Do 06.02.03 15:34

Also so auf den ersten Blick sehe ich keine Fehler. Allerdings finde ich etwas komisch, warum Du die Integerwerte in Strings umwandelst. Du kannst doch die direkt in die Datenbank schreiben. Dazu muß allerdings das Feld vom Typ Integer sein.


Nikola - Do 06.02.03 16:27

Hallo,

es kommt imer Error Code 1064

Fehler in der Syntax bei 'UPDATE' terminal
...
in Zeile 3.'.

datenbank ist mySQL


smiegel - Do 06.02.03 16:39

Hallo,

bei UPDATE darf SET nur einmal vorkommen. Alle zu ändernden Felder, müssen durch Kommas getrennt werden.

In etwa so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  ...
  with DM.TerminalDB do
  begin
    SQL.Add('UPDATE terminal'); 
    SQL.Add('SET P_und_U_Zeit='+#39+IntToStr(20)+#39+', '); 
    SQL.Add(Start='+#39+IntToStr(1000)+#39+', '); 
    ...
    SQL.add('SET Bemerkung='+#39+'Prüfung'+#39); 
  end; // with
  ...


#39 kannst Du Dir auch sparen: entweder Du benutzt QuotedStr oder Du schreibst 2 mal die Hochkommas hintereinander.


GuGl - Do 06.02.03 16:40

Hallo Nikola,


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
    DM.TerminalDB.Close; 
    DM.TerminalDB.SQL.Clear; 
    DM.TerminalDB.SQL.add('select * from terminal where'); 
    DM.TerminalDB.SQL.add('LfdNr='+#39+IntToStr(BDE.LfdNr)+#39); 
    DM.TerminalDB.Open; 
    if (DM.TerminalDB.RecordCount>0) then 
    begin 
      // diese 2 Zeilen einfügen:
      DM.TerminalDB.close; // Query schließen !!
      DM.TerminalDB.SQL.Clear; // SQL.Text wird gelöscht !!!

      DM.TerminalDB.SQL.add('UPDATE terminal'); 
      DM.TerminalDB.SQL.add('SET P_und_U_Zeit='+#39+IntToStr(20)+#39); 
      DM.TerminalDB.SQL.add('SET Start='+#39+IntToStr(1000)+#39); 
      DM.TerminalDB.SQL.add('SET Stopp='+#39+IntToStr(500)+#39); 
      DM.TerminalDB.SQL.add('SET Bemerkung='+#39+'Prüfung'+#39); 
      try 
        DM.TerminalDB.ExecSQL; 
      except 
        on E : Exception do ShowMessage(E.Message); 
      end; 
      DM.TerminalDB.Close; 
      DM.TerminalDB.Refresh; 
    end;


wenn du den sql.clear nicht machst, bleibt der vorherige SQL-Befehl erhalten und der neue wird einfach angehängt


Nikola - Do 06.02.03 17:13

Der Fehler ist noch immer da,

PS.
es soll nicht eingefügt werden sonder vorhandener Datensatz geändert werden.

Mit freundlichen Grüßen

Nikola


AceTheFace - So 09.02.03 13:21

Nikola hat folgendes geschrieben:
Der Fehler ist noch immer da,

PS.
es soll nicht eingefügt werden sonder vorhandener Datensatz geändert werden.

Mit freundlichen Grüßen

Nikola


Weiß zwar nicht obs daran liegen könnte, aber warum schliesst du denn die Query die ganze Zeit :)

Ansonsten lautet die Syntax einer SQL-Update-Anweisung:

UPDATE tabelle SET feld1=wert1, feld2=wert2 WHERE eigenschaft=wert3

Gruß,

Ace


Nikola - So 09.02.03 23:37

Hallo AceTheFace,

Du hast Recht, in WHERE wahr ein Schreibfehler :autsch:

Danke jetzt klapt es.