-
Forum: Datenbanken
by EdAdvokat,
16. Mai 2017
doch das ist dabei und ich könnte es damit auch mal versuchen. Braucht ein Zeitchen.
-
Forum: Datenbanken
by EdAdvokat,
16. Mai 2017
da fällt mir ein Stein vom Herzen. Ich dachte, ich liege wieder mal sowas von falsch. Wenn auch das Zeos-Prg. erforderlich sein sollte, bitte anmahnen. Es unterscheidet sich lediglich hinsichtlich des connect.
Alles andere ist identisch, natürlich ohne last_insert_rowId()... Es war wirklich nicht meine Absicht, Euch aufdringlich mit dem Problem zu belästigen, doch es scheint wohl was faul zu...
-
Forum: Datenbanken
by EdAdvokat,
16. Mai 2017
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...
-
Forum: Datenbanken
by EdAdvokat,
16. Mai 2017
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...
-
Forum: Datenbanken
by EdAdvokat,
16. Mai 2017
Hallo, war leider unterwegs und kann erst jetzt in die weitergeführte Diskussion einsteigen. Wenn gewünscht, würde ich das Prog. einstellen, damit es von Euch ggf. nachvollzogen werden kann. Es ist ja nur ein kleines Übungsprogramm für mich.
Habe eine völlig neue Tabelle Kontakte mit den gleichen Spalten erstellt und mit einem Datensatz gefüllt. Dann qMain.SQL.Text:='select last_insert_rowid()...
-
Forum: Datenbanken
by EdAdvokat,
15. Mai 2017
jobo, Du schreibst
LAST_INSERT_ROWID () funktionierte jedoch nicht. Lediglich mit dem SQL-Statement qMain.SQL.Text := 'SELECT ID FROM KONTAKTE ORDER BY ID DESC LIMIT 1';kam ich ohne Fehlermeldung weiter. Mit den Zeos-Komp. klappte es auf Anhieb mit LAST_INSERT_ROWID (). Leider gibt es bei dbExpress nicht die Einstellmöglichkeiten der Zeos-Komp.
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
dazu habe ich den DBBrowser für SQL installiert und mit SQLite-DB-Tabellen experimentiert gem. Tutorials SQL. Damit habe ich auch die hier verwendeten SQL-Statements nachvollzogen, leider erst nach Finden der Lösung. Nichts destotrotz kann man ja weiter experimentieren und üben.
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
Hallo Haentschmann, zur Erklärung: Ich wollte das Programm mit dbExpress-Komp. für mich als Übung und Muster schreiben und bin dann an der bewußten Stelle auf Schwierigkeiten gestoßen, die ich mir nicht erklären konnte. Als Mittel der Wahl dachte ich, versuche es doch mal mit den Zeos-Komp. mit denen ich bislang gute Erfahrungen gemacht habe und siehe da da es ging wunderbar. Doch ich will...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
ja die heißt MAX(ID) und nicht ID, wie sie heißen sollte. Noch eine kurze Erklärung von mir: Ich habe überhaupt nicht in die Richtung gedacht, da es mit ROWID und den Zeos-Komp. wunderbar geklappt hat, dass es an einem nicht exakten SQL-Statement liegen könnte und in diese Richtung weiter gedacht werden muss. Jetzt nach Eurer Erklärung sind mir die Augen geöffnet worden - so ein wenig zumindest....
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
Himitsu, doch durchaus habe ich mir einen DBBrowser installiert und mit einem SQL-Tutorial praktischBeispiele probiert. Natürlich bin ich noch nicht in alle Untiefen der SQL-Sprache eingedrungen.
Noch an Wort zu Stephans Kritik: Das von mir erwähnte Beispiel war ein Vorschlag von himitsu aus dem Post #26. Das leider nicht funktioniert hat. Ich habe nicht dein SQL-Select gemeint. Kommt sicher...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
Hallo Stephan, in #27 habe ich bereits dein Lösungsvorschlag beschrieben und leider erfolglos geprüft und gepostet. qMain.SQL.Text:='SELECT MAX(ID) AS ID FROM KONTAKTE'; erfolglos probiert. Ebenfalls die bekannte Exception. Ich bemühe mich durchaus exakt die Vorschläge aufzugreifen und zu prüfen.
Ich habe mir bezüglich SQL-Tutorials schon einiges angesehen und werde die Tipps natürlich auch...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
habe Variante: qMain.SQL.Text:='SELECT MAX(ID) FROM KONTAKTE'; erfolglos probiert. Wieder die bekannte Exception, dass er das Feld 'ID' nicht finden könne. Komisch. Sind die SQL Befehle auf der von mir benannten Seite auch in Delphi gültig?
Ich danke Euch für die Hilfe und Unterstützung. Nun werde ich noch das Problem mit der Anzeige aller DS nach Bearbeiten zu lösen versuchen.
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
Himitsu's Vorschlag hat es gebracht:qMain.SQL.Text := 'SELECT ID FROM KONTAKTE ORDER BY ID DESC LIMIT 1';
So wird nach dem Einfügen (INSERT) eines neuen Datensatzes dieser mit exakter ID richtig angezeigt und gespeichert.
Die Variante qMain.SQL.Text := 'SELECT max(ID) as ID from KONTAKTE';hat nicht geklappt.
Ich habe ein Verständnisproblem: Wir wollten doch die ID des letzten eingefügten DS...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
Stephan, wenn ich das so einfüge, wie Du geschrieben hast kommt eine Exception:
So kann man wohl den letzten INSERT-Datensatz nicht abfragen.
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
ich habe nun nach den Hinweisen von Stephan den Code verändert:
qMain.Params.Clear;
qMain.SQL.Text:='SELECT * FROM KONTAKTE';
//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...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
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...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
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...
-
Forum: Datenbanken
by EdAdvokat,
14. Mai 2017
Hallo Stephan, nach Einfügen deines Code kommt folgende Exception: 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.
-
Forum: Datenbanken
by EdAdvokat,
13. Mai 2017
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...
-
Forum: Datenbanken
by EdAdvokat,
13. Mai 2017
Hier die Procedure RefeshItmems:
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);
-
Forum: Datenbanken
by EdAdvokat,
13. Mai 2017
Hier in dem #1 am Anfang ist doch ein anderer Quelltext der procedure uebernehmen. Dort habe ich doch sowohl nach UPDATE als auch nach INSERT ein refresh eingefügt. War das nicht ausreichend, um die DS nach der Änderung (UPDATE) gemeinsam mit den bestehenden DS anzuzeigen?
-
Forum: Datenbanken
by EdAdvokat,
13. Mai 2017
Danke zunächst für die Unterstützung.
himitsu, zu deinem Vorschlag, habe es mit dem Code versucht:
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);'#10;
+'SELECT LAST_INSERT_ROWID() AS ID;';
er bringt an dieser Stelle die Exception: Operator ist auf diesen Operantentyp...
-
Forum: Datenbanken
by EdAdvokat,
13. Mai 2017
Die sqlite3-Tabelle hat foltende Struktur:
CREATE TABLE "Kontakte" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "Name" VARCHAR(50), "Vorname" VARCHAR(50), "Geb" VARCHAR(12), "Strasse" VARCHAR(70), "Nr" VARCHAR(10), "PLZ" VARCHAR(10),
"Ort" VARCHAR(70), "Tel" VARCHAR(15), "email" VARCHAR(30), "Bemerkung" VARCHAR(80))
Ob sie damit wirklich eine RowID hat kann ich nicht sagen, doch...
-
Forum: Datenbanken
by EdAdvokat,
13. Mai 2017
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:
qMain.SQL.Text:='SELECT LAST_INSERT_ROWID() AS ID FROM KONTAKTE';
qMain.Open;
...