Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem bei Anlegen eines neuen Records (https://www.delphipraxis.net/137354-problem-bei-anlegen-eines-neuen-records.html)

Alphacodex 19. Jul 2009 11:15

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

Problem bei Anlegen eines neuen Records
 
Hallo,

Ich habe folgendes Problem(chen): Ich versuche aus dem Quellcode heraus per dataset.append einen neuen Record anzulegen. Das macht er auch brav und zeigt in meinem zugehörigen Grid eine neue leere Zeile an. Wenn ich jetzt hier was reinschreiben will und die Änderungen "abschicke" gibt er mir natürlich einen Fehler weil der PrimaryKey nicht NULL sein darf.

Da ich das verwalten der PrimaryKeys natürlich nicht dem Nutzer zumuten (zutrauen?) kann/will habe ich in IB Expert einen Generator für diesen PrimaryKey angelegt. Außerdem habe ich inzwischen herausgefunden, dass dieser Generator nicht so ganz automatisch werkelt sondern z.B. durch trigger gesteuert wird.

Also habe ich in meiner Tabelle noch folgenden Trigger eingebaut:
SQL-Code:
CREATE OR ALTER trigger faelle_genid for faelle
active before insert position 0
AS
BEGIN
  IF (NEW.FALLID IS NULL) THEN
    NEW.FALLID = GEN_ID(GEN_FAELLE_ID,1);
END
Der Trigger soll also bevor ein neuer Record eingetragen (oder ein alter verändert) wird sicherstellen, dass er eine neue eindeutige Primary ID erhält...


Hmmm.... geht aber nicht. Trotz des Triggers bekomme ich die Fehlermeldung, dass der PrimaryKey nicht NULL sein darf...


Jemand ne Idee??

Grüße
Codex

DeddyH 19. Jul 2009 13:59

Re: Problem bei Anlegen eines neuen Records
 
Und der Trigger ist auch ganz sicher aktiv? Nicht, dass Du die Transaktion zur Erstellung des Triggers nicht commited hast, sonst ist der nämlich für die Katz.

Alphacodex 19. Jul 2009 14:22

Re: Problem bei Anlegen eines neuen Records
 
Ja, Trigger ist definitiv aktiv, habs nochmal in IB Expert gechecked...


Ich hab so eine Vermutung, dass mein TDBAdvGrid irgendwelche seltsamen Sachen macht. Offenbar ist da ein eigener Transaktionsmanager eingebaut, man kann die ins Grid eingetragenen Daten nämlich nicht wie üblich per dataset.commit speichern. Wenn man das versucht, sind die Änderungen alle weg. Mir ist aber völlig schleierhaft wie und unter welchen Bedingungen die TDBAdvGrid ihre Commits durchführt - die mitgelieferte Anleitung ist auch nicht wirklich ne Hilfe...

Hat da jemand Plan? Sonst kontaktiere ich mal den TMS Support - ich raff dat Ding irgendwie nicht


Grüße
Codex

DeddyH 19. Jul 2009 14:25

Re: Problem bei Anlegen eines neuen Records
 
Mach doch mal einfach ein Testprojekt ohne das TMS-Grid. Wenn das funktionieren sollte (wovon ich ausgehe), dann scheint Dein Verdacht in die richtige Richtung zu gehen.

Alphacodex 19. Jul 2009 15:46

Re: Problem bei Anlegen eines neuen Records
 
Ok hab weiter rumprobiert...

Ergebnis: TDBAdvGrid macht selbst überhaupt keine Commits, deswegen sind die Daten immer wieder weg. Wenn man was ändert macht TDBAdvGrid nur ein DataSet.Post, das Commit muss man selbst machen...

Eine weiteres (doofes) Problem war wohl, dass ich während des rumprobierens die Datenbank parallel die Ganze Zeit mit IB Expert offen hatte und da auch noch offene Transaktionen anstanden... das meine Testerei etwas durcheinandergebracht... werde mir angewöhnen immer die Connection zur Datenbank in IB Expert zu kappen, bevor ich was am Code teste...


Scheint jetzt mal soweit zu gehen...


Grüße
Codex


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