![]() |
AW: ID nicht gefunden nach last_insert_rowid()
Liste der Anhänge anzeigen (Anzahl: 1)
anbei das Programm mit der jungfräulichen Datenbank und der Tabelle KONTAKTE mit nur einem Datensatz.(bitte ggf. diese Datei sichern vor erster Probe)
Eigentlich war ich mit der funktionierenden Lösung ganz glücklich, sofern es kein Fehler wäre diese zu verwenden. Ich betone nochmals, ich will anhand dieses Programms lernen und möglichst nichts falsches lernen. Hoffentlich ist das was ich da geschrieben habe wirklich dafür geeignet. Leider muss ich mir das alles so zusammenklauben, denn so wirkliche Beispiele, anhand der ich prüfen könnte, ob ich richtig liege gibt es wohl nicht. Da bin ich daher sehr sehr dankbar, dass es hier im Forum Hilfe und Unterstützung gab und gibt. Ich habe ein Edit für die Eingabe von SQL-Statements an die bewußte Stelle eingefügt. Somit kann unabhängig von welcher Delphiversion auch immer das Problem nachvollzogen werden. Wenn beim Überfliegen des Prg. noch andere Ecken und Kanten auffallen, wäre ich für Hinweise dankbar und bereite mich schon auf einiges vor.... Bitte berücksichtigt, dass ich noch lerne und leider wenig wirklich geeignete Tutorials zu dem Thema gefunden habe. Nochmals ich habe nur auf die fortgeschriebene Diskussion geantwortet und die darin genannten Lösungsansätze probiert. Wenn es mit der funktionierenden Lösung ok ist, dann soll es so sein. Danke |
AW: ID nicht gefunden nach last_insert_rowid()
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...:P
Ach Jungs...soviele Beiträge und ein Blick in die Dataset DefList hätte genügt. :P @EdAdvokat: Der der Debugger hilft dir solche Probleme zu analysieren. :thumb: Ich weiß das das nur zum Testen ist...aber die Logik dahinter verstehe icht nicht. :?
Delphi-Quellcode:
PS: Im SQL select last_insert_rowid() muß die Klammer angegeben werden!
procedure TMainFRM.btnuebernehmenClick(Sender: TObject);
var currentID: string; sqlstring: string; begin qMain.SQL.Clear; // da du mit SQL.Text arbeitest ist die Zeile überflüssig qMain.Params.Clear; // da du mit SQL.Text arbeitest ist die Zeile überflüssig sqlstring:=edtsqlstring.text; if flag then begin // currentID zuweisen currentID:=lv.Selected.Caption; // SQL mit Parametern 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; // Ausführen des Update qMain.ExecSQL; // Listview neu einlesen refreshItems(currentID,edtName.Text,edtVorname.Text,edtGeb.Text,edtStrasse.Text,edtNr.Text,edtPLZ.Text,edtOrt.Text,edtTel.Text,edtemail.Text,edtBemerkung.Text); // Listview wieder leeren... Hä? :-) lv.Items.Clear; // Datenbank verbinden... Hä? :-) Die Verbindung wird im FormCreate gemacht. :-) Connect; end |
AW: ID nicht gefunden nach last_insert_rowid()
Bei 'nem
Delphi-Quellcode:
erwarte ich, dass die Ergebnisspalte ID heißt und nicht Column0.
SELECT last_insert_rowid() AS ID
|
AW: ID nicht gefunden nach last_insert_rowid()
Zitat:
Ich tippe darauf das das mit der Funktion zusammenhängt. Auch die Klammern müssen sein. |
AW: ID nicht gefunden nach last_insert_rowid()
Ja, da der Quelltext aber erst seit ca. 'ner Stunde vorliegt, hat uns das gestern nicht so viel geholfen ;-)
|
AW: ID nicht gefunden nach last_insert_rowid()
Na und? Die muss doch trotzdem den Alias als Spaltennamen zurückgeben. Ich mache das BTW immer mit
![]() |
AW: ID nicht gefunden nach last_insert_rowid()
Zitat:
Oder es sind die Komponenten...:gruebel: Verstehe das wer will. :P Nachtrag: Zitat:
|
AW: ID nicht gefunden nach last_insert_rowid()
Den Fehler gibt es unter Zeos nicht.
Daher meine Behauptung: DBExpress ist für diese Aufgabe wohl nicht erste Wahl. |
AW: ID nicht gefunden nach last_insert_rowid()
Ich kann noch immer nicht erkennen, wo ich welche Klammer vergessen habe.
Das grundsätzliche Vorgehen, um mit SQLite eine DB-Anwendung zu schreiben habe ich mir von einem Youtube-Video von Andreas Hiller abgeschaut und da war immer die Rede von qMain.SQL.Clear; qMain.Params.Clear; usw. Danke Haentschmann ich werde das ganze nochmals überarbeiten. Das connect an der bewußten Stelle hat mir so richtig auch nicht gefallen, doch es war eine Lösung für die Darstellung nur des aktuell bearbeiteten Datensatzes ohne die anderen DS. Nach Bearbeiten wurde nur der bearbeitete DS danach dargestellt und die vorheriigen nicht mehr. Das refresh half auch nicht. Leider kann ich euren aha-Aufschrei nicht nachvollziehen. Was konkret habe ich falsch gemacht??? Ich habe nochmals nachgesehen und festgestellt, dass ich sowohl im Zeos-Komp. Programm als auch im dbExpress-Programm stets geschrieben habe: qMain.SQL.Text:='SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE'; |
AW: ID nicht gefunden nach last_insert_rowid()
Es geht nicht darum, ob Du was falsch gemacht hast oder nicht, sondern darum ob es mit DBExpress geht oder nicht.
Der Fehler, der von Deine Exe geworfen wird, ist logisch nicht nachvollziehbar. Wenn man in 'nem SQL einen Alias für 'nen Spaltennamen angibt, also
Delphi-Quellcode:
schreibt, dann muss im Ergebnis die
select Funktion() as Spalte from Tabelle
Delphi-Quellcode:
funktionieren.
qMain.FieldByName('SPALTE').AsString
Wenn man in Deinem Programm also
Delphi-Quellcode:
eingibt, dann muss es im Ergebnis die Spalte ID geben, also
SELECT last_insert_rowid() AS ID
Delphi-Quellcode:
verfügbar sein.
qMain.FieldByName('ID').AsString
Dem ist aber nicht so. Das sieht für mich jetzt erstmal nach 'nem Fehler bei DBExpress aus, zumal das Ganze mit den Zeos-Komponenten ja funktioniert. Und dass die SQLite-Datenbank bei identischen Statements aber unterschiedlichen Komponenten unterschiedliche Ergebnisse liefert, halte ich für eher unwahrscheinlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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