AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [Firebild] Änderungen nach Insert gehen verloren
Thema durchsuchen
Ansicht
Themen-Optionen

[Firebild] Änderungen nach Insert gehen verloren

Ein Thema von BlueStarHH · begonnen am 3. Jul 2007 · letzter Beitrag vom 4. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#1

[Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:09
Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX, TIBTable
Hallo ich habe folgendes Problem: In einer Tabelle wird mit Insert ein neuer Kunde angelegt und einge Felder werden ausgefüllt. Die Daten werden mit Post gespeichert. Nun wird die Kundentabelle in den Edit-Modus versetzt und ein Feld geänder und mit Post gespeichert. Die Änderung wird in TDBEdits auch angezeigt. Wenn ich nun zu einem anderen Datensatz scrolle und wieder zum geänderten Datensatz zurück, sind die Änderungen immer noch sichtbar. Wird die Anwendung nun beendet und neu gestartet, ist der neue Kunde zwar da, aber die letzten Änderungen sind verschwunden. Dies passiert nur, wenn der Kunden mit Insert neu eingefügt wurde.
Beispielcode:

Delphi-Quellcode:
Kunden.Insert;
Kunden.FieldByName('KdNr').AsInteger := 123;
Kunden.FieldByName('Name').AsString := 'Schneider';
Kunden.Post;

Kunden.Edit;
Kunden.FieldByName('Firma').AsString := 'EineFirma'; //Diese Änderung verschwindet nach Programmende
Kunden.Post;
Kunden ist die TIBTable-Komponente. Diese ist mit einer TIBTransaction verknüpft. Die Einstellungen dieser sind:
DefaultAction:TACommitRetaining
Params: (Commited lesen)
read_committed
rec_version
nowait

Vielen Dank für eure Hilfe im Voraus!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:12
Anscheinend wird aper die Transaktion nicht comitted. Sorge mal manuell dafür.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:17
Liegt es wirklich am fehlenden Commit? Dann müssten ja alle Daten nicht da sein. Es fehlen aber nur die letzten Änderungen. Ich hab mal was getestet:

Delphi-Quellcode:
Kunden.Insert;
Kunden.FieldByName('KdNr').AsInteger := 123;
Kunden.FieldByName('Name').AsString := 'Schneider';
Kunden.Post;

Kunden.Edit;
Kunden.FieldByName('Firma').AsString := 'EineFirma';
Kunden.Post;

Transaction.Commit; //<--- NEU
Mit dem oberen Code ist das Resultat, das selbe: Die letzten Änderungen verschwinden!
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:22
Ein zweiter Test:

Delphi-Quellcode:
Kunden.Insert;
Kunden.FieldByName('KdNr').AsInteger := 123;
Kunden.FieldByName('Name').AsString := 'Schneider';
Kunden.Post;

OldRecNo := Kunden.RecNo;
Transaction.Commit;
Kunden.Active := true;
Kunden.RecNo := OldRecNo;

Kunden.Edit;
Kunden.FieldByName('Firma').AsString := 'EineFirma';
Kunden.Post;
Nun sind die Änderungen zwar nach Programmende vorhanden. Es ergeben sich aber zwei neue Probleme: Das ganze sind nun zwei Transaktionen. Ich möchte aber nur eine haben, da es entwender komplett oder gar nicht eingetragen werden soll. OK, zur not könnte ich damit leben, wenn es gar nicht änders geht, aber schön ists nicht. Problem zwei: Den ausgewälten Datensatz über die RecNo wiederzufinden ist fehleranfällig, weil sich nach dem Commit die RecNo geändert haben könnte, wenn ein anderer User einen neuen Datensatz in die DB einfügt. Wie kann ich denn den vor Commit ausgewählten Datensatz nach dem Commit mit 100%iger Sicherheit wieder anspringen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:24
Dann mußt du einen anderen Isolationslevel für die Transaktion nehmen und die se manuell Startne und committed/verwerfen.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:49
Zitat von mkinzler:
Dann mußt du einen anderen Isolationslevel für die Transaktion nehmen und die se manuell Startne und committed/verwerfen.
OK, wenn ich das so mache, wie finde ich dann den Datensatz wieder, dervor dem Commit angezeigt wurde? Nach dem Commit die die Verbindung ja weg und beim Neuaufbau der Verbindung zur DB wird immer der erste Datensatz der Tabelle angezeigt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:53
Ist das bei IBX der Fall? Normalerweise hat ja eine Transaktion nicht mit der Connection zu tun.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 13:58
Zitat von mkinzler:
Ist das bei IBX der Fall? Normalerweise hat ja eine Transaktion nicht mit der Connection zu tun.
Ich formuliere es nochmal genauer: Die Verbindung zur Datenbank (TIBDatabse) ist nicht weg sondern die TIBTable ist nicht mehr aktiv nach einem Commit. D.h. nach einem Commit muss TIBTable.active wieder auf true gesetzt werden. Danach steht die TIBTable auf dem ersten Datensatz. Wie finde ich also den zuvor ausgewählen Datensatz? Verhalten sich andere Firebid-Komponenten anderer Hersteller nicht so? Ich dachte das wäre so gang und gäbe.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 3. Jul 2007, 14:02
Die Tranaktion dürfte eigentlich keine Wirkung auf das Aktiv-sein eines DataSets haben. Allerdings würde ich auch keine Table-Komponente nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 4. Jul 2007, 13:04
Zitat von mkinzler:
Die Tranaktion dürfte eigentlich keine Wirkung auf das Aktiv-sein eines DataSets haben.
Haben sie aber leider. Das hat selbst der Entwickler der Komponenten in einer Newsgroup geschrieben...
  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 11:26 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