AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Insert erst beim schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Insert erst beim schließen

Ein Thema von Tobinator · begonnen am 21. Aug 2009 · letzter Beitrag vom 24. Aug 2009
Antwort Antwort
Seite 1 von 3  1 23      
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#1

Insert erst beim schließen

  Alt 21. Aug 2009, 17:11
Datenbank: Firebird • Version: 2.1 • Zugriff über: IB
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:
    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;
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.

Kann mir jemand sagen, was ich falsch mache??
Danke schonmal...
Tobias
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 17:27
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#3

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 18:24
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 )
Tobias
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 18:32
Lege zusätzlich eine TIBTransaction auf das Formular und wähle diese im DataSet aus.
Nun kannst du mit <Transaktion>.StartTransaction; die Tranaktion starten und mit
<Transaktion>.Commit; abschliessen bzw. mit <Transaktion>.Rollback; verwerfen
Markus Kinzler
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 19:30
Zitat von mkinzler:
Lege zusätzlich eine TIBTransaction auf das Formular und wähle diese im DataSet aus.
Nun kannst du mit <Transaktion>.StartTransaction; die Tranaktion starten und mit
<Transaktion>.Commit; abschliessen bzw. mit <Transaktion>.Rollback; verwerfen


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?
Karl-Heinz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 19:36
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.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 19:37
Hallo,

jedes Re-Connect dauert etwas.


Heiko
Heiko
  Mit Zitat antworten Zitat
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#8

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 20:16
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:
  IBTransaction1.StartTransaction;
  IBDataSet1.Open;
  IBDataSet1.Insert;
  IBDataSet1.FieldByName ....
  .... // Felder füllen
  IBDataSet1.Post;
  IBTransaction1.Commit;
Es wird wieder erst beim schließen in die DB eingefügt.

Was soll ich noch ändern??
Tobias
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 20:21
Und wie siehst du, das es erst bei Programmende eingefügt wird?
Markus Kinzler
  Mit Zitat antworten Zitat
Tobinator

Registriert seit: 18. Mai 2008
Ort: Cottbus
53 Beiträge
 
#10

Re: Insert erst beim schließen

  Alt 21. Aug 2009, 21:11
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.
Tobias
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 15:31 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