Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeos ZConnection in MainApp und DLLs (https://www.delphipraxis.net/98085-zeos-zconnection-mainapp-und-dlls.html)

Cyberaxx 21. Aug 2007 08:47

Datenbank: MySQL • Version: 5 • Zugriff über: Zeos

Zeos ZConnection in MainApp und DLLs
 
Hallo,

hat jemand von eucht schon einmal Erfahrungen gesammelt mit Zeos Komponenten und DLLs?

Ich habe das Problem, das ich beim schliessen der DLL bzw. dem Freigeben des Datenmodules/ZConnection eine Exception bekomme.

Zitat:

---------------------------
Project1
---------------------------
Zugriffsverletzung bei Adresse 00FC2FEA. Schreiben von Adresse 00000001.
---------------------------
OK
---------------------------
In meiner MainApp nutze ich ein Datenmodul mit einer ZConnection drauf. Ich kann auch auf die Datenbank zugreifen.
Starte ich jetzt eine DLL, so funktioniert dies auch noch, wenn die DLL als Application gestartet ist, kann ich mit
beiden auf die Datenbank zugreifen. Starte ich die DLL als ShowModal, so klappt dies auch noch.
Sobald ich aber die DLL schliesse kommt obengenannte Exception. In meiner MainApp, kann ich nach weg klicken der
Exception jedoch weiter mit der Datenbank arbeiten und auch ohne Probleme die DLL wieder aufrufen und dort auch
wieder auf die DB zugreifen.
Nutze das auch mit MSSQL, dort geht dies nur wenn ich über den ODBC Treiber gehe. Dies will ich bei MySQL allerdings
vermeiden.
Habe ich dabei etwas falsch gemacht, oder können die DLLs das vllt. nicht oder gar die Komponente?

Jede DLL sowie MainApp greifen auf das selbe Datenmodul zurück.

Als ShowModal
Delphi-Quellcode:
procedure Execute; stdcall;
begin
  DataModule2 := TDataModule2.Create(nil);

  Form2 := TForm2.Create(Form2);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
    DataModule2.Free;
  end;
end;
Als Application
Delphi-Quellcode:
procedure Execute; stdcall;
begin
  DataModule2 := TDataModule2.Create(nil);

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  //Application.CreateForm(TDataModule2, DataModule2);
  Application.Run;

  DataModule2.Free;
end;
Weiß hier jemand evtl. eine Lösung?

Gruß

Daniel

Bernhard Geyer 21. Aug 2007 08:50

Re: Zeos ZConnection in MainApp und DLLs
 
Tausch du "lebende" Objekte zwischen DLL und Exe aus?

Was ist wenn du in der DLL expliziet die DB-Verbindung schließt (Hatte auch schon mal Probleme mit DB-Verbindungen die erst im Destruktor (des Hauptfensters) geschlossen wurden)?

Cyberaxx 21. Aug 2007 09:01

Re: Zeos ZConnection in MainApp und DLLs
 
Nein ich tausche keine "lebenden Objekte" die Execute Procedure ist eigentlich alles was an der DLL
ausgeführt wird. Normal brauche ich mich bei einem Datenmodul doch nicht um soetwas zu kümmern.
Kann es aber mal eben Fix testen. Das was in der Execute Procedure zu finden ist, ist eigentlich
alles was ich an dem Datenmodul, bzw der Connection mache.

Selbst wenn ich die Connection schliesse bleibt die Fehlermeldung.
Ich raff das einfach nicht :(

[edit]Habe das Datenmodul komplett entfernt und auf die Form einfach nur mal eine ZConnection gesetzt
im OnClose der Form die Verbindung getrennt, der Fehler bleibt jedoch.[/edit]

hoika 21. Aug 2007 09:25

Re: Zeos ZConnection in MainApp und DLLs
 
Hallo,

also mit deiner globalen Variable DataModule2 bekomme ich gleich Bauschschmerzen.
Zumindestens in der DLL würde ich die als lokale Variable definieren,
und z.B. per Form1.SetDataModule setzen.


Heiko

Cyberaxx 21. Aug 2007 10:21

Re: Zeos ZConnection in MainApp und DLLs
 
Siehe das Edit meines letzten Postings.
Dort existiert kein Datenmodul mehr, sondern habe direkt eine Connection auf der Form.

Ich weiß nicht was daran so falsch sein sollte, die Variable des Datenmodules zu nutzen?
Ich habe sie so nicht weiter als Variable declariert.

Cyberaxx 22. Aug 2007 09:26

Re: Zeos ZConnection in MainApp und DLLs
 
Schande über mein Haupt...

Das Problem hat sich von alleine gelöst.
Es lag nicht an der ZConnection, etwas anderes an dem Projekt stimmte nicht und darum kam immer die Exception.
Nach einem neubau der DLL war der Fehler verschwunden.

Gruß

Daniel


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz