![]() |
Datenbank: MySQL / MariaDB • Version: 10.0.32-0010 • Zugriff über: Zeos und Spring4D
Tabellen anlegen lassen über TDatabaseManager
Hallo zusammen,
nachdem ich der Zugriff auf die Datenbank hinbekommen habe, habe ich nun versucht, die Tabellen automatisch generieren zu lassen, was aber nicht funktioniert. die DB bleibt leer ...
Delphi-Quellcode:
in
GetEntities()
Delphi-Quellcode:
liefert eine leere Liste zurück, obwohl ich ja 2 Entities definiert habe!
TDatabaseManager.Create
Die Tabellen sehen dabei wie folgt aus (nur zu Testzwecken):
Delphi-Quellcode:
Angelegt werden soll das Ganze folgendermaßen:
[Entity]
[Table('Customers')] TCustomer = class private [Column('CUSTID', [cpRequired, cpPrimaryKey])][AutoGenerated] FId: Integer; //[OneToMany(false, [ckCascadeAll])] FName: string; FAge: Integer; FLastEdited: TDateTime; FEmail: string; public property ID: Integer read FId; [Column] property Name: string read FName write FName; [Column('Age',[],3,0)] property Age: Integer read FAge write FAge; [Column] property LastEdited: TDateTime read FLastEdited write FLastEdited; [Column('Mail',[],50)] property EMail: string read FEmail write FEmail; end; [Entity] [Table('Orders')] TOrder = class private [Column('ORDID', [cpRequired, cpPrimaryKey])][AutoGenerated] FId: Integer; [Column('CUSTID', [cpRequired, cpNotNull])] FCustomerId: Integer; //[ForeignJoinColumn('CUSTID','Customers','FId',[fsOnDeleteCascade])] FOrderDate: TDate; public property ID: Integer read FId; property CustomerId: Integer read FCustomerId write FCustomerId; [Column] property OrderDate: TDate read FOrderDate write FOrderDate; end;
Delphi-Quellcode:
Zusätzliche Frage: sind die beiden auskommentierten Attribute korrekt und an der richtigen Stelle, um einen Foreign Key zu setzen?
var
Connection: TZConnection; Adapter: IDBConnection; Session: TSession; LDBManager: TDatabaseManager; begin Connection := TZConnection.Create(nil); with Connection do begin Port := 1224; HostName := '1.2.3.4'; User := 'Ich'; Password := 'Keins'; Database := 'MyDB'; Protocol := 'mysql'; end; Adapter := TZeosConnectionAdapter.Create(Connection); with Adapter do begin QueryLanguage := qlMySQL; Connect; end; LDBManager := TDatabaseManager.Create(Adapter); try LDBManager.BuildDatabase; finally LDBManager.Free; end; Vielen Dank für Eure Hilfe, Marc |
AW: Tabellen anlegen lassen über TDatabaseManager
Warum nicht einfach per SQL Skript eine neue Tabelle anlegen :?:
|
AW: Tabellen anlegen lassen über TDatabaseManager
Mache ich auch ... ist allerdings doppelter Aufwand ...
Schöner wäre es doch, wenn ich Tabellen einmal im Quellcode "anlege" und diese dann erzeugt würden. Viele Grüße, Marc |
AW: Tabellen anlegen lassen über TDatabaseManager
Zitat:
(Es können natürlich Korrekturen notwendig sein aber das macht man eigentlich auch nur einmal!):gruebel: Gruß K-H |
AW: Tabellen anlegen lassen über TDatabaseManager
"Einmal" ist ja nur bedingt der Fall. Ein Programm, das dem Nutzer die Verwaltung der kommenden WM Ergebnisse nebst Tippprognosen, persönlicher Spielerbewertung etc erlaubt, wird vielfach installiert inkl. DB, zumindest bei lokaler Datenhaltung.
Das kann man auf die "klassische" Art machen, per Skript oder halt mit einem Persistenzsystem. Das ist beides möglich und erlaubt. Hier sieht es so aus, als ob es um ein Persistenzsystem geht und ein Fehler im Code vorliegt. |
AW: Tabellen anlegen lassen über TDatabaseManager
Zitat:
Wenn ich mich recht erinnere muß der TDatabaseManager mit ähnlichen Parametern gefüttert werden, die man auch in dem Script finden würde, nur scheint es da irgendwo zu klemmen, was in meinen Augen nicht unbedingt für diese Komponente bzw. ihre Dokumentation spricht. Gruß K-H |
AW: Tabellen anlegen lassen über TDatabaseManager
Zitat:
Und wenn hier mal ein Thread auftaucht, wo es klemmt, heißt das ja noch nicht viel. Das ganze Forum besteht aus solchen Threads. Wenn sich jemand findet, der weiß wie es geht, ist es halt erledigt. Mglw. ist die Komponente auch tatsächlich Schrott, das spricht aber nicht gegen die gewollte Strategie, finde ich. |
AW: Tabellen anlegen lassen über TDatabaseManager
Zitat:
Zumal die Lösung recht simpel und erst einmal nichts mit dem TDatabaseManager zu tun hat, sondern damit, das der Linker ungenutzte Typen einfach nicht in das Kompilat lässt und diese zur Laufzeit nicht gefunden werden können. Einfach die Typen verwenden, dann werden die auch gefunden. |
AW: Tabellen anlegen lassen über TDatabaseManager
Zitat:
Ich hätte jetzt eher gehofft, dass die Spring4d Spezialisten (oder besser der Spezialist: Stevie?) sich mal melden. Aber Dein Tipp macht ja auch Sinn, vielleicht probiert Marc das einfach mal aus und meldet sich mit den Resultaten. Und evtl dreht er mal am Exception Handling, um festzustellen, was beim genau BuildDatabase schief geht. |
AW: Tabellen anlegen lassen über TDatabaseManager
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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