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
 
EdAdvokat

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

ID nicht gefunden nach last_insert_rowid()

  Alt 13. Mai 2017, 17:52
Datenbank: SQLite-3 • Version: 3 • Zugriff über: dbExpress/zeos
Ich habe eine kleine Adressverwaltung einmal mit den Zeos-Komponenten und das gleiche mit den dbExpress-Komp. geschrieben (natürlich unterscheiden sich beide hinsichtlich des Zugriffs auf die Datenbank).
Beide Programme funktionieren soweit exakt.
Nach Aufruf des Abschnitts:
Delphi-Quellcode:
qMain.SQL.Text:='SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE';
      qMain.Open;
      currentID:=qMain.FieldByName('ID').AsString;
läuft das Programm mit den Zeos-Komp. exakt durch und gibt auch die richtige ID aus.
Jedoch mit dbExpress-Komp wirft er an dieser Stelle eine Exception: qmain: Das Feld 'ID' wurde nicht gefunden.
Dies tritt jeweils bei der Eingabe eines neuen Datensatzes auf. In beiden Varianten wird jedoch der neue Datensatz gespeichert und erscheint nach Neustart des Programms exakt mit der entspr. fortlaufenden ID.
Muss man also bei Verwendung von dbExpress-Komp. anders verfahren? Ich habe einfach kühn die störende Zeile auskommentiert und er meckert nicht mehr. Ist das jedoch richtig?
Ich bin eher ein Anfänger in Bezug auf Datenbanken.
Den Fehler mit dem Debugger einzugrenzen gelang mir bislang nicht, denn an der entsprechenden Stelle gibt er mir auch nur die Fehlermeldung aus, die ich ohne Debugger im Programm lesen kann.
Kann ich mit dem Weglassen der Zeile im Programm mit dbExpreess-Komp. leben oder was sollte ich tun?
Hier die ganze Procedure uebernehmen:
Delphi-Quellcode:
procedure TMainFRM.btnuebernehmenClick(Sender: TObject);
var
  currentID: string;
begin
  qMain.SQL.Clear;
  qMain.Params.Clear;
  if flag then
  begin
    currentID:=lv.Selected.Caption;
    qMain.SQL.Text:='UPDATE KONTAKTE SET NAME= :NAM, VORNAME= :VNA, GEB= :GEB, STRASSE= :STR, Nr= :NR, PLZ= :PLZ, ORT= :ORT, TEL= :TEL, EMAIL= :EMA, BEMERKUNG= :BEM WHERE ID=:CID';
    qMain.ParamByName('CID').AsString:=currentID;
    qMain.ParamByName('NAM').AsString:=edtName.Text;
    qMain.ParamByName('VNA').AsString:=edtVorname.Text;
    qMain.ParamByName('GEB').AsString:=edtGeb.Text;
    qMain.ParamByName('STR').AsString:=edtStrasse.Text;
    qMain.ParamByName('Nr').AsString:=edtNr.Text;
    qMain.ParamByName('PLZ').AsString:=edtPLZ.Text;
    qMain.ParamByName('ORT').AsString:=edtOrt.Text;
    qMain.ParamByName('TEL').AsString:=edtTel.Text;
    qMain.ParamByName('EMA').AsString:=edtemail.text;
    qMain.ParamByName('BEM').AsString:=edtBemerkung.Text;
    qMain.ExecSQL;
    lv.Items.Clear;
    refreshItems(currentID,edtName.Text,edtVorname.Text,edtGeb.Text,edtStrasse.Text,edtNr.Text,edtPLZ.Text,edtOrt.Text,edtTel.Text,edtemail.Text,edtBemerkung.Text);
  end
  else
  begin
      qMain.SQL.Text:='INSERT INTO KONTAKTE(NAME,VORNAME,GEB,STRASSE,NR,PLZ,ORT,TEL,EMAIL,BEMERKUNG)'+'values(:NAM,:VNA,:GEB,:STR,:NR,:PLZ,:ORT,:TEL,:EMA,:BEM)';
      qMain.ParamByName('NAM').AsString:=edtName.Text;
      qMain.ParamByName('VNA').AsString:=edtVorname.Text;
      qMain.ParamByName('GEB').AsString:=edtGeb.Text;
      qMain.ParamByName('STR').AsString:=edtStrasse.Text;
      qMain.ParamByName('Nr').AsString:=edtNr.Text;
      qMain.ParamByName('PLZ').AsString:=edtPLZ.Text;
      qMain.ParamByName('ORT').AsString:=edtOrt.Text;
      qMain.ParamByName('TEL').AsString:=edtTel.Text;
      qMain.ParamByName('EMA').AsString:=edtemail.text;
      qMain.ParamByName('BEM').AsString:=edtBemerkung.Text;
      qMain.ExecSQL;
      qMain.SQL.Clear;
      qMain.Params.Clear;
      qMain.SQL.Text:='SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE';
      qMain.Open;
      currentID:=qMain.FieldByName('ID').AsString;
      qMain.Close;
      refreshItems(currentID,edtName.text,edtVorname.Text,edtGeb.Text,edtStrasse.Text,edtNr.Text,edtPLZ.Text,edtOrt.Text,edtTel.Text,edtemail.Text,edtBemerkung.Text);
  end;
    flag :=False;
    btnuebernehmen.Enabled:=False;
    btnabbrechen.Enabled:=False;
    lv.SetFocus;
end;
Norbert
  Mit Zitat antworten Zitat
 


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 21:45 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 by Thomas Breitkreuz