Autor Beitrag
Nikola
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Win 3.11, Win 98, Win 2000, Win XP
D 1.0 C/S, D6 Prof. 2005 Prof.
BeitragVerfasst: Do 06.02.03 15:09 
Hallo,

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

ZB.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Win 3.11, Win 98, Win 2000, Win XP
D 1.0 C/S, D6 Prof. 2005 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: 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:
ausblenden 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.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)


Zuletzt bearbeitet von smiegel am Do 06.02.03 16:41, insgesamt 1-mal bearbeitet
GuGl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 35



BeitragVerfasst: Do 06.02.03 16:40 
Hallo Nikola,

ausblenden 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

_________________
Gruß, GuGl
Nikola Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Win 3.11, Win 98, Win 2000, Win XP
D 1.0 C/S, D6 Prof. 2005 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Win 3.11, Win 98, Win 2000, Win XP
D 1.0 C/S, D6 Prof. 2005 Prof.
BeitragVerfasst: So 09.02.03 23:37 
Hallo AceTheFace,

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

Danke jetzt klapt es.