Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TDBXError: Reader-hat-keine-weiteren-Zeilen

  Alt 5. Jan 2013, 19:32
Hi sx2008

Ich verstehe übrigens nicht so ganz, was du mit der LastId eigentlich bezweckst.
Die DB besteht aus insgesamt 7 Tabellen, die alle untereinander verknüpft sind; 2 davon mit n:m-Beziehungen, der Rest ist 1:n. Den letzten eingefügten/erzeugten Wert brauche ich für den Fremdschlüssel der Detailtabelle.

Falls das Feld idBild ein Autoincrement-Feld ist muss man es allerdings beim Insert weglassen.
Dann ergibt sich allerdings das Problem, dass man nicht weiss mit welcher ID der letzte Datensatz eingefügt wurde. (was passiert wenn mehrere Clients quasi gleichzeitig einfügen?)
Die Primärschlüssel sämtlicher Tabellen sind autoinc-Felder. MySQL kennt die Funtion 'SELECT_LAST_INSERT_ID', die den letzten erzeugten Autoinc-Wert zurückliefert(InnoDB). Das hat ja erstmal auch funktioniert - so, wie es mir jetzt erscheint, glaub ich mich zu erinnern, dass ich erstmal diese Prozedur aufbaute, bevor ich die nächsten Insert-Prozeduren schrieb. Und seither krieg ich die bewusste Fehlermeldung...
Die Funktion 'SELECT_LAST_INSERT_ID' ist übrigens Verbindungsbezogen und mindestens der in Bearbeitung stehende Datensatz gesperrt. MySQL 5.1.xx ist da recht überzeugend.

Ich würde empfehlen auf Autoincrement-Felder komplett zu verzichten und stattdessen die neue ID direkt vor dem Insert zu ermitteln.
Das hab ich mir auch schon überlegt, hatte dann aber den Eindruck, dass das DBX-Framework von DelphiXE inzwischen ein recht starkes Werkzeug ist. Fundierte Kenntnissse des Frameworks würden mir wohl bei der Entwicklung weiterer DB-bezogener Programme gute Dienste leisten, su dass ich vieles nicht mehr 'barfuss machen' muss.

Ich denk, ich werd' mal ein Testprogrämmchen zum Austesten des Frameworks schreiben und hier vorerst auf 'Indexvergabe per Hand' umsteigen.

Gleichwohl interessiert es mich immer noch, wenn irgendwer Kenntnisse über das DBX-Framework hat.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat