AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem bei Anlegen eines neuen Records
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Anlegen eines neuen Records

Ein Thema von Alphacodex · begonnen am 19. Jul 2009 · letzter Beitrag vom 19. Jul 2009
Antwort Antwort
Alphacodex

Registriert seit: 16. Mär 2006
65 Beiträge
 
Delphi 2006 Professional
 
#1

Problem bei Anlegen eines neuen Records

  Alt 19. Jul 2009, 11:15
Datenbank: Firebird • Version: 2.5 • Zugriff über: Interbase
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem bei Anlegen eines neuen Records

  Alt 19. Jul 2009, 13:59
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Alphacodex

Registriert seit: 16. Mär 2006
65 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem bei Anlegen eines neuen Records

  Alt 19. Jul 2009, 14:22
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem bei Anlegen eines neuen Records

  Alt 19. Jul 2009, 14:25
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Alphacodex

Registriert seit: 16. Mär 2006
65 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem bei Anlegen eines neuen Records

  Alt 19. Jul 2009, 15:46
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:47 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