![]() |
Re: Commit geht nicht (SQL)
Nein, das ist ja der Witz. :spin:
|
Re: Commit geht nicht (SQL)
und du startest die transaction im beforinsert -event?
|
Re: Commit geht nicht (SQL)
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin i := 1; StringGrid1.fixedColor := clBtnFace +10; StringGrid1.Col := i; (* if StringGrid1.Options = goFixedVertLine then StringGrid1.GridLineWidth := 0; *) StringGrid1.Cells [0,1] := IntToStr (i)+'.'; StringGrid1.Cells [1,0] := 'Art.Nr.'; StringGrid1.Cells [2,0] := 'Art.Bez.'; ... RecDataMod.Transaction.StartTransaction; LabeledEdit1.SetFocus; end; |
Re: Commit geht nicht (SQL)
hansa ist ja gut :oops:
transactionen sollten nur so kurz wie möglich offen sein :!: ich denke wir machen morgen weiter - an der gleichen stelle mir drehen sich schon die :roteyes: raik |
Re: Commit geht nicht (SQL)
tja, wer weiß :?: Formshow -> StartTransaction. FormClose -> Commit. 8)
|
Re: Commit geht nicht (SQL)
moin hansa
wollte mal ein prog bauen, leider funktionieren die ressourcen mit ibx icht mehr. wenn ich heute noch hinkriege werde ich es noch machen raik |
Re: Commit geht nicht (SQL)
was mir noch aufgefallen ist, das du nicht explizit die dataset bei der transaction angibts:
Delphi-Quellcode:
begin
CASE MessageDlg('speichern ?',mtInformation, [mbYes, mbNo], 0) OF mrNo : recmoddata.TransAction.Rollback; mrYes : recmoddata.TransAction.Commit; end; |
Re: Commit geht nicht (SQL)
Wenn ich so weiter mache, ist das halbe Programm gepostet, aber hier muß der Hund begraben liegen:
Delphi-Quellcode:
Zuerst suche ich einen Artikel. Ist einer da, gehts mit dem Source hier weiter. Ich prüfe ob Lagerdaten dazu exist. und dann wird der Lagerbestand halt aktualisiert. Irgendwas stimmt da nicht. Ich habe das ungute Gefühl, daß ich etwas sehr wichtiges vergessen / falsch gemacht habe, sehe aber nicht was. 8)
LagDS.Close;
LagDS.SelectSQL.Text := 'SELECT * FROM LAGER8 WHERE ID_ART = '; LagDS.SelectSQL.Text := LagDS.SelectSQL.Text + ArtDS.FieldByName ('ID').AsString; LagDS.open; aendern := NOT LagDS.IsEmpty; LagDS.Close; LagDS.SelectSQL.Clear; if not aendern then begin LagDS.SelectSQL.Add ('INSERT INTO LAGER8 (ID,MENGE) VALUES ('); LagDS.SelectSQL.Add (ArtDS.FieldByName ('ID').AsString); LagDS.SelectSQL.Add (','+IntToStr (-1*GesMenge)+')'); LagDS.Open; end else begin LagDS.SelectSQL.Add ('UPDATE LAGER8 SET MENGE=MENGE-'); LagDS.SelectSQL.Add (IntToStr (GesMenge)); LagDS.Open; end; |
Re: Commit geht nicht (SQL)
Hallo Hansa,
ich habe leider nicht die Zeit, mir einen genauen Lösungsvorschlag auszudenken, aber das Problem ist ganz klar: Du weist die - an sich korrekte - SQL-Anweisung der SelectSQL-Eigenschaft der Dataset zu und öffnest dann die Datenmenge. Das ist aber nicht dafür gedacht. Du musst entweder mit den Insert- oder UpdateSQL-Eigenschaften arbeiten und ExecSQL aufrufen (ich weiß aber nicht genau, ob das einfach so geht oder ob erst DS.Insert->Feldzuweisung->DS.Post machen musst) oder mit TIBSQL arbeiten. Jedenfalls kannst Du mit SelectSQL keine Daten ändern ;-) Viel Glück Urs |
Re: Commit geht nicht (SQL)
Leider bin ich heute echt blind, aber so ganz kann das nicht stimmen. Der Witz ist nämlich, wenn kein Datensatz vorhanden lande ich bei insert. Gebe ich sofort danach nochmal dasselbe ein lande ich bei Update. Gebe ich einen anderen Artikel ein wieder Insert. Also so wie es sein müßte. Aber mir fällt gerade auf, daß ich kein Post verwende. hmmmm.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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