Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Update funktioniert nicht (https://www.delphipraxis.net/74337-update-funktioniert-nicht.html)

Ati 1. Aug 2006 16:45

Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos

Update funktioniert nicht
 
Hallo zusammen,

ich habe mal wieder ein kleines Problem mit meiner DB. Also ich lasse mir in einem DBGrid alle vorhandenen Daten anzeigen. Wenn ich diese (es sind eigentlich Anträge) bearbeitet habe wollte ich aus lauter Faulheit einfach den DS anklicken und dann per Button den Status von "Antrag" auf "Erledigt" ändern...quasi diesen DS updaten. Hier mal mein kompletter Code (denkt dran ich höre jeden Lacher):
Delphi-Quellcode:
procedure TForm1.btnanzeigeClick(Sender: TObject);
begin
  if dbmain.Connected=true then
  begin
    dbmain.Connected:=false;
  end;
  dbmain.Connected:=true;
  qrmain.SQL.Text:='SELECT ID,Lager,Artikel,Menge_soll,Menge_Ist,Kommentar,Erfasser,Status,Datum From Korrekturen;';
  qrmain.Open;
  qrmain.Refresh;
end;

procedure TForm1.Button1Click(Sender: TObject);
var nr:string;
begin
 nr:=dbgrid1.DataSource.DataSet.FieldByName('ID').AsString;
 showmessage(nr);
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' where ID=:nr';
 qrmain.ExecSQL;
 trmain.Commit;
end;
Das mit dem Showmessage unten ist nur ein Test, ob er mir auch die richtige ID gibt. So wie ich mich kenne habe ich das ganze wieder voll falsch angefangen..stimmt´s?

dahead 1. Aug 2006 16:53

Re: Update funktioniert nicht
 
Probier doch mal:

Delphi-Quellcode:
"UPDATE Korrekturen SET Status = 'Erledigt' where ID = '" + nr + "'"
Falls Nr kein String ist, kannst du ja die '' weglassen. Warum hast du um 'Erledigt' zwei davon und warum ein =: vor Nr?

Edit: achso, zum restlichen code: mit zeos/firebird habe ich pers. noch nicht gearbeitet, kenne nur MySQL resp. SQL, kann dazu also nix sagen.

Edit2: ein + vergessen.

Michael Habbe 1. Aug 2006 16:53

Re: Update funktioniert nicht
 
Zitat:

Zitat von Ati
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var nr:string;
begin
 nr:=dbgrid1.DataSource.DataSet.FieldByName('ID').AsString;
 showmessage(nr);
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' where ID=:nr';
 qrmain.ExecSQL;
 trmain.Commit;
end;
Das mit dem Showmessage unten ist nur ein Test, ob er mir auch die richtige ID gibt. So wie ich mich kenne habe ich das ganze wieder voll falsch angefangen..stimmt´s?

Du muss Deinem SQL auch einen Wert zuweisen oder den entsprechenden Parameter füllen
Delphi-Quellcode:
qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' where ID=' + nr;
oder
Delphi-Quellcode:
qrmain.params.parambyname('nr').AsString := nr;
qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' where ID=:nr';

Ati 2. Aug 2006 07:21

Re: Update funktioniert nicht
 
Moin,

leider haben alle Vorschläge bisher zu Fehlermeldung (EDatabaseError) geführt. Hier mal der aktuelle Code:
Delphi-Quellcode:
procedure TForm1.btnanzeigeClick(Sender: TObject);
begin
  if dbmain.Connected=true then
  begin
    dbmain.Connected:=false;
  end;
  dbmain.Connected:=true;
  qrmain.SQL.Text:='SELECT ID,Lager,Artikel,Menge_soll,Menge_Ist,Kommentar,Erfasser,Status,Datum,Uhrzeit From Korrekturen;';
  qrmain.Open;
  qrmain.Refresh;
end;

procedure TForm1.Button1Click(Sender: TObject);
var nr:string;
begin
 nr:=dbgrid1.DataSource.DataSet.FieldByName('ID').AsString;
 showmessage(nr);
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' = ' + nr +';' ;
 qrmain.ExecSQL;
 trmain.Commit;
end;

Peinhard 2. Aug 2006 08:04

Re: Update funktioniert nicht
 
Zitat:

Zitat von Ati
Delphi-Quellcode:
...
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' = ' + nr +';' ;
 qrmain.ExecSQL;
 trmain.Commit;
end;

Und wo ist jetzt das 'WHERE ID' geblieben...? Die Frage ob Anführungszeichen oder nicht entscheidet sich daran, welchen Feldtyp ID hat, nicht von welchem Typ die Variable 'nr' ist. Nur wenn ID ein String-Feld ist, brauchts welche, sonst (was wahrscheinlicher ist bzw besser wäre) keine:

Delphi-Quellcode:
...
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' WHERE ID = ' + nr +';';

Lemmy 2. Aug 2006 08:13

Re: Update funktioniert nicht
 
hi,

Zitat:

Zitat von Ati
Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var nr:string;
begin
 nr:=dbgrid1.DataSource.DataSet.FieldByName('ID').AsString;
 showmessage(nr);
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' = ' + nr +';' ;
 qrmain.ExecSQL;
 trmain.Commit;
end;

nicht persönlich nehmen, aber was soll das für ein SQL-Statement sein?

SQL-Code:
UPDATE Korrekturen SET Status='Erledigt' = 1;
Das kommt bei Dir raus. Wäre sicherlich auch sinnvoll die '' durch ein QueotedStr zu ersetzen, am besten aber gleich mit Parameter arbeiten:

Delphi-Quellcode:
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=:Status where ID=:ID;';

....
procedure TForm1.Button1Click(Sender: TObject);
var nr:string;
begin
 nr:=dbgrid1.DataSource.DataSet.FieldByName('ID').AsString;
 showmessage(nr);
 qrMain.Close;
 qrMain.ParamByName('Status').AsString:='Erledigt';
 qrMain.ParamByName('ID').AsString:=nr;
 qrmain.ExecSQL;
 trmain.Commit;
end;
die "qrMain.ParamByName" habe ich mal geraten, da ich schon lange nichts mehr mit Zeos gemacht habe.

Das trMain.Commit halte ich persönlich für problematisch, da beim nächsten Button1Click die Fehlermeldung kommt, dass die Transaktion nicht gestartet ist. Zudem solltest Du das explizite commit nur dann machen, wenn du die Transaktion auch selbst explizit gestartet hast (trMain.StartTransaction).

Grüße
Lemmy

Ati 2. Aug 2006 08:50

Re: Update funktioniert nicht
 
Sorry das mit dem fehlenden "where"-Teil war nur ein Kopierfehler von mir. Jedoch hat keiner der Vorschläge geklappt. Vielleicht ist es auch wieder was "Lazarus" spezielles.

Lemmy 2. Aug 2006 09:39

Re: Update funktioniert nicht
 
Und was ist mit der Fehlermeldung? Kopier die mal hier rein....

Ati 2. Aug 2006 10:02

Re: Update funktioniert nicht
 
War gerade mal im Lazarus-Forum und habe da was gefunden. Hier erstmal der aktuelle Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var nr,stat:string;
begin
 nr:=qrmain.FieldByName('ID').AsString;
 showmessage(nr);
 dbmain.Close;
 dbmain.Open;
 if dbmain.Connected=true then
  begin
    dbmain.Connected:=false;
  end;
  dbmain.Connected:=true;
 trmain.StartTransaction;
 qrmain.Close;
 qrmain.SQL.Clear;
 qrmain.SQL.text:='UPDATE Korrekturen SET Status=:Status where ID=:ID;';
 qrMain.params.ParamByName('Status').AsString:='Erledigt';
 qrMain.params.ParamByName('ID').AsString:=nr;
 showmessage( qrMain.params.ParamByName('Status').AsString+' '+ qrMain.params.ParamByName('ID').AsString);
 qrmain.ExecSQL;
 trmain.commit;
 trmain.EndTransaction;
 dbgrid1.Update;
 
 qrmain.Close;
  qrmain.SQL.Text:='SELECT ID,Lager,Artikel,Menge_soll,Menge_Ist,Kommentar,Erfasser,Status,Datum,Uhrzeit From Korrekturen;';
  qrmain.Open;
  qrmain.Refresh;

end;
Wie man sehen kann, habe ich mit den "Showmessages" Kontrollen eingebaut, um die relevanten Werte zu prüfen....alles stimmt. Jedoch ändert er die Daten nicht, allerdings kommt auch keine Fehlermeldung mehr. Wenn ich das SQL-Statement direkt in IB-Expert ausführe wird auch alle entsprechend geändert. Könnte hier eventuell mein Trigger (erhöht die ID und trägt die Erfassungsuhrzeit sowie Datum ein) hinderlich sein??

Schaedel 2. Aug 2006 10:20

Re: Update funktioniert nicht
 
Hallo,

Wann wird der Trigger denn aktiv?
Insert???

Du musst schon mehr Informationen geben ....


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz