SQLITE3 und DDL Ermitteln die 2te
SQLITE3 und DDL Ermitteln die 2te
Hallo zusammen,
irgendwie stehe ich mir selber im Wege
Als Socke mir am 03.12.20 den Tip zum auslesen der Schema Tabelle gegeben hat habe ich es sofort ausprobiert und es hat gefunzt.
Nun benötige ich diese Schema Informationen und bekomme es zum Verrecken nicht mehr hin. Das Test Coding von damals habe ich auch nicht mehr.
Wenn ich die Tabelle Album mit SELECT * FROM Album auslese, sind die Tabellendaten da und in der DBGrid sichtbar. Somit habe ich die SQLITE3 Einstellungen in ZConnection, ZQUERY1 und Datasource korrekt verbunden.
Will ich jedoch das Schema auslesen mit SELECT sql FROM "sqlite_schema" WHERE "type" = "table" AND "name" = "Album"
bekomme ich immer einen SQL Logic Error. Irgendetwas muss ich wohl an dem SELECT Befehl falsch gemacht haben.
Oder liegt es vllt an etwas anderem?
Sobald ich den SQL Befehl mit ZQuery1.Active := True absetze, knallt mir die Fehlermeldung um die Ohren.
Ich habe auch schon alle möglichen Konstellationen ausprobiert. Immer wieder diese Fehlermeldung.
Muss ich diesen befehlt vllt. erst nach dem "normalen" Einlesen der Tabelle mit ZQUERY1.ExecSQL absetzen?
Eigentlich benötige ich nur die Fremdschlüssel Definitionen einer Tabelle.
Also welches Feld ist mit welcher Tabelle über welchen Referenz schlüssel verbunden. Leider bietet das Pragma Table_Info(Tabname) diese Information nicht.
herzlichen Dank im Voraus
Lorca
irgendwie stehe ich mir selber im Wege
Als Socke mir am 03.12.20 den Tip zum auslesen der Schema Tabelle gegeben hat habe ich es sofort ausprobiert und es hat gefunzt.
Nun benötige ich diese Schema Informationen und bekomme es zum Verrecken nicht mehr hin. Das Test Coding von damals habe ich auch nicht mehr.
Wenn ich die Tabelle Album mit SELECT * FROM Album auslese, sind die Tabellendaten da und in der DBGrid sichtbar. Somit habe ich die SQLITE3 Einstellungen in ZConnection, ZQUERY1 und Datasource korrekt verbunden.
Will ich jedoch das Schema auslesen mit SELECT sql FROM "sqlite_schema" WHERE "type" = "table" AND "name" = "Album"
bekomme ich immer einen SQL Logic Error. Irgendetwas muss ich wohl an dem SELECT Befehl falsch gemacht haben.
Oder liegt es vllt an etwas anderem?
Sobald ich den SQL Befehl mit ZQuery1.Active := True absetze, knallt mir die Fehlermeldung um die Ohren.
Ich habe auch schon alle möglichen Konstellationen ausprobiert. Immer wieder diese Fehlermeldung.
Muss ich diesen befehlt vllt. erst nach dem "normalen" Einlesen der Tabelle mit ZQUERY1.ExecSQL absetzen?
Eigentlich benötige ich nur die Fremdschlüssel Definitionen einer Tabelle.
Also welches Feld ist mit welcher Tabelle über welchen Referenz schlüssel verbunden. Leider bietet das Pragma Table_Info(Tabname) diese Information nicht.
herzlichen Dank im Voraus
Lorca
Re: SQLITE3 und DDL Ermitteln die 2te
Evtl. so?: SELECT sql FROM "sqlite_schema" WHERE "type" = "table" AND "tbl_name" = "Album"
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: SQLITE3 und DDL Ermitteln die 2te
Bin jetzt kein SQlite-Guru, aber immer wenn SQL-Statements komplexer werden oder wenn sie mal nicht klappen oder ich mir eine Fehlermeldung einfange, teste ich die Statements außerhalb und unabhängig von Lazarus direkt gegen die Datenbank.
Mit welchem Werkzeug ist dann eher Geschmackssache. Die Hardcore-Fraktion benutzt da sicher ein Commandline-Tool, aber nachdem HeidiSQL (halt nur auf WIN) nun auch mit SQLite umgehen kann, reicht das für mich vollauf.
Damit stelle ich sicher dass mir meine eigene "Firmenblindheit" nicht in die Suppe spuckt.
Erst wenn die Statements sauber laufen, baue ich sie in Lazarus ein.
Re: SQLITE3 und DDL Ermitteln die 2te
Hallo zusammen,
zunächst ganz herzlichen Dank für eure Antworten
@Michl: Leider kann m.w. Dein Vorschlag nicht funktionieren, da die Felder: TYPE und NAME zur Tabellen Struktur Felder der Tabelle sqlite_schema gehören. Von einem Feld namens "tbl_name" habe ich keine Information.
Außerdem hat dieser Befehl im Dezember 2020 funktioniert. Das Coding dazu habe ich jedoch nicht mehr.
Und nun weiß ich nicht was ich da falsch mache. Falsche Hochkommata? Falscher Zeitpunkt des Abrufes? ...
Ich probiere alles aus und komme zu keinem Ergebnis.
@charlytango: Ich arbeite unter Windows 7 (64) mit SQLITE Studio. Im zugehörigen SQL Editor habe ich auch schon diesen Befehl eingegeben. Leider kennt SQLITE Studio die SQL-interne Tabelle sqlite_schema nicht. (Meldung: no such Table)
Da ich gerade erst mit Lazarus, ZEOS und SQLITE3 anfange habe ich auch keine Erfahrungen mit Kommando Zeilen Versionen für SQLITE oder andere SQL Datenbanken. Ich muss mich halt in allem mühsam einarbeiten. *heul*
Der Befehl den damals der Kollege socke vorgeschlagen hat, hat ja funktioniert. Ich habe auch kein UPDATE von SQLITE gefahren.
Wenn ich das richtig herausgefunden habe. muss ich erst einen allgemein gültigen SELECT Befehl in ZQUERY1.SQLText eingeben (z.B Select * frim album ) und die QUERY mittels Active := True öffnen. Danach war es meiner Erinnerung nach möglich mit ZQUERY1.SQL.TEXT := SELECT sql FROM "sqlite_schema" WHERE "type" = "table" AND "name" = "Album" und anschließendem ZQUERY1.ExecSQL die gewünschten DDL Informationen ermitteln zu lassen. Nur jetzt funzt das nicht mehr, (So'n Ärger ). Ist das Vllt.ein Reihenfolge Problem? Ich habe keine Ahnung
Viele Grüße
Lorca
zunächst ganz herzlichen Dank für eure Antworten
@Michl: Leider kann m.w. Dein Vorschlag nicht funktionieren, da die Felder: TYPE und NAME zur Tabellen Struktur Felder der Tabelle sqlite_schema gehören. Von einem Feld namens "tbl_name" habe ich keine Information.
Außerdem hat dieser Befehl im Dezember 2020 funktioniert. Das Coding dazu habe ich jedoch nicht mehr.
Und nun weiß ich nicht was ich da falsch mache. Falsche Hochkommata? Falscher Zeitpunkt des Abrufes? ...
Ich probiere alles aus und komme zu keinem Ergebnis.
@charlytango: Ich arbeite unter Windows 7 (64) mit SQLITE Studio. Im zugehörigen SQL Editor habe ich auch schon diesen Befehl eingegeben. Leider kennt SQLITE Studio die SQL-interne Tabelle sqlite_schema nicht. (Meldung: no such Table)
Da ich gerade erst mit Lazarus, ZEOS und SQLITE3 anfange habe ich auch keine Erfahrungen mit Kommando Zeilen Versionen für SQLITE oder andere SQL Datenbanken. Ich muss mich halt in allem mühsam einarbeiten. *heul*
Der Befehl den damals der Kollege socke vorgeschlagen hat, hat ja funktioniert. Ich habe auch kein UPDATE von SQLITE gefahren.
Wenn ich das richtig herausgefunden habe. muss ich erst einen allgemein gültigen SELECT Befehl in ZQUERY1.SQLText eingeben (z.B Select * frim album ) und die QUERY mittels Active := True öffnen. Danach war es meiner Erinnerung nach möglich mit ZQUERY1.SQL.TEXT := SELECT sql FROM "sqlite_schema" WHERE "type" = "table" AND "name" = "Album" und anschließendem ZQUERY1.ExecSQL die gewünschten DDL Informationen ermitteln zu lassen. Nur jetzt funzt das nicht mehr, (So'n Ärger ). Ist das Vllt.ein Reihenfolge Problem? Ich habe keine Ahnung
Viele Grüße
Lorca
-
- Beiträge: 843
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: SQLITE3 und DDL Ermitteln die 2te
möglcherweise heisst die Tabelle auch anders ?
https://www.sqlite.org/schematab.html
https://www.sqlite.org/fileformat2.html#ffschema
und hier auch noch:
https://www.sqlitetutorial.net/sqlite-t ... ibe-table/
versuch doch einfach als SQL-Statement:
Code: Alles auswählen
pragma table_info('albums');
Hilfreiche pragma statements findest du zb hier:
Code: Alles auswählen
https://sqlite.org/pragma.html
Zuletzt geändert von charlytango am So 6. Jun 2021, 14:05, insgesamt 1-mal geändert.
Re: SQLITE3 und DDL Ermitteln die 2te
Hatte es getestet. Hier geht es, so wie ich es oben schrieb. Anbei ein Minimalbsp. für Lazarus Trunk und Zeos Trunk (wird nicht unter Lazarus 2.0.x laufen, da sich das LFM Format verändert hat).
Ansonsten siehe https://www.sqlite.org/schematab.html
Ich verwende hier einfache Hochkommas, der Test mit den Gänsefüßchen und deinem SQL-Statement lief hier aber auch.
Ansonsten siehe https://www.sqlite.org/schematab.html
Ich verwende hier einfache Hochkommas, der Test mit den Gänsefüßchen und deinem SQL-Statement lief hier aber auch.
- Dateianhänge
-
- ZEOS_SQLite_Einfach.zip
- (2.9 KiB) 85-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: SQLITE3 und DDL Ermitteln die 2te
Hallo
an alle die Ihr so nett gewesen seid, und mir geantwortet habt.
Ich habe keine Ahnung was bei mir falsch gelaufen war.
Nun funktioniert es wieder. Dank an euch.
Viele Grüße
Lorca
an alle die Ihr so nett gewesen seid, und mir geantwortet habt.
Ich habe keine Ahnung was bei mir falsch gelaufen war.
Nun funktioniert es wieder. Dank an euch.
Viele Grüße
Lorca