AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ID nicht gefunden nach last_insert_rowid()
Thema durchsuchen
Ansicht
Themen-Optionen

ID nicht gefunden nach last_insert_rowid()

Ein Thema von EdAdvokat · begonnen am 13. Mai 2017 · letzter Beitrag vom 16. Mai 2017
Antwort Antwort
Seite 2 von 8     12 34     Letzte »    
nahpets
(Gast)

n/a Beiträge
 
#11

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 13. Mai 2017, 21:59
Bitte Quelltext von refreshItems.

Was genau passiert da?
  Mit Zitat antworten Zitat
EdAdvokat
Online

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 13. Mai 2017, 22:17
Hier die Procedure RefeshItmems:
Delphi-Quellcode:
procedure TMainFRM.refreshItems(ID, Name, Vorname, Geb, Strasse, Nr, PLZ, Ort,
  Tel, email, Bemerkung: string);
var
  item: TListItem;
begin
  item:=lv.Items.Add;
  item.Caption:= ID;
  item.SubItems.Add(Name);
  item.SubItems.Add(Vorname);
  item.SubItems.Add(Geb);
  item.SubItems.Add(Strasse);
  item.SubItems.Add(Nr);
  item.SubItems.Add(PLZ);
  item.SubItems.Add(Ort);
  item.SubItems.Add(Tel);
  item.SubItems.Add(email);
  item.SubItems.Add(Bemerkung);
end;
die rufe ich dann nach UPDATE und INSERT auf.
ist das nicht ausreichend?
Norbert
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#13

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 13. Mai 2017, 22:34
Delphi-Quellcode:
qMain.SQL.Text := 'SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE';
qMain.Open;
if qMain.RecordCount > 0 then begin
  currentID := qMain.FieldByName('ID').AsString;
end else begin
  MessageDlg('LAST_INSERT_ROWID() liefert kein Ergebnis.',mtError,[mbok],0);
end;
qMain.Close;
Wie ist bei den ZEOS-Komponenten AutoCommit eingestellt?
Ebenso TransactIsolationLevel?

Eventuell gibt es da Abhängigkeiten, die es ZEOS ermöglichen, die Abfrage auf LAST_INSERT_ROWID() auszuführen, während bei anderen Datenbankschnittstellen hier kein Ergebnis geliefert wird.
  Mit Zitat antworten Zitat
EdAdvokat
Online

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 13. Mai 2017, 22:51
Hallo Stefan, das sind ja die fast unergründlichen Tiefen der Komponenten:
Bei den Zeos-Komp. ist AutoCommit:= true;
und TransactlatsolatronLavel:=tinone
was auch immer das bedeuten soll. Jedenfalls hast Du mich in die Spur gebracht und ich werde wohl morgen daraufhin die dbExpress-Komp.-Einstellungen prüfen.
Könnten noch andere Unterschiede maßgeblich sein? Es ist doch spannend, auf was man alles achten muss.
Norbert
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 13. Mai 2017, 23:05
Als erstes interessiert mich, was bei meinem Quelltext 2 Posts höher rauskommt.

Exception, weil Feld nicht gefunden (also der bekannte Fehler) oder wird der Fehlerdialog angezeigt?

Das AutoCommit := True müsste bedeuten, dass das qMain.ExecSQL in einer eigenen Transaktion ausgeführt wird. Das Lesen von LAST_INSERT_ROWID() erfolgt also nach einem Commit.

Wenn andere Komponenten nicht jeweils eine eigene Transaktion machen, könnte es sein, dass es für LAST_INSERT_ROWID() noch keinen Wert gibt, weil der (eventuell) erst nach Abschluss einer Transaktion zur Verfügung steht.
Da müsste man sich dann mal durch die Datenbankdokumentation durchwühlen.

TransactIsolationLevel gibt an, ob Daten anderer Transaktionen gelesen werden, ob nur die per Commit festgeschriebenen oder auch die, die noch nicht per Commit festgeschrieben wurden ...
  Mit Zitat antworten Zitat
EdAdvokat
Online

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 14. Mai 2017, 09:49
Hallo Stephan, nach Einfügen deines Code kommt folgende Exception:
Zitat:
qMain: Das Feld 'ID' wurde nicht gefunden
Also die bekannte Meldung.
In den dbExpress-Komp. gibt es leider nicht die Einstellmöglichkeiten der Zeos-Komp.
Ich könnte auch das anze Prog. posten, denn es ist nicht groß und dient lediglich meiner Übung.
Norbert
  Mit Zitat antworten Zitat
EdAdvokat
Online

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 14. Mai 2017, 10:22
setze ich if qMain.RecordCount > 0 then begin aufRecordCount = 0 oder -1 kommt Dein geschriebener Meldungstext.
Der RecordCount sollte doch stets >0 sein. Also irgendwas hindert das Programm das Feld 'ID' zu finden. Mit Debugger das Prog. geprüft und genau an der Stelle currentID := qMain.FieldByName('ID').AsString; kommt die Exception. Es ist ja nicht weltbewegend und sicher könnte man damit leben, doch ich bin in der Lernphase und da interessiert mich so eine Kleinigkeit doch etwas, genau wie das Problem der einzelnen Darstellung des letzten veränderten Datensatzes ohne die vorhierigen Datensätze darzustellen nach Aufruf der Bearbeiten-Procedure.
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#18

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 14. Mai 2017, 10:45
Weil das schon mehrmals gesagt, aber immer wieder übersehn wurde:
Zitat:
Delphi-Quellcode:
qMain.SQL.Text := 'SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE';
qMain.Open;
if qMain.RecordCount > 0 then begin
SELECT LAST_INSERT_ROWID() AS ID ist eine globale Funktion
und SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE würde den Wert mehrmals liefern, für jeden Datensatz in KONTAKTE.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Mai 2017 um 10:51 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#19

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 14. Mai 2017, 10:55
Warum gibt es denn dann bei Zeos keinen Fehler, ansonsten aber schon?

Es müsste doch bei 'SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE' n Ergebniszeilen kommen, die alle den gleichen Inhalt haben. Mit dem Zugriff auf die erste Zeile und die Spalte ID müsste man doch trotzdem das richtige Ergebns bekommen (auch wenn dieses Vorgehen dann nicht so wirklich korrekt und sinnvoll wäre.)
  Mit Zitat antworten Zitat
EdAdvokat
Online

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 14. Mai 2017, 11:38
verstehe ich himitsu richtig, dass die globale Funktion an dieser Stelle entbehrlich wäre und gestrichten werden sollte?
Nochmals habe ich das ganze im Prog. mit den Zeos-Komp. geprüft und da ist wirklich alles paletti. Der neue erstellte Datensatz wird sofort mit entsprechender ID! dargestellt und gespeichert, so wie ich es mir auch mit dem dbExpress-Komp-Prg. vorgestellt habe.
Im dbExpress-Prg. (mit auskommentierter Zeile!) wird nach Aufruf von übernehmen zwar der Datensatz angezeigt, jedoch ohne ID!. Erst nach Neustart des Programms ist der Datensatz dann mit entsprechender ID aufgeführt.
Es entsteht der Eindruck, dass im Prog. keine ID verarbeitet wird, aber die DB dann die ID vergibt, die dann nach Neustart des Programms exakt aufgeführt wird?!
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 8     12 34     Letzte »    


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 09:37 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