Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#27

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 21:19
Das was Jobo oben geschrieben hat etwas anders formuliert.
Genau.

Ich schätze das Problem hier ist:
Das verwendete Tool generiert ein Script, Delphi SQL Componenten arbeiten aber meist Statement basiert.
Die Vermischung (oder (unvollständige) "Säuberung") von Script Elementen ist kontraproduktiv.

Kurze Lösung, lade Dir (wenn nicht vorhanden) sqlite3.exe und rufe folgendes aus einer cmd box auf:
Code:
sqlite3 testdb < script.sql
wobei in der Notation alles in einem Verzeichnis liegen muss oder sqlite3.exe im Suchpfad stehen muss.
testdb = irgendeine nicht existierende Datei
script.sql = Dein Script wie es von deinem Konvertierungstool ausgespuckt wurde.

Wenn in dem Rest (nicht von Dir veröffentlicht) keine Fehler des Konvertierungstools stecken wird es einfach durchlaufen.
Anschließend hast Du jenachdem mindesten eine Datei mehr in dem Verzeichnis, nämlich "ContentMasterData.sdb"

Ich habe hier deine Vorgabe noch etwas erweitert. Probier es mit der Kommandozeile oben aus, dann wird Dir auch klar, was es mit Deinen Connectioneinstellung in den Delphikompos auf sich hat. Schau dann mal in die Datei 'testdb' rein, mit einem sqlite tool.
Und natürlich in die Datei ContenMasterData.sdb.


Code:
-- keine fk prüfung
PRAGMA foreign_keys = OFF;
-- ist sowieso egal ohne definierte fk

-- benutze Datei ContenMasterData.sdb und nimm den logischen Bezeichner ContentMasterData
ATTACH "ContentMasterData.sdb" AS "ContentMasterData";
BEGIN;
CREATE TABLE "ContentMasterData"."bildtabelle"(
                                "idBild" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK("idBild">=0),
                                "Thumbnail" BLOB,"Bitmap" BLOB,
                                "Jpeg" BLOB,
                                "FolderId" VARCHAR(32));


CREATE TABLE "ContentMasterData"."galerietabelle"(
                                "Gallery_ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK("Gallery_ID">=0),
                                "GalleryName" VARCHAR(50));

CREATE TABLE "ContentMasterData"."CSS-Tabelle"(
                                "idCSS" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK("idCSS">=0),
                                "PageCSS" LONGTEXT NOT NULL,"MenueCSS" LONGTEXT NOT NULL);
                               
insert into ContentMasterData."bildtabelle" ("Jpeg" , "FolderId" ) values( null, '../das/ist/ein/Relativpfad/xy.jpg')    ;

-- mal ohne die Anführungszeichen
insert into ContentMasterData.galerietabelle (GalleryName ) values( 'Erste Bildreihe');  
     
-- "sonderzeichen" geht nicht ohne Anführungsstriche
insert into ContentMasterData."CSS-Tabelle" (PageCSS , MenueCSS ) values( 'some page css', 'some menu css');

-- jetzt mal ohne die Schemaangabe
create table jobotesttable (aID integer, aText varchar(50));
insert into jobotesttable values (1,'jobo');

-- dedizierter, logischer Zugriff auf default aka main Schema
insert into main.jobotesttable values (null,'main.Jobo');

end;
Wenn Du mit Delphi auf ContentMasterData verbinden willst, per DelphiCode bzw. Properties, nimmst Du das vorweg, was das Script selbst macht. Das funktioniert sicher nicht gut. Die Komponenten kenne ich nicht, deswegen kann ich Dir dazu nichts sagen.
Letztlich würde ich meinen Tipp wiederholen, hier nicht groß mit Delphi rumzuwirbeln, sondern per Command Line das Script laufen zu lassen. Notfalls per ShellAPI innerhalb Deines Programms.

Achso und nochmal anders formuliert.
Wenn Du attach weglässt, dann lasse auch die vorgeschaltete Schemabezeichnung in den restlichen Scriptanweisungen weg.
Zum Spaß kannst Du ja auch noch mal Dein Konvertierungstool anwerfen und 2 Datenbanken scripten lassen. Im Ergebnis wird dann vielleicht auch klarer, was das Teil mit dem attach macht.
Gruß, Jo

Geändert von jobo ( 7. Sep 2017 um 21:25 Uhr)
  Mit Zitat antworten Zitat