![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: FireDac
No Such Table
Hi zusammen
Damit versuche ich, die Tabellen der DB abzrufen:
Delphi-Quellcode:
Die Antwort von Delphi:
procedure TDMLSQLite.DataModuleCreate(Sender: TObject);
begin FSeitenlaenge := 200; TPicture.RegisterFileFormat('NEF','NEF Format',TWICImage); Self.FDMoniFlatFileClientLink1.Tracing := False; Self.FDMoniFlatFileClientLink1.FileName := ExtractFilePath(Application.ExeName) + 'trace.txt';; Self.FDMoniFlatFileClientLink1.Tracing := true; Self.FDSQLiteConnection.Connected := False; Self.FDSQLiteConnection.Params.Clear; Self.FDSQLiteConnection.Params.Add('DriverID=SQLite'); Self.FDSQLiteConnection.Params.Add('Database=M:\SQLite-DB Corner\ContentMasterData\ContentmasterData.sqlite'); Self.FDSQLiteConnection.Connected := true; if Self.FDSQLiteConnection.Connected then begin Self.FDSQLiteConnection.GetTableNames('ContentmasterData','','', SQLiteTestMain.Memo2.Lines); end; end; Zitat:
Delphi-Quellcode:
Die Parameter der Executeaufrufe sind jeweils Funktionen, die das gewünschte SQL-Statement zurückliefern. Die vermissste Tabelle ist definitiv nicht dabei.
function TDMLSQLite.ConnectContentmasterDB : Boolean;
begin try FDSQLiteConnection.Connected := false; FDSQLiteConnection.Params.Clear; FDSQLiteConnection.Params.Add('DriverID=SQLite'); FDSQLiteConnection.Params.Add('Database=M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite'); FDSQLiteConnection.Params.Values['FailIfMissing'] := 'False'; FDSQLiteConnection.Connected := true; Result := FDSQLiteConnection.Connected; except on E: EDatabaseError do begin ShowMessage('Fehler beim Aufbau der Datenbankverbindung: ' + #13#13 + E.Message); Result := False; end; end; end; procedure TDMLSQLite.ContentmasterDBCreate2; begin if ConnectContentmasterDB then begin if ExecuteSQL(CreateTbl_Bld) then if ExecuteSQL(CreateTbl_Galery) then if ExecuteSQL(CreateTbl_Album) then if ExecuteSQL(CreateTbl_bildtext) then if ExecuteSQL(CreateTblCSS) then if ExecuteSQL(CreateTblJavascript) then if ExecuteSQL(CreateTblHtml) then if ExecuteSQL(CreateIndexTbl_Html_Tbl_CSS1) then if ExecuteSQL(CreateIndexTbl_Html_Tblgalerie1) then if ExecuteSQL(CreateTableTblMenue) then if ExecuteSQL(fk_tblMenue_tbl_Html1) then if ExecuteSQL(CreateTableTbl_Album_has_Tbl_bildtext ) then if ExecuteSQL(fk_tbl_Album_has_tbl_bildtext_tbl_bildtext1) then if ExecuteSQL(fk_tbl_Album_has_tbl_bildtext_tbl_Album1) then if ExecuteSQL(CreateTableTbl_Html_has_Tbl_Bildtext ) then if ExecuteSQL(fk_tbl_Html_has_tbl_bildtext_tbl_bildtext1) then if ExecuteSQL(fk_tbl_Html_has_tbl_bildtext_tbl_Html1) then if ExecuteSQL(CreateTableTbl_SubMenue2) then if ExecuteSQL(fk_tbl_SubMenue2_tbl_SubMenue11_idx) then if ExecuteSQL(CreateTableTbl_SubMenue1) then if ExecuteSQL(fk_tbl_SubMenue1_tblMenue1_idx ) then end; end; Gruss Delbor |
AW: No Such Table
Zitat:
Zitat:
Kannst Du denn mit Hilfe einer DB-Shell auf die Inhalte zugreifen? Edith: Wenn ich die Doku richtig verstanden habe, sollte spätestens nach dem Anlegen der ersten Tabelle die Tabelle sqlite_master vorhanden sein. Gruß K-H |
AW: No Such Table
Hi p80286
Zitat:
Zitat:
Zitat:
Zitat:
Ich nehme mal an, dass Firedac für die Befehlszeilen-Beispiele da auch Unterstützung bietet - wobei ich mir andrerseits eigentlich vorstelle, dass SQLite seine Systemtabellen selbst erstellt/erstellen sollte... Gruss Delbor |
AW: No Such Table
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen
Die von Firedac vermisste Tabelle ist vorhaanden und enthält Daten. Im Anhang ein Screnshot des SQL Experts... Das Problem liegt also bei Firedac... Gruss Delbor PS: Das Problem hat sich in Luft aufgelöst:
Delphi-Quellcode:
habe ich mal ersetzt durch:
if Self.FDSQLiteConnection.Connected then
begin Self.FDSQLiteConnection.GetTableNames('ContentmasterData','','', SQLiteTestMain.Memo2.Lines); end;
Delphi-Quellcode:
Self.FDSQLiteConnection.GetTableNames('','','', SQLiteTestMain.Memo2.Lines);
|
AW: No Such Table
Ich schätze, da stiftet mal wieder der Schemaname Verwirrung.
Lass "ContentmasterData" weg bei gettablenames oder definiere ContentmasterData als Schemaname oder tausche ContentmasterData gegen "main". Das ist der Default. Schemaname und Dateiname sind 2 unterschiedliche Dinge. Die Datei kann heißen wie sie will. Der Schemaname lautet dann als default "main" und kann sowieso weggelassen werden. Wenn Du ihn bei der Abfrage verwendest, dann musst Du ihn zuvor mit attach definieren. |
AW: No Such Table
Ausgehend von
![]() Wenn Du die Tabellennamen aus dem Schema ContentmasterData abfragen möchtest, dann musst Du ContentmasterData auch als Schemaname angeben, dies ist der zweite Parameter. |
AW: No Such Table
Hi zusammen
Vielen Dank für eure Antworten! Zitat:
Zitat:
Der Schemaname bezeichnet den Datenbanknamen inklusive des zugrundeliegenden Tabellen- und Felder - Aufbau-Schemas. Der Catalogname hingegen nur den blossen Datenbanknamen. Richtig? Zitat:
SQLite ist eine 'Anwendungsorientierte' (meine Definition), eben eingebettete Datenbank. Von daher ist von vornherein klar, welche Datenbank, welches Datenbankschema gemeint ist. Per Default eben 'main'. Wobei 'main' auch dann das aktuelle Schema ist, wenn ich der Verbindung mit 'ATTACH' eine weitere DB hinzugefügt habe - eine explizite Adressierung der hinzugefügten DB á la "Contentmasterdat.Bildtabelle" ist deshalb nicht zulässig. Gruss Delbor |
AW: No Such Table
Ich glaube, du verwechselst da was. Datenbankname und Datenbankschema sind was vollkommen unterschiedliches. Eine Datenbank kann mehrere Schemas enthalten (zumindest bei einigen Datenbanken wie MSSQL), bzw. sind die Schemas an Datenbank-Benutzer gebunden.
|
AW: No Such Table
Eine Datanbank kann n Schemas enthalten, ein Schema kann n Tabellen enthalten.
In der Regel meldet man sich an der Datenbank an und "landet" dann in dem der Anmeldung zugeordneten Schema. Dort kann man dann per
SQL-Code:
auf Tabellen zugreifen. Es wird dann die implizite Annahme gemacht, dass man eine Tabelle aus dem Anmeldeschema meint.
select * from tabelle
Möchte man auf eine Tabelle in einem anderen Schema zugreifen, wird der Schemaname mit im SQL angegeben:
SQL-Code:
.
select * from schema.tabelle
Manche Datenbanken unterstützen auch datenbankübergreifende Abfragen:
SQL-Code:
In diesem Zusammenhang wird zuweilen dann auch von Katalog gesprochen.
select * from datenbank.schema.tabelle
Wenn Du bei Deinem Programm eine Anmeldung hast, die Dich sofort in das Schema Contentmasterdata "bringt", kannst Du diese Angabe auch weglassen. Dies macht die Statements dann auch übersichtlicher. Verwirrend wird es oft, wenn man in einer Datenbank ein Schema hat, das dem Datenbanknamen entspricht. Also ungefähr sowas:
SQL-Code:
Hier ist die Verwirrung fast immer vorprogrammiert.
select * from Contentmasterdata.Contentmasterdata.tabelle
Allerdings ist das zuweilen von Datenbank zu Datenbank auch schonmal individuell unterschiedlich. Welche spezifischen Besonderheiten für sqlite gelten, weiß ich nicht. |
AW: No Such Table
@Nahpets
In diesem Falle liegt das Problem wohl darin, daß Firedac eine Funktion zur Verfügung stellt (GetTableNames) die u.U. mißverständliche Parameternamen besitzt. Deine Beispiele beziehen sich ja leider nur auf pures SQL, da weiß man natürlich was man hat. ADO stellt etwas ähnliches zur Verfügung und leider ist die Ausgabe auch in diesem Falle nicht das was man auf den ersten Blick erwartet. Daher ist das Vermeiden solcher Funktionen meiner Meinung nach unbedingt notwendig, will man zuverlässige Daten erhalten. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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