Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst? (https://www.delphipraxis.net/190663-warum-wird-tzconnection-afterconnect-auf-einem-rechner-nicht-ausgeloest.html)

Phoenix 23. Okt 2016 21:04

Datenbank: SQlite • Version: 3 • Zugriff über: ZEOS

Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Hi,

ich hab ja schon länger nichts mehr mit Delphi gemacht.. daher steh ich grad wie der Ochs vorm Berg ;-)

Ich habe eine frische Installation von Delphi 10.1 Berlin (24.0.22858.6822).
Auch frisch da rein installiert ist ZEOS 7.2.1-rc.

Die gleiche installation habe ich auf einem zweiten Rechner gemacht (Heim-PC und Notebook).

Ich habe eine Anwendung mit einem DataModule. Dort ist eine TZConnection auf eine SQlite3-Datenbank drauf.
Das DataModule wird direkt zum Start der Anwendung instanziert, noch vor dem MainForm.
Im Objektinspektor der Connection ist Connected auf true (sogar DesignConnection ist an).
Ich habe das Event AfterConnect verdrahtet und führe dort direkt auf der Connection ein SQL-Script aus, das die Datenbank initial befüllt.

Auf meinem Heimrechner tut es (=das Event wird ausgeführt und die Datenbank befüllt), auf meinem Notebook nicht (= das Event wird nicht ausgeführt). Auch beim Debuggen: Auf dem Heimrechner trifft ein Breakpoint den Einstieg in die Methode, auf dem Notebook nicht.

Der Source ist identisch (gleiches Repo geclont, aber auch 1:1 Kopie ausprobiert), die ZEOS-Sourcen sind auch identisch (1:1 Kopie).

Wenn ich die .exe vom Heimrechner auf das Notebook kopiere funktioniert die DB-Anlage auch dort, es liegt also auch nicht z.B. an einer anderen SQLite-Version auf dem anderen Rechner.

Was kann der Grund sein, dass die gleichen Sourcen auf Rechner A eine Methode ausführen, auf Rechner B aber nicht?
Auch sonderbar: Das Kompilat auf dem Heimrechner ist immer 18568906 bytes gross, das vom Notebook immer 18547184, also ca. 21kb kleiner.

himitsu 23. Okt 2016 21:17

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Wird vielleicht eine Exception/Abort ausgelöst, die vor Ausführung des gewünschten Events einen Abbruch verursacht?

Es wird immer wieder gesagt, dass man diese Art von Autoconnect nicht verwenden soll, sondern lieber im OnCreate manuell den Connect macht.
Vorallem ist da die Fehlerbehandlung einfacher und das DatenModul/Form ist auch komplett geladen (weitere Komponenten auf dem Modul/Form), bevor die Connection aktiviert wird.

Phoenix 23. Okt 2016 21:24

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Jetzt habe ich die Connection erst im OnCreate des Datamodules geöffnet und *wuppdi* tuts.

Danke. Vielen Dank. Tausend Dank. :)

himitsu 23. Okt 2016 21:34

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Es gibt leider immernoch kein AfterLoad-Ereignis in VCL/FMX, also für die ganze DFM, sondern nur das Loaded der Komponente, nach dem Laden aller eigenen Property.
Da kann man ein AutoConnect nicht richtig implementieren, außer vielleich mit Timern/Messages, aber auch das muß nicht funktionieren, wenn wer mit Application.ProcessMessages während des Ladens rumpfuscht.

Phoenix 23. Okt 2016 21:39

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Das ganze ist zum Glück nur für ein kleines Sample und nicht für eine Real-World Anwendung *g*

haentschman 24. Okt 2016 05:47

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Moin...:P

Auch wenn es ein "Test" ist...
Zitat:

Im Objektinspektor der Connection ist Connected auf true (sogar DesignConnection ist an).
...sowas macht man grundsätzlich nicht. :zwinker:

Immer so:
Zitat:

Jetzt habe ich die Connection erst im OnCreate des Datamodules geöffnet
...again what learned. :lol: (Loddar)

Phoenix 24. Okt 2016 07:35

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Wie schon erwähnt, zu meiner Verteidigung: Das ist schon was her :lol:
Ich glaub das letze mal dass ich Delphi Produktiv genutzt habe ist ca. 8 Jahre her.

Und da musste ich mich auch nicht mit der Connection rumschlagen, sondern die wurde vom verwendeten Framework gemanaged. ;-)
Das letzte mal wo ich so tief an der DB rumgeschraubt habe war ca. 2003 / 2004 als ich eine kleine Bibliotheksverwaltung von Grund auf gebaut habe. Das war damals direkt ADO gegen Access, und noch mit Delphi 5...

DeddyH 24. Okt 2016 07:37

AW: Warum wird TZConnection.AfterConnect auf einem Rechner nicht ausgelöst?
 
Zitat:

Zitat von Phoenix (Beitrag 1351815)
Und da musste ich mich auch nicht mit der Connection rumschlagen, sondern die wurde vom verwendeten Framework gemanaged. ;-)

Ich glaub, das Framework kenne ich noch :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 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