![]() |
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:
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?
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; |
Re: Update funktioniert nicht
Probier doch mal:
Delphi-Quellcode:
Falls Nr kein String ist, kannst du ja die '' weglassen. Warum hast du um 'Erledigt' zwei davon und warum ein =: vor Nr?
"UPDATE Korrekturen SET Status = 'Erledigt' where ID = '" + 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. |
Re: Update funktioniert nicht
Zitat:
Delphi-Quellcode:
oder
qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' where ID=' + nr;
Delphi-Quellcode:
qrmain.params.parambyname('nr').AsString := nr;
qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' where ID=:nr'; |
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; |
Re: Update funktioniert nicht
Zitat:
Delphi-Quellcode:
...
qrmain.SQL.text:='UPDATE Korrekturen SET Status=''Erledigt'' WHERE ID = ' + nr +';'; |
Re: Update funktioniert nicht
hi,
Zitat:
SQL-Code:
Das kommt bei Dir raus. Wäre sicherlich auch sinnvoll die '' durch ein QueotedStr zu ersetzen, am besten aber gleich mit Parameter arbeiten:
UPDATE Korrekturen SET Status='Erledigt' = 1;
Delphi-Quellcode:
die "qrMain.ParamByName" habe ich mal geraten, da ich schon lange nichts mehr mit Zeos gemacht habe.
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; 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 |
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.
|
Re: Update funktioniert nicht
Und was ist mit der Fehlermeldung? Kopier die mal hier rein....
|
Re: Update funktioniert nicht
War gerade mal im Lazarus-Forum und habe da was gefunden. Hier erstmal der aktuelle Code:
Delphi-Quellcode:
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??
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; |
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 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz