AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi EDateBaseError: Feld ID kann nicht verändert werden
Thema durchsuchen
Ansicht
Themen-Optionen

EDateBaseError: Feld ID kann nicht verändert werden

Ein Thema von ereetzer · begonnen am 1. Apr 2008 · letzter Beitrag vom 1. Apr 2008
Antwort Antwort
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#1

EDateBaseError: Feld ID kann nicht verändert werden

  Alt 1. Apr 2008, 10:02
Datenbank: Access • Zugriff über: ADO
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ß
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

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

  Alt 1. Apr 2008, 10:48
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
Andreas
  Mit Zitat antworten Zitat
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#3

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

  Alt 1. Apr 2008, 10:57
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

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

  Alt 1. Apr 2008, 11:07
Zeig doch mal, wie du den Datensatz einfügst bitte.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

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

  Alt 1. Apr 2008, 11:09
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 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.
Andreas
  Mit Zitat antworten Zitat
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#6

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

  Alt 1. Apr 2008, 11:15
Danke schön.
  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 05:06 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