Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi insert geht erst bei Programmende (https://www.delphipraxis.net/6360-insert-geht-erst-bei-programmende.html)

Hansa 8. Jul 2003 08:07


insert geht erst bei Programmende
 
Hi,

ich habe hier folgenden Effekt: erzeuge ich einen neuen Datensatz, so wird dieser erst in der DB sichtbar, sofern das Programm verlassen wird, obwohl ich nach dem Insert sogar ein Transaction.commit ausführe. Ich prüfe mit SELECT, ob der Datensatz bereits da ist und mache dann je nach Ergebnis ein Insert oder Update. Gebe ich in einem Arbeitsschritt zweimal dasselbe ein, so wird zweimal insert gemacht anstatt ein insert und ein update.

Jens Schumann 8. Jul 2003 09:20

Re: insert geht erst bei Programmende
 
Hallo Hansa,
versuche doch mal mit POST (vor Transaction.Commit) den Datensatz explizit abzuschicken.

Hansa 8. Jul 2003 09:34

Re: insert geht erst bei Programmende
 
Hi Jens,

ich benutze eine Query, da gibts kein Post.

Lemmy 8. Jul 2003 09:39

Re: insert geht erst bei Programmende
 
Hi Hansa,

habe ich das richtig verstanden: Du hast ein Query, in der Du je nach Bedarf ein Insert oder Update-Statement einfügst und dieses dann ausführst?

Wenn ja:

1. Bist Du sicher, dass Du die richtige Transaction mit Commit beendest (bitte nicht beleidigt sein, ist mir schon das eine oder andere mal passiert)?
2. Welche Query verwendest Du: IBX, FIBPlus, IBObjects, BDE,...? Bei den IBX solltest Du ne halbwegs aktuelle Version verwenden, da es dort bei den alten Versionen immer wieder mit den Transaktionen Probleme gab.
3. Wenn Du die Transaction mit Commit beendest, öffnest Du diese auch expilzit (d.h. vor dem Query.execute; ein TRansaction.StartTransaction)?


Grüße
Lemmy

Hansa 8. Jul 2003 09:56

Re: insert geht erst bei Programmende
 
Zitat:

Zitat von Lemmy
1. Bist Du sicher, dass Du die richtige Transaction mit Commit beendest...

habe nur eine.

Zitat:

Zitat von Lemmy
2. Welche Query verwendest Du?

FIBplus

Zitat:

Zitat von Lemmy
3. Wenn Du die Transaction mit Commit beendest, öffnest Du diese auch expilzit (d.h. vor dem Query.execute; ein TRansaction.StartTransaction)?

Nein, der Sache geh ich jetzt nach.

P.S.: Wenn ich die Transaction immer neu starte, dann kriege ich Ärger bei einem eventuellen Rollback, oder ?

Hansa 8. Jul 2003 10:12

Re: insert geht erst bei Programmende
 
Es sieht jetzt so aus:

SQL-Code:
ExecQuery;
Commit;
StartTransaction;
keine Änderung. Soll ich vielleicht ein Dataset verwenden :?:

Lemmy 8. Jul 2003 11:01

Re: insert geht erst bei Programmende
 
Versuche es eher mal so:


Code:
Query.SQL.Text:='INSERT INTO....';
if Transaction.InTransaction then
  TransaCtion.Commit;
Transaction.StartTransaction;
Query.ExecQuery;
Transaction.Commit;

Anschließend schaust Du in der IBConsole/... nach ob der Datensatz vorhanden ist. Aber Achtung! Auch dort gibt es Transaktionen die evtl. am laufen sind, d.h. am besten nach dem Insert/Update die Datenbankconnection schließen und neu öffnen, dann sollte aber wirklich alles i.O. sein.

Grüße
Lemmy

Hansa 8. Jul 2003 11:06

Re: insert geht erst bei Programmende
 
Habe das ganze jetzt auf Dataset umgestellt, mit dem Erfolg, daß es geht aber selbst nach Programmende immer nur ein insert gemacht wird, kein Update. 8) Der Record ist beim Insert richtig drin, aber beim überprüfen wird er nicht mehr gefunden, also statt update wird insert gemacht. :mrgreen: Probiere Dein Bsp. jetzt mal aus.

Hansa 8. Jul 2003 12:04

Re: insert geht erst bei Programmende
 
So, jetzt kann ich doch beruhigt Mittag machen. :lol: Der Fehler war, daß ich IsEmpty bei einer geschlossenen Datenmenge abgefragt habe, bzw. an der falschen Stelle. Also mußte noch eine Hilfsvariable her. Der Rest vom Code war anscheinend richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 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