Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten werden nicht geschrieben "Transaktion ist Aktiv" (https://www.delphipraxis.net/137306-daten-werden-nicht-geschrieben-transaktion-ist-aktiv.html)

Alphacodex 18. Jul 2009 11:57

Datenbank: Firebird • Version: 2.5 • Zugriff über: Interbase

Daten werden nicht geschrieben "Transaktion ist Aktiv&q
 
Hallo,

ich brauch doch nochmal Hilfe.

Ich habe folgendes Problem. Wenn ich in der TDBAdvGrid etwas editiere und dann einen Commitauslösen will, bekomme ich immer die Melden "Transaktion Aktiv". Die Daten werden aber nicht geschrieben. Ich habe den Code zum Auslösen der Transaktion mal zu Testzwecken in einen Button ausgelagert, hier mal ein Ausschnitt aus meiner UMain:


Delphi-Quellcode:
procedure Tf_main.FormShow(Sender: TObject);
begin
   if not FileExists('Datenbanken\ZENTRALDATEI.FDB') then begin
      ShowMessage('Die Zentraldatenbank wurde nicht gefunden');
      HALT
  end;
  dm.db_zentral.Open;
end;

procedure Tf_main.AdvSmoothButton1Click(Sender: TObject);
begin
  if dm.dbtrans.InTransaction then dm.dbtrans.Commit; // falls noch eine TRansaktion offen ist, die Änderungen schreiben und abschließen
  dm.faelle.Open; // neu laden des Datasets, damit die Änderungen sichtbar werden
  dm.dbtrans.StartTransaction; // eine neue Transaktion beginnen
end;


procedure Tf_main.p_faelleShow(Sender: TObject);
begin
  grid_faelle.FixedCols := 0;
  dm.faelle.Open;

end;
faelle ist ein DataSet, grid_faelle ist Das TDBAdvGrid, dbtrans ist die Transaktionskomponente, db_zentral ist die Datenbankverknüpfung. Wie gesagt der Grid nimmt die Änderung zunächst an, wenn ich dann aber den Button drücke kommt der Fehler und die Daten werden nicht geschrieben.


Kann mir jemand einen Tip geben?

Danke Codex

mkinzler 18. Jul 2009 12:07

Re: Daten werden nicht geschrieben "Transaktion ist Akt
 
-Wie sieht die Abfrage aus?
-Hast du ein manuelles Update-Statement gesetzt?
-Hast du verschiedene Transaktionen für Abfrage und DML-Statements gesetzt?
-Wie ist/sind die Transaktion konfiguriert?

Alphacodex 18. Jul 2009 17:16

Re: Daten werden nicht geschrieben "Transaktion ist Akt
 
Äh... *rot werd* ok erwischt. Das sagt mir alles nicht wirklich was... Wo kann ich mir das anlesen? Dann schreibe ich wieder, wenn ich Deine Fragen verstanden habe *g*


Grüße
Codex

mkinzler 18. Jul 2009 17:26

Re: Daten werden nicht geschrieben "Transaktion ist Akt
 
Zitat:

-Wie sieht die Abfrage aus?
Welche SQL-Abfrage hast du den bei IBDataSet.SelectSQL eingetragen?
Zitat:

-Hast du ein manuelles Update-Statement gesetzt?
Hast du was bei IBDataSet.ModifySQL eingetragen?
Zitat:

-Hast du verschiedene Transaktionen für Abfrage und DML-Statements gesetzt?
Hat sich erledigt IBX unterstützt wohl nur eine Transaktion pro DataSet
Zitat:

-Wie ist/sind die Transaktion konfiguriert?
Auf was ist IBTransaction.DefaultAction eingestellt?

Alphacodex 18. Jul 2009 17:46

Re: Daten werden nicht geschrieben "Transaktion ist Akt
 
SQL Abfrage ist ganz einfach zum Starten alle Felder aus meiner FAELLE-Tabelle:

SQL-Code:
select * from FAELLE

Modify SQL sieht so aus (hat er selbst erzeugt, war so im Tut beschrieben):

SQL-Code:
update FAELLE
set
  FALLNAME = :FALLNAME,
  FORT = :FORT,
  GESCHWISTER = :GESCHWISTER,
  HMA = :HMA,
  HMA_STD = :HMA_STD,
  INDEXANREDE = :INDEXANREDE,
  INDEXGEB = :INDEXGEB,
  INDEXNACHNAME = :INDEXNACHNAME,
  INDEXORT = :INDEXORT,
  INDEXPLZ = :INDEXPLZ,
  INDEXSTRASSE = :INDEXSTRASSE,
  INDEXVORNAME = :INDEXVORNAME,
  JA = :JA,
  JA_MA = :JA_MA,
  KOSTENART = :KOSTENART,
  MA_BEGINN = :MA_BEGINN,
  MA_ENDE = :MA_ENDE,
  MA_STUNDEN = :MA_STUNDEN,
  MA3 = :MA3,
  MA3_STD = :MA3_STD,
  MA4 = :MA4,
  MA4_STD = :MA4_STD,
  MA5 = :MA5,
  MA5_STD = :MA5_STD,
  MA6 = :MA6,
  MA6_STD = :MA6_STD,
  NMA = :NMA,
  NMA_STD = :NMA_STD,
  STATUS = :STATUS,
  ZIELE = :ZIELE,
  ZUS_ANREDE = :ZUS_ANREDE,
  ZUS_ORT = :ZUS_ORT,
  ZUS_PLZ = :ZUS_PLZ,
  ZUS_STRASSE = :ZUS_STRASSE
where
  FALLID = :OLD_FALLID
Standard-Transaktion ist: TACommit



Ich inzwischen etwas weiter rumprobiert: Ich hatte die Transaction-Komponente mal testweise direkt zur Designzeit auf Active gestellt. Er hat dann zumindest einige Werte übernommen. Wenn ich den Button klicken, kommt trotzdem noch die Fehlermeldung. Aber offenbar ist in dem TDBAdvGrid schon eine eigene Transaktions-Behandlung integriert und ich muss das gar nicht extra im Code machen...(?). Selsamerweise übernimmt er die Werte von ID-Feldern nicht (die intern als Primär- oder Fremdschlüssel definiert sind). Ich vermute mal entweder weil ich für Indexfelder eine eigene Behandlung brauche oder weil die eingebenen Daten als Chars interpretiert werden, der Datentyp des Feldes aber Integer...


Grüße
Codex

mkinzler 18. Jul 2009 18:04

Re: Daten werden nicht geschrieben "Transaktion ist Akt
 
Primärschlüsselfelder sollte man natürlich nicht ändern. So geht es auf jedenfall nicht, da die Werte anhand dessen wert geändert werden ("Ändere den Datensatz mit der ID ...")

Alphacodex 18. Jul 2009 18:08

Re: Daten werden nicht geschrieben "Transaktion ist Akt
 
Ja klar, der Primärschlüssel natürlich nicht, aber die Fremdschlüssel müsste man doch eintragen können...


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