![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: IB
Insert erst beim schließen
Hi,
ich bin Neuling und habe ein Problem: Ich will Daten in eine Firebird-DB einfügen und das klappt nicht so richtig. Hier mein Code:
Code:
Das wenn ich später mit diesen Daten arbeiten will, kann ich nicht drauf zugreifen (also die gibt's angeblich nicht) und auch mittels IB Expert sind sie in der DB nicht zu sehen. Erst, wenn ich mein Programm schließe, sind die Daten zu sehen. Sie werden also sozusagen erst beim schließen eingefügt.
DS_Vorgang.Open;
DS_Vorgang.Insert; DS_Vorgang.FieldByName('Vorgangsnummer').AsString:=s; DS_Vorgang.FieldByName('Datum').AsDateTime:=Date; DS_Vorgang.FieldByName('Art').asinteger:=2; DS_Vorgang.FieldByName('Kunde').AsString:=FRech.LKdNr.Caption; DS_Vorgang.FieldByName('TauschApfelKg').AsFloat:=0; DS_Vorgang.FieldByName('TauschApfelL').AsInteger:=GesGHA; DS_Vorgang.FieldByName('AufkaufA').AsFloat:=0; DS_Vorgang.FieldByName('TauschQuitteKg').AsFloat:=0; DS_Vorgang.FieldByName('TauschQuitteL').AsInteger:=GesGHQ; DS_Vorgang.FieldByName('AufkaufQ').AsFloat:=0; DS_Vorgang.FieldByName('BetragNetto').AsFloat:=Sum; DS_Vorgang.FieldByName('BetragBrutto').AsFloat:=Sum-SumS; DS_Vorgang.Post; Kann mir jemand sagen, was ich falsch mache?? Danke schonmal... |
Re: Insert erst beim schließen
FireBird arbeitet mit Transaktionen. Du scheinst AutoCommit aktiviert zu haben, deshalb wird beim Schliessen vom Programm die Transaktion abgeschlossen ( Commit). Hättest du das nicht, würden die Änderungen verworfen.
Vor einem Commit/RollBack sind die Änderungen nur innerhalb des Transaktionskontext oder bei dirty read sichtbar. Ich würde in deinem Fall den Insert in einen eigenen Transaktionskontext einpacken. |
Re: Insert erst beim schließen
Danke für die Antwort.
Bei meinem DataSet steht bei DefaultAction TACommit. Wie packe ich das denn in einen eigenen Transaktionskontext? (Ich bin wie gesagt ein Neuling was Datenbanken angeht :) ) |
Re: Insert erst beim schließen
Lege zusätzlich eine TIBTransaction auf das Formular und wähle diese im DataSet aus.
Nun kannst du mit
Delphi-Quellcode:
die Tranaktion starten und mit
<Transaktion>.StartTransaction;
Delphi-Quellcode:
abschliessen bzw. mit
<Transaktion>.Commit;
Delphi-Quellcode:
verwerfen
<Transaktion>.Rollback;
|
Re: Insert erst beim schließen
Zitat:
wobei meiner Meinung nach die Trennung von der DB nach dem Post den selben Eeffekt hat. Oder gibts da betreffs Zugriffszeit Unterschiede, oder welche Nachteile siehst du gegenüber der Transaktion? |
Re: Insert erst beim schließen
Das Trennen schliesst die Tranaktion auch ab oder verwirft sie ( je nach Einstellung). Aber es ist nicht notwendig.
Mit Auschalten eines Motors kann man ja auch Bremsen. |
Re: Insert erst beim schließen
Hallo,
jedes Re-Connect dauert etwas. Heiko |
Re: Insert erst beim schließen
Hi,
danke für die Antworten, aber ich glaub ich verstehs noch nich so richtig. Es ist immernoch der selbe Fehler. Also ich hab jetzt auf dem einen From je einmal IBDataSet, IBTransaction und IBDatabase. IBDataSet1 (in meinem code vorhin DS_Vorgang) Database = IBDatabase1 Transaction = IBTransaction1 IBTransaction1 DefaultAction = TACommit DefaultDatabase = IBDatabase1 IBDatabase1 DefaultTransaction = IBTransaction1
Code:
Es wird wieder erst beim schließen in die DB eingefügt.
IBTransaction1.StartTransaction;
IBDataSet1.Open; IBDataSet1.Insert; IBDataSet1.FieldByName .... .... // Felder füllen IBDataSet1.Post; IBTransaction1.Commit; Was soll ich noch ändern?? |
Re: Insert erst beim schließen
Und wie siehst du, das es erst bei Programmende eingefügt wird?
|
Re: Insert erst beim schließen
ich gucke nebenbei mit IB Expert in die DB rein. (Ich habs auch zwischendurch immer wieder geöffnet und geschlossen, in der Hoffnung, das es sich aktualisiert, aber es passiert nix).
Mein grundsätzliches Problem ist eigentlich, das ich mit Fastreport auf einem anderen Form damit einen Report erzeugen möchte, aber der bleibt immer leer. Wenn ich das mit einem älteren Datensatz probiere, klappt es problemlos. Das programm muss zwischendurch immer einmal geschlossen werden. Das will ich aber nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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 by Thomas Breitkreuz