Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi EDateBaseError: Feld ID kann nicht verändert werden (https://www.delphipraxis.net/111251-edatebaseerror-feld-id-kann-nicht-veraendert-werden.html)

ereetzer 1. Apr 2008 10:02

Datenbank: Access • Zugriff über: ADO

EDateBaseError: Feld ID kann nicht verändert werden
 
Hallo,

die im Betreff genannte Fehlermeldung bekomme ich, wenn ich in einer Tabelle neue Datensätze einfügen will.
Bei dieser Tabelle handelt es sich um Detailtabelle.


Habe folgendes im AfterScroll Ereignis der "master Query":

Delphi-Quellcode:
  DataModule1.ADOQuery11.SQL.Clear;
  DataModule1.ADOQuery11.SQL.Add('select * from Tips where DetailtID = :ID');
  DataModule1.ADOQuery11.Open;
Wenn ich diese Anweisung weglasse, kommt zwar obige Fehlermeldung nicht mehr, dafür die Meldung daß ein Datensatz aus der Detailtabelle mit der Mastertabelle in Beziehung stehen muß. Leuchtet mir auch ein, weiß aber trotzdem, nicht, was ich tun kann, damit es geht.

Habe sonst immer mit ADOTable gearbeitet udn da ging das allees ohne Probleme. Insofern habe ich bestimmt irgendwo beim Umgang mit ADOQuery beim abbilden der master/dteail Beziehung einen Fehler gemacht. Hat jemand eine Idee?

Gruß

shmia 1. Apr 2008 10:48

Re: EDateBaseError: Feld ID kann nicht verändert werden
 
Hast du vielleicht AutoInc Felder verwendet ?
Bei deinem Sourcecode solltest du unbedingt die Angabe DataModule1. weglassen.
Delphi-Quellcode:
DataModule1.ADOQuery11.Open; // Falsch
ADOQuery11.Open; // Richtig

ereetzer 1. Apr 2008 10:57

Re: EDateBaseError: Feld ID kann nicht verändert werden
 
Zitat:

Zitat von shmia
Hast du vielleicht AutoInc Felder verwendet ?
Bei deinem Sourcecode solltest du unbedingt die Angabe DataModule1. weglassen.
Delphi-Quellcode:
DataModule1.ADOQuery11.Open; // Falsch
ADOQuery11.Open; // Richtig

Ja, habe AutoInc Felder benutzt. Das ist der Fehler? Also sollte ich dann die ID-Felder besser manuell mit Werten füllen?

Zum besseren Verständnis: warum sollte ich die Bezeichnung DataModule weglassen? Ich konnte nicht feststellen, daß dadurch irgendwas nicht funktionieren würde?

ereetzer

Medium 1. Apr 2008 11:07

Re: EDateBaseError: Feld ID kann nicht verändert werden
 
Zeig doch mal, wie du den Datensatz einfügst bitte.

shmia 1. Apr 2008 11:09

Re: EDateBaseError: Feld ID kann nicht verändert werden
 
Zitat:

Zitat von ereetzer
Ja, habe AutoInc Felder benutzt. Das ist der Fehler? Also sollte ich dann die ID-Felder besser manuell mit Werten füllen?

Ja, das ist ein Problem, vorallem bei Master-Detail-Tabellen.
Angenommen du erzeugst einen neuen Datensatz in der Mastertabelle.
Dann darf man den Wert des AutoInc-Feldes nicht angeben, das macht die Datenbank.
Nur blöd, jetzt hast du einen neuen Datenssatz eingefügt und kennst den Primärschlüssel nicht !!
Man müsste den zuletzt eingefügten Datensatz nochmals lesen.
Da man aber den Primärschlüssel nicht kennt ist es eine unsichere Sache, da man dann einen Ersatzschlüssel braucht um den zuletzt eingefügten Datensatz zu erkennen.
Wie man es dreht und wendet: AutoInc-Felder sollte man unbedingt vermeiden, wenn man den Primärschlüssel noch für eine Detailtabelle braucht.



Zitat:

Zitat von ereetzer
Zum besseren Verständnis: warum sollte ich die Bezeichnung DataModule weglassen? Ich konnte nicht feststellen, daß dadurch irgendwas nicht funktionieren würde?

1.) es ist unnötig, da ja der versteckte Parameter self vorhanden ist
2.) es ist regelrecht falsch. Wenn es mehrere Instanzen deines Datenmoduls geben würde, dann würdest du immer nur auf eine bestimmte Instanz zugreifen.
Es gibt zwar nur ein Datenmodul, aber du solltest dir solche falschen Zugriffe gleich abgewöhnen.
Bei mehreren Formularen der gleichen Klasse kann dies andernfalls ganz bösartige Fehler ergeben.

ereetzer 1. Apr 2008 11:15

Re: EDateBaseError: Feld ID kann nicht verändert werden
 
Danke schön.


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