![]() |
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:
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.
DataModule1.ADOQuery11.SQL.Clear;
DataModule1.ADOQuery11.SQL.Add('select * from Tips where DetailtID = :ID'); DataModule1.ADOQuery11.Open; 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ß |
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 |
Re: EDateBaseError: Feld ID kann nicht verändert werden
Zitat:
Zum besseren Verständnis: warum sollte ich die Bezeichnung DataModule weglassen? Ich konnte nicht feststellen, daß dadurch irgendwas nicht funktionieren würde? ereetzer |
Re: EDateBaseError: Feld ID kann nicht verändert werden
Zeig doch mal, wie du den Datensatz einfügst bitte.
|
Re: EDateBaseError: Feld ID kann nicht verändert werden
Zitat:
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:
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. |
Re: EDateBaseError: Feld ID kann nicht verändert werden
Danke schön.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 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