![]() |
Datenbank: MySQL / MariaDB • Version: 10.0.32-0010 • Zugriff über: Zeos und Spring4D
Zugriff auf externe DB über Zeos und Spring4D
Hallo zusammen ...
Ich stehe gerade etwas auf dem Schlauch ... Ich habe versucht, auf meine externe Maria-DB (auf meinem NAS) mit Hilfe von Zeos zuzugreifen, was auch geklappt hat. Was ich aber jetzt nicht hinbekomme, ist der Zugriff über das ORM aus Spring4D! Unter ![]() Unter "Sessions" ist dort Quellcode aufgeführt, mit dem ich eine Connection und eine Session für eine SQLite-DB bekommen kann. Was ich aber nicht finde, ist, wie ich das für meinen Zweck abändern muss - also, welche T?Database muss ich nutzen? Eine TMySQLDatabase oder TZeosDatabase habe ich nicht gefunden. Aus
Delphi-Quellcode:
muss dann wohl
Connection := TConnectionFactory.GetInstance(dtSQLite, TestDB);
Delphi-Quellcode:
werden - das war's aber auch schon mit meinen Erkenntnissen ...
Connection := TConnectionFactory.GetInstance(dtZeos, TestDB);
Brauche ich dann Zeos an sich noch oder läuft das dann alles über das ORM? Irgendwie fehlt mir noch der richtige "Anfang" ... Vielen Dank für Eure Hilfe, Marc |
AW: Zugriff auf externe DB über Zeos und Spring4D
TZeosConnectionAdapter aus Spring.Persistence.Adapters.Zeos.pas erwartet eine TZAbstractConnection.
TZMySqlDatabase sollte von der erben. |
AW: Zugriff auf externe DB über Zeos und Spring4D
Hallo mkinzler,
mit der Info habe ich Folgendes versucht:
Delphi-Quellcode:
Leider kriege ich die Fehlermeldung "[DCC Fehler] Unit1.pas(57): E2250 Es gibt keine überladene Version von 'Create', die man mit diesen Argumenten aufrufen kann" in der letzten Zeile. Der TZeosConnectionAdapter-Konstruktor bekommt aber doch gerade eine
var
URL: TZURL; Connection: TZMySQLConnection; Adapter: TZeosConnectionAdapter; begin URL := TZURL.Create(); // URL belegen Connection := TZMySQLConnection.Create(URL); Adapter := TZeosConnectionAdapter.Create(Connection);
Delphi-Quellcode:
als Parameter, somit müsste eine
TZAbstractConnection
Delphi-Quellcode:
doch akzeptiert werden.
TZMySQLConnection
P.S.:
Delphi-Quellcode:
habe ich nicht finden können!
TZMySqlDatabase
Vielen Dank für die Hilfe, Marc |
AW: Zugriff auf externe DB über Zeos und Spring4D
Es gibt in Zeos 2 Klassen, die TZAbstractConnection heißen, einmal unter source/component und einmal unter source/dbc.
Du brauchst die, die von TComponent erbt, also so eine, wie man sie auf eine Form packen kann, die ist in der Unit ZConnection.pas - dort die entsprechenden Einstellungen für MySQL tätigen - den TZeosConnectionAdapter in einer Variable von IDBConnection (Spring.Persistence.Core.Interfaces.pas) speichern (wegen Referenzzählung und so) - nicht vergessen, QueryLanguage der IDBConnection auf qlMSSQL (Spring.Persistence.SQL.Interfaces.pas) zu setzen, sonst spuckt der falsches SQL aus (die Adapter für Datenbank Komponenten, die mehrere Datenbanken ansprechen - so wie ZEOS, erkennen nicht von selber, auf welche Datenbank sie gehen) MariaDB wird von Spring4D übrigens nicht offiziell unterstützt, aber alles was MySQL konform ist, müsste wohl funktionieren. |
AW: Zugriff auf externe DB über Zeos und Spring4D
Hallo Stefan,
vielen Dank! Das hat schon auf jeden Fall schon mal weiter geholfen ... Jetzt verstehst Du vielleicht, warum ich Dir gestern die Vorschläge für die EKON geschickt hab!:)
Delphi-Quellcode:
var
Connection: TZConnection; Adapter: IDBConnection; Session: TSession; Veranstaltung: TVeranstaltung; Veranstaltungen: IList<TVeranstaltung>; Anzahl: Word; begin Connection := TZConnection.Create(nil); with Connection do begin Port := 1234; HostName := '1.2.3.4'; User := 'Ich'; Password := 'Passwort'; Database := 'MyDB'; Protocol := 'mysql'; end; Adapter := TZeosConnectionAdapter.Create(Connection); with Adapter do begin QueryLanguage := 'qlMySQL'; Connect; end; Session := TSession.Create(Adapter); Anzahl := Session.ExecuteScalar<Integer>('SELECT COUNT(*) FROM Veranstaltungen', []); Veranstaltung := Session.FindOne<TVeranstaltung>(1); Veranstaltungen := Session.FindAll<TVeranstaltung>();
Delphi-Quellcode:
funktioniert einwandfrei!
ExecuteScalar()
Bei den Aufrufen
Delphi-Quellcode:
und
FindOne()
Delphi-Quellcode:
erhalte ich aber die Exception-Klasse EListError mit Meldung 'Eintrag nicht gefunden' - ausgelöst in
FindAll()
Delphi-Quellcode:
.
TSQLGeneratorRegister.GetGenerator()
Was muss ich denn da noch registieren oder einbinden? Viele Grüße, Marc |
AW: Zugriff auf externe DB über Zeos und Spring4D
Mist ... Anfängerfehler ...
Es muss natürlich
Delphi-Quellcode:
statt
Adapter.QueryLanguage := qlMySQL;
Delphi-Quellcode:
lauten!
Adapter.QueryLanguage := 'qlMySQL';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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 by Thomas Breitkreuz