AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Automatiach erstellte Syntax
Thema durchsuchen
Ansicht
Themen-Optionen

Automatiach erstellte Syntax

Ein Thema von Delbor · begonnen am 5. Sep 2017 · letzter Beitrag vom 9. Sep 2017
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Automatiach erstellte Syntax

  Alt 6. Sep 2017, 15:34
Hi DeddyH
Ja, wir reden erstmal von DDL:
Zitat:
Das bedeutet, dass alle Tabellen erst einmal erstellt werden, bevor die erste davon befüllt wird. Das bedeutet aber auch, dass man, wenn man die Fremdschlüssel sofort definiert, die Erstellungsreihenfolge der Tabellen beachten muss, da das sonst in die Hose geht.
In meinem Fall hat MySQL Workbench die Tabelle erstellt, nachdem ich in Workbench ein Forward-Engineering durchgeführt habe. Dabei wurden die FK-Spalten schon im Workbench-Modell definiert, nicht aber deren Werte - die ergeben sich erst beim Insert der Daten aufgrund des PK-Wertes in der vorgängig mit Daten gefüllten Tabelle.
Das DB-Modell entstand seinerzeit mit im wesentlichen deiner und ccLouds Hilfe im Delphi-Treff. Leider hab ich die Beiträge nicht mehr gefunden.
Seinerzeit haben wir, auch mit Rc2c, viel über Normalisierung und u.a. auch Dateninkonsistenz diskutiert.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 11:35
Hi zusammen
Soeben hab ich mal versucht, die Datenbank zu erstellen. Als erstes hab ich mal das von MySQL-Workbench erstellten SQLite-CreateScript in Funktionen pro erstellter Tabelle aufgeteilt. Nachfolgend die Prozedure, die die DB erstellen sollte:
Delphi-Quellcode:
procedure TDMLSQLite.ContentmasterDBCreate;
  var SQLString: String;
begin
  try
    DMLSQLite.FDSQLiteConnection.Connected := false;
    DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite';// Geänderte Zeile(M statt m)
    DMLSQLite.FDSQLiteConnection.Params.Values['FailIfMissing']:='False';
    DMLSQLite.FDSQLiteConnection.Params.Values['PRAGMA foreign_keys']:='ON';
    DMLSQLite.FDSQLiteConnection.Connected := true;
    SQLString := '';
    SQLString := Createbilddescribetabelle;
    SQLString := SQLString + Createbilddescribetabelle_has_HtmlTabell;
    SQLString := SQLString + Createbildtabelle;
    SQLString := SQLString + CreateCSSTabelle;
    SQLString := SQLString + Creategalerietabelle;
    SQLString := SQLString + CreateHTMLTable;
    SQLString := SQLString + CreateJavascriptTable;
    SQLString := SQLString + Createkategorien_tabelle;
    SQLString := SQLString + Createkategorien_tabelle_has_bildDescribeTabelle;
    SQLString := SQLString + CreateMenueTabelle;
    SQLString := SQLString + CreateSubMenue2Table;
    SQLString := SQLString + CreateSubmenuetabelle;
    DMLSQLite.FDSQLiteConnection.ExecSQL(SQLString);
  except
    on E: EDatabaseError do
     ShowMessage('Exception raised with message' + E.Message);
  end;
end;
Und das ist die Fehlermeldung, die mir Delphi anzeigt:

Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse ESQLiteNativeException mit der Meldung '[FireDAC][Phys][SQLite] ERROR: unknown database "ContentMasterData"' aufgetreten.
---------------------------
Darauf hab ich folgende Zeile geändert:
DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite';
in

DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='M:\SQLite-DB Corner\ContentMasterData\ContentMasterData.sqlite';
In allen Funktionen, die dem SQLString zugewiesen werden, ist das Teilwort 'Master' gross geschrieben, also müsste dies auch im DB-Namen der von SQLite erzeugten DB der Fall sein. Trotzdem ändert sich die Fehlermeldung nicht...
Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse ESQLiteNativeException mit der Meldung '[FireDAC][Phys][SQLite] ERROR: unknown database "ContentMasterData"' aufgetreten.
---------------------------
Im Anhang zeigt ein Jpeg die Situation im besagten Verzeichnis. Auf Doppelklick auf den da gezeigten Ordner öffnet sich sqlite-Expert und zeigt mir eben diesen Ordner an. - mit einigen DB-spezifischen Metadaten, aber ohne die Tabellen.
Was habe ich falsch gemacht?

Gruss
Delbor
Angehängte Grafiken
Dateityp: jpg Pfad mit Unterordner.JPG (23,7 KB, 7x aufgerufen)
Dateityp: jpg Anzeige SQLiteExpert2.JPG (78,4 KB, 6x aufgerufen)
Dateityp: jpg Anzeige SQLiteExpert.JPG (66,6 KB, 7x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 7. Sep 2017 um 11:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#3

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 11:44
Sollte das statt

DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite'

nicht besser heißen:

DMLSQLite.FDSQLiteConnection.Params.Add('Database= M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite' );
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 12:20
Eventuell sind aber auch einfach nur die Leerzeichen im Dateinamen das Problem, fasse den Dateinamen mal in " ein:

 DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='"M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite"';
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 12:42
Hi zusammen

@TigerLilly
So, wie ich das verstanden habe, sind das zwei Mögliche Schreibweisen.

@nahpets:
Soeben ausprobiert - und scheint genau so zu sein. Jedenfalls ist jetzt die Fehlermeldung anders:
Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse ESQLiteNativeException mit der Meldung '[FireDAC][Phys][SQLite] ERROR: unable to open database file' aufgetreten.
---------------------------
Eigentlich bin ich es von MySQL-Workbench gewohnt, wenn ich ein Forward-Engineering mache, um die entworfene DB zu erstellen, muss ich vorher einen Ordner erstellen und diesen als "Datenbank" angeben. Ist hier wohl auch nicht anders - bisher war ich nur etwas irritiert, weil eine "DB" mit verknüpfung zum sqlite-Expert angelegt wurde.

War aber Fehlanzeige - selbe Fehlermeldung...
Aktuelle Pfadangabe[13:45]:
['Database']:='"M:\SQLite-DB Corner\ContentMasterData\ContentMasterData.sqlite"';
Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 7. Sep 2017 um 12:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#6

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 13:10
>So, wie ich das verstanden habe, sind das zwei Mögliche Schreibweisen.

Naja, nur, wenn es "Database" schon gibt.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 13:21
Hi zusammen

Die letzte gezeigte Fehlermeldung hatte eine Besonderheit: Das, was ich hier gepostet habe, war eine Kopie aus dem Editor, und da endete die Meldung mit einem '.
Nachdem ich die Meldung mit Fortsetzen qittiert hatte, erschien sie in einem Meldungsfenster auf meiner Programmoberfläche - aber diesmal ohne das Hochkomma am Schluss...
Nun ja, ich hab dann doch mal TigerLillys Vorschlag ausprobiert und das 'm' in 'ContentMasterData' durch ein grosses seiner Art ersetzt. So, wie es in allen meinen SQL-Strings steht.
Und jetzt ist die Fehlermeldung wieder:

Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse ESQLiteNativeException mit der Meldung '[FireDAC][Phys][SQLite] ERROR: unknown database "ContentMasterData"' aufgetreten.
---------------------------
Ich hatte in dem Ordner einen UnterOrdner ContentMasterData angelegt. Der ist nach wie vor leer.
Stattdessen habe ich jetzt wieder einen solchen mit der Endung sqlite.
Den gelöscht und...
das Spielchen geht von vorne los....

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 13:42
Hi TigerLilly
Zitat:
>So, wie ich das verstanden habe, sind das zwei Mögliche Schreibweisen.

Naja, nur, wenn es "Database" schon gibt.
Das explizite leeren des Parameters vor der Zuweisung hat auch nichts gebracht.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
jobo

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

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 14:29
Aus Deinem Delphicode geht nun derzeit nicht hervor, was du in den einzelnen Abschnitten wirklich als DML Script übergibst.
Ebenso sehe ich nicht, wo dieser Fehler geschieht (welche Zeile in Delphi).

Also weitere Vermutungen:
Wenn Du lediglich das Attach rausgeworfen hast, den Rest aber belassen wie zu Anfang aufgeführt, ist das logische Schema "ContentMasterData." aus der Create Anweisung nicht mehr bekannt.
Also entweder Attach UND Schemaschreibweise entfernen
oder
beides wie generiert belassen.
oder
Attach weglassen und Schemaschreibweise auf "main".

Betreibt man tatsächlich mehrere DB attachted, kann einem das Weglassen des Schemas offenbar ziemliche Schmerzen verursachen (laut Doku).
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#10

AW: Automatiach erstellte Syntax

  Alt 7. Sep 2017, 15:01
Schau dir doch mal an, was in Params - das sollte doch eine StringList sein - wirklich drinsteht:
> DMLSQLite.FDSQLiteConnection.Params.Values['Database']:='M:\SQLite-DB Corner\ContentmasterData\ContentmasterData.sqlite' ;

und zwar vor dieser Zeile:
> DMLSQLite.FDSQLiteConnection.Connected := true;

Welche Delphi Version verwendest du + sind das FireDac Komponenten?
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:54 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