Hallo Forenteilnehmer,
als Lazarus Einsteiger brauche ich ich die Hilfe von euch Profis.
Ich mußte auf die schnelle ein Suchmaske proggen. Habe ein TDBGrid genommen und es läuft prima. Dann kam der Wunsch ein update auf die markierte Zeile zu machen. Dazu habe ich ein TSQLQuery Objekt und ein TSQLTransaction Objekt genommen. Folgendes Problem ist aufgetaucht. Ich führe das update durch, schaue mir mit TOAD den Datensatz an und sehe keine Änderung. Erst wenn ich die Lazarus Anwendung schliesse, sehe ich das Ergebnis des updates. Es handelt sich um eine oracle 10g DB.
Nach dem update, erhält das TDBTransaction sein commit. Wieso klappt das nicht?
In Toad habe ich mal ein update auf diesen Datensatz gemacht und tatsächlich das update hängt. Erst wenn ich wieder die Lazarus Anwendung schliesse, schlägt das update durch.
Ist ist so, als ob Lazarus (evtl. über das TDBGrid) ein holdlock durchführt oder das commit nicht greift.
Wer hat den goldenen Tipp für mich???
Als workaround probier ich morgen mal das update in eine db-proc zu legen und diese via Lazarus aufzurufen.
Ciao beule
Habe dies gefunden: http://bugs.freepascal.org/view.php?id=11117
Also der Weg über eine Stored Proc scheitert. Kann mir jemand zeigen wie man ein update sauber mit Lazarus formuliert, ohne obigen Fehler zu erhalten? DANKE
Datensatz erst entsperrt nach schl. Anwendung?!
Re: Datensatz erst entsperrt nach schl. Anwendung?!
Es wäre sicher nicht verkehrt, wenn du einen Ausschnitt aus deinem Quelltext veröffentlichen könntest. Danach läßt sich oft besser sagen, wo der Fehler steckt. Und Angaben zu den Versionsnummern (Lazarus, FPC, ...) sind auch hilfreich.
knight
knight
Re: Datensatz erst entsperrt nach schl. Anwendung?!
Hallo knight,
erstmal vielen Dank für Dein Feedback. Ich habe hier zu Hause die Laz Version: 0.9.26.2 Beta, die Version in der Firma müßte mindestens diese sein oder ein Tick neuer. Kann ich aber morgen erst nachsehen. FPC ist 2.2.2
Das folgende Beispiel funktioniert auch nicht mit der 10g (hier XE), die ich zu Hause habe. In der Fa. ist es die 10g.
Das Ergebnis des Updates sehe ich erst nachdem ich die Lazarus Anwendung schliesse.
Liebe Grüße
beule
update:
Habe einen workaround aber keine Lösung gefunden:
- statt: SQLTransaction2.Commit
- funktioniert es mit OracleConnection1.ExecuteDirect('commit')
Das erscheint mir nicht logisch, oder?!
erstmal vielen Dank für Dein Feedback. Ich habe hier zu Hause die Laz Version: 0.9.26.2 Beta, die Version in der Firma müßte mindestens diese sein oder ein Tick neuer. Kann ich aber morgen erst nachsehen. FPC ist 2.2.2
Das folgende Beispiel funktioniert auch nicht mit der 10g (hier XE), die ich zu Hause habe. In der Fa. ist es die 10g.
Code: Alles auswählen
procedure TForm1.Button3Click(Sender: TObject);
begin
SQLQuery2.Close;
SQLQuery2.SQL.Add('update Partner set Name1= ' + QuotedStr('Meier') + ' where id=1');
SQLQuery2.ExecSQL;
SQLTransaction2.Commit; // Im Objektinspector dieses Objekt als Trans.-Objekt für den SQLQuery2 eingestellt.
end;
Das Ergebnis des Updates sehe ich erst nachdem ich die Lazarus Anwendung schliesse.
Liebe Grüße
beule
update:
Habe einen workaround aber keine Lösung gefunden:
- statt: SQLTransaction2.Commit
- funktioniert es mit OracleConnection1.ExecuteDirect('commit')
Das erscheint mir nicht logisch, oder?!
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: Datensatz erst entsperrt nach schl. Anwendung?!
Auch wenn es schon etwas her ist...
Wäre es nicht angebrachter, ein CommitRetain zu verwenden, statt eines Commits? Hast du mal SQLTransaction2.CommitRetain probiert, ob das den Workaround ersetzt?
Wäre es nicht angebrachter, ein CommitRetain zu verwenden, statt eines Commits? Hast du mal SQLTransaction2.CommitRetain probiert, ob das den Workaround ersetzt?
Johannes