AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zugriff auf externe DB über Zeos und Spring4D

Zugriff auf externe DB über Zeos und Spring4D

Ein Thema von marcibaer · begonnen am 11. Mai 2018 · letzter Beitrag vom 21. Mai 2018
Antwort Antwort
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
70 Beiträge
 
Delphi XE2 Professional
 
#1

Zugriff auf externe DB über Zeos und Spring4D

  Alt 11. Mai 2018, 18:57
Datenbank: MySQL / MariaDB • Version: 10.0.32-0010 • Zugriff ü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 https://bitbucket.org/soundvibe/marshmallow/wiki/Home habe ich gesehen, dass ich wohl Adapters.Zeos benutzen muss, da es anscheinend keine direkten Adapter für MySQL / MariaDB gibt.
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 Connection := TConnectionFactory.GetInstance(dtSQLite, TestDB); muss dann wohl Connection := TConnectionFactory.GetInstance(dtZeos, TestDB); werden - das war's aber auch schon mit meinen Erkenntnissen ...

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
Marc
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.765 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zugriff auf externe DB über Zeos und Spring4D

  Alt 11. Mai 2018, 22:08
TZeosConnectionAdapter aus Spring.Persistence.Adapters.Zeos.pas erwartet eine TZAbstractConnection.

TZMySqlDatabase sollte von der erben.
Markus Kinzler
  Mit Zitat antworten Zitat
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
70 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Zugriff auf externe DB über Zeos und Spring4D

  Alt 19. Mai 2018, 17:38
Hallo mkinzler,

mit der Info habe ich Folgendes versucht:
Delphi-Quellcode:
var
  URL: TZURL;
  Connection: TZMySQLConnection;
  Adapter: TZeosConnectionAdapter;
begin
  URL := TZURL.Create();
  // URL belegen
  Connection := TZMySQLConnection.Create(URL);
  Adapter := TZeosConnectionAdapter.Create(Connection);
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 TZAbstractConnection als Parameter, somit müsste eine TZMySQLConnection doch akzeptiert werden.

P.S.: TZMySqlDatabase habe ich nicht finden können!

Vielen Dank für die Hilfe,

Marc
Marc
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.818 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Zugriff auf externe DB über Zeos und Spring4D

  Alt 19. Mai 2018, 17:58
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (19. Mai 2018 um 18:01 Uhr)
  Mit Zitat antworten Zitat
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
70 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Zugriff auf externe DB über Zeos und Spring4D

  Alt 20. Mai 2018, 16:01
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>();
ExecuteScalar() funktioniert einwandfrei!
Bei den Aufrufen FindOne() undFindAll() erhalte ich aber die Exception-Klasse EListError mit Meldung 'Eintrag nicht gefunden' - ausgelöst inTSQLGeneratorRegister.GetGenerator() .

Was muss ich denn da noch registieren oder einbinden?

Viele Grüße,

Marc
Marc

Geändert von marcibaer (20. Mai 2018 um 17:39 Uhr)
  Mit Zitat antworten Zitat
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
70 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Zugriff auf externe DB über Zeos und Spring4D

  Alt 21. Mai 2018, 11:57
Mist ... Anfängerfehler ...

Es muss natürlich Adapter.QueryLanguage := qlMySQL; statt Adapter.QueryLanguage := 'qlMySQL'; lauten!
Marc
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 12:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf