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 7 von 8   « Erste     567 8      
EdAdvokat

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

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 17:35
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
Angehängte Dateien
Dateityp: rar tsqlAdressen6.rar (4,94 MB, 7x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#62

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:15
Hallöle...
Ach Jungs...soviele Beiträge und ein Blick in die Dataset DefList hätte genügt.

@EdAdvokat:
Der der Debugger hilft dir solche Probleme zu analysieren.

Ich weiß das das nur zum Testen ist...aber die Logik dahinter verstehe icht nicht.
Delphi-Quellcode:
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
PS: Im SQL select last_insert_rowid() muß die Klammer angegeben werden!
Miniaturansicht angehängter Grafiken
test.png  

Geändert von haentschman (16. Mai 2017 um 18:33 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#63

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:19
Bei 'nem SELECT last_insert_rowid() AS ID erwarte ich, dass die Ergebnisspalte ID heißt und nicht Column0.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#64

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:29
Zitat:
erwarte ich, dass die Ergebnisspalte ID heißt und nicht Column0
ist sich SQLite... Aber du hast Recht. Aber wenn man nicht das bekommt was man erwartet, hilft der Debugger.

Ich tippe darauf das das mit der Funktion zusammenhängt. Auch die Klammern müssen sein.

Geändert von haentschman (16. Mai 2017 um 18:33 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#65

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:33
Ja, da der Quelltext aber erst seit ca. 'ner Stunde vorliegt, hat uns das gestern nicht so viel geholfen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#66

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:34
Na und? Die muss doch trotzdem den Alias als Spaltennamen zurückgeben. Ich mache das BTW immer mit FireDAC, da geht das bislang ohne Probleme und größere Verrenkungen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#67

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:39
Zitat:
Na und? Die muss doch trotzdem den Alias als Spaltennamen zurückgeben.
Ich kenne SQLite nicht wirklich. Vieleicht erkennt er an den () eine Funktion die keinen Alias verträgt. Weil er will dann auf den Alias ID zugreifen, den es nicht gibt.
Oder es sind die Komponenten... Verstehe das wer will.

Nachtrag:
Zitat:
Ja, da der Quelltext aber erst seit ca. 'ner Stunde vorliegt, hat uns das gestern nicht so viel geholfen
...stimmt.

Geändert von haentschman (16. Mai 2017 um 18:42 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#68

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 18:42
Den Fehler gibt es unter Zeos nicht.
Daher meine Behauptung: DBExpress ist für diese Aufgabe wohl nicht erste Wahl.
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 19:00
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';
Norbert

Geändert von EdAdvokat (16. Mai 2017 um 19:04 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#70

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 19:13
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 select Funktion() as Spalte from Tabelle schreibt, dann muss im Ergebnis die qMain.FieldByName('SPALTE').AsString funktionieren.

Wenn man in Deinem Programm also SELECT last_insert_rowid() AS ID eingibt, dann muss es im Ergebnis die Spalte ID geben, also qMain.FieldByName('ID').AsString verfügbar sein.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 8   « Erste     567 8      


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:11 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