Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ominöse "not in edit mode"-meldung (https://www.delphipraxis.net/63874-ominoese-not-edit-mode-meldung.html)

sancho1980 24. Feb 2006 13:10

Re: ominöse "not in edit mode"-meldung
 
hmmm, naja war ja grad der Punkt dass ich *ursprünglich* die ID nicht belegen wollte, damit dass der Server automatisch macht...
aber wir kommen vom Thema ab, hat noch irgendjemand 'ne Idee?
Danke,
Martin

Der Jan 24. Feb 2006 13:42

Re: ominöse "not in edit mode"-meldung
 
Welchen Status hat dein Dataset zu diesem Zeitpunkt denn genau? (TDataSet.State)

sancho1980 24. Feb 2006 14:02

Re: ominöse "not in edit mode"-meldung
 
der Status ist auf dsBrowse
schon seltsam
mir is schon klar, dass ich da keine Daten verändern kann
aber es bringt komischerweise auch nichts, vorher
Delphi-Quellcode:
DatenModul.IBDataSet_AUT.Edit();
einzufügen. Dann kommt die 'not in edit mode'-Meldung schon dort!
Ich hab auch wirklich alles SQL-Statements des DataSet gefüllt!

Laut Delphi-Hilfe ist dieser Aufruf aber auch nicht notwendig:

Zitat:

Zitat von Delphi-Hilfe zu TIBDataSet
Nach dem Aufruf von Insert können die Benutzer Daten in die Felder des neuen Datensatzes eingeben und anschließend die Änderungen mit Post in die Datenbank oder das Änderungsprotokoll eintragen. (Client-Datenmengen können die zwischengespeicherten Änderungen danach durch einen Aufruf von ApplyUpdates in die Datenquelle eintragen.)


sancho1980 24. Feb 2006 14:28

Re: ominöse "not in edit mode"-meldung
 
Ich hab grad mal die beforeInsert Methode aus meinem DataSet entfernt:

Delphi-Quellcode:
procedure TDatenModul.IBDataSet_AUTBeforeInsert(DataSet: TDataSet);
begin
  {self.IBQuery_Get_AUT_GEN_ID.Open();
  self.IBDataSet_AUTID.AsInteger := DatenModul.IBQuery_Get_AUT_GEN_IDGEN_ID.AsInteger + 1;
  //ShowMessage(IntToStr(DatenModul.IBQuery_Get_AUT_GEN_IDGEN_ID.AsInteger + 1));
  self.IBQuery_Get_AUT_GEN_ID.Close(); }
end;
Jetzt auf einmal kommt er über die Stelle hinweg; meckert dafür aber, dass ich das Feld ID nicht belege.
Ist mir völlig unverständlich, eildieweil ich mir meinen Trigger noch mal genau angeschaut hab, da ist nix mit if new.id is null; da steht:

SQL-Code:
CREATE TRIGGER AUT_BI0 FOR AUT
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  new.ID = gen_id(gen_aut_id,1);
end
^
Das heißt, der müsste IN JEDEN FALL eine neue ID generieren. Funzt aber nicht. Hier is der Wurm drin!

Frank Borland 24. Feb 2006 14:37

Re: ominöse "not in edit mode"-meldung
 
Zitat:

Zitat von sancho1980
Ich hab grad mal die beforeInsert Methode aus meinem DataSet entfernt:

endlich, das wurde auch Zeit :-D


Zitat:

Zitat von sancho1980
Jetzt auf einmal kommt er über die Stelle hinweg; meckert dafür aber, dass ich das Feld ID nicht belege.

Das ist völlig korrekt, ID ist not null definiert, das hatten wir aber schon:

SQL-Code:
CREATE TABLE AUT (ID INTEGER NOT NULL ...
Also muss das Feld beim insert einen Wert haben. Der Trigger wird ihn überbügeln...


Zitat:

Zitat von sancho1980
Das heißt, der müsste IN JEDEN FALL eine neue ID generieren. Funzt aber nicht. Hier is der Wurm drin!

Das wird er auch tun, egal was Du ihm beim insert für eine ID gibts.

Gruß

Malte

sancho1980 24. Feb 2006 14:40

Re: ominöse "not in edit mode"-meldung
 
ja das ist aber leichter gesagt als getan
ich hab das auch schon probiert, hab den wert mit irgendwas belegt
und was kommt dann für 'ne meldung?
'attempt to store duplicate value (visible to active transactions) in unique index AUT_IDX1'
der trigger sollte doch jedesmal nen neuen wert erzeugen, oder?
probiers mal aus...
:wall:

Der Jan 24. Feb 2006 14:45

Re: ominöse "not in edit mode"-meldung
 
Lösch den Trigger mal aus der DB und erzeug nen neuen. Hört sich blöd an, hilft aber manchmal, da hakt einfach irgendwo was, was kein Mensch versteht :)
Wenn das nicht hilft, dann setz doch das ID-Feld manuell (einfach nen Int hochzählen). Sollte für deine Zweck (Konvertieren von einer DB zur anderen) doch reichen.

sancho1980 24. Feb 2006 14:49

Re: ominöse "not in edit mode"-meldung
 
1. den trigger kann ich nicht einfach löschen, weil das ne Datenbank ist, die per Script zur Laufzeit erst erzeugt wird, sprich bevor das Programm ausgeführt wird, existiert die Datenbank ja noch gar nicht
außerdem kann's am trigger auch nicht liegen, denn wenn ich in meiner testdatenbank im sql-editor eingebe:
SQL-Code:
insert into AUT
  (AUT)
values
  ('SANCHO')
schluckt der das problemlos! Da muss ich nicht mal nen wert für ID eingeben!!!

2. das mit dem hochzählen bringt mir nichts, weil ich nachher aufbauend auf dieser datenbank ja noch die das ganze Terminologie-programm umschreiben muss, und da wird mir selber hochzählen auch nichts bringen, deswegen will ich das jetz schon alles ordentlich machen...

Frank Borland 24. Feb 2006 14:51

Re: ominöse "not in edit mode"-meldung
 
entweder mit after insert

SQL-Code:
ALTER TRIGGER AUT_BI0
ACTIVE AFTER INSERT POSITION 0
AS
begin
  new.ID = gen_id(gen_aut_id,1);
end

oder Du setzt die ID before insert nur wenn nicht vorgegeben

SQL-Code:
ALTER TRIGGER AUT_BI0
ACTIVE BEFORE INSERT POSITION 0
AS
begin
 if (old.id<=0) then begin
  new.ID = gen_id(gen_aut_id,1);
 end
end

und gibst ihm beim insert ID=-1 mit. Dann ist auch Hansas Frage beantwortet.


Gruß


Malte

sancho1980 24. Feb 2006 14:56

Re: ominöse "not in edit mode"-meldung
 
wie gesagt, die datenbank scheint richtig eingerichtet zu sein, schau dir meinen letzten post nochmal an, hab den nochmal editiert...
schätze, das muss irgendwo an meiner delphi-anwendung liegen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Seite 2 von 4     12 34      

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 by Thomas Breitkreuz