AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Update funktioniert nicht

Ein Thema von Ati · begonnen am 1. Aug 2006 · letzter Beitrag vom 2. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#1

Update funktioniert nicht

  Alt 1. Aug 2006, 17:45
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos
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?
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Update funktioniert nicht

  Alt 1. Aug 2006, 17:53
Probier doch mal:

"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.
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Update funktioniert nicht

  Alt 1. Aug 2006, 17:53
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
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';
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#4

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 08:21
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;
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#5

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 09:04
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 +';';
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 09:13
hi,

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?

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
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#7

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 09:50
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.
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 10:39
Und was ist mit der Fehlermeldung? Kopier die mal hier rein....
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#9

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 11:02
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??
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Schaedel
Schaedel

Registriert seit: 5. Jan 2006
Ort: Saarland
174 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Update funktioniert nicht

  Alt 2. Aug 2006, 11:20
Hallo,

Wann wird der Trigger denn aktiv?
Insert???

Du musst schon mehr Informationen geben ....
Michael S.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
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