Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Ereignis verschwindet aus TQuery Komponente (https://www.delphipraxis.net/89248-ereignis-verschwindet-aus-tquery-komponente.html)

bmartini 28. Mär 2007 11:46


Ereignis verschwindet aus TQuery Komponente
 
Hallo!

Ich habe in Delphi 5 auf einer Form ein Query und habe diesem Query im Afterscroll eine Anweisung erteilt. Beim wieder aufmachen der Form im Delphi ist der Zeiger aufs Afterscroll aus dem Objektinspektor verschwunden. Warum ist das so? Bei anderen Forms klappt das...

Danke und Gruss,
Benjamin

marabu 28. Mär 2007 17:39

Re: Ereignis verschwindet aus TQuery Komponente
 
Herzlich willkommen in der Delphi-PRAXiS, Benjamin.

Mir ist kein grundsätzliches IDE-Problem in dieser Hinsicht bekannt.

Hast du nach dem Setzen des Ereignis-Codes im Object Inspector das Ergebnis gespeichert und anschließend mit Alt-F12 mal das Formular im Textmodus betrachtet?

Freundliche Grüße

Mena 29. Mär 2007 08:38

Re: Ereignis verschwindet aus TQuery Komponente
 
Ja, wir haben gespeichert. Wir sind sogar auf den Trick gekommen, nach dem Setzen des Ereignisses erstmal irgendwo anders hinzuklicken und erst dann zu speichern. (Denn wenn eine Eigenschaft gesetzt wird und dann direkt gespeichert wird, dann scheint Delphi die Änderung nicht immer mitzubekommen.)
Direkt nach dem Speichern war das AfterScroll-Ereignis jedenfalls noch da, sowohl im Objekt-Inspektor als auch in der dfm-Datei.
Form zu, Form auf, Ereignis weg.
Der Quellcode, der in dem Ereignis ausgeführt werden soll, ist noch da, nur die Verknüpfung von TQuery zu Quellcode verschwindet spurlos.
Hat noch jemand Ideen?

Grüße von Mena

shmia 29. Mär 2007 09:51

Re: Ereignis verschwindet aus TQuery Komponente
 
Zitat:

Zitat von Mena
Der Quellcode, der in dem Ereignis ausgeführt werden soll, ist noch da, nur die Verknüpfung von TQuery zu Quellcode verschwindet spurlos.
Hat noch jemand Ideen?

Das Formular/Datenmodul als Text-DFM speichern. (Dazu Formular/DM anklicken, rechte Maustaste und im Popupmenu ganz unten "Text-DFM" wählen)
Dann mit einem normalen Editor (Notepad & Co.) nachschauen, ob das Event vorhanden ist.
Somit wird entdeckt, ob das Problem beim Speichern oder Laden auftritt.

Mena 29. Mär 2007 10:20

Re: Ereignis verschwindet aus TQuery Komponente
 
Definitv beim Öffnen: Die dfm nach dem Speichern im Editor geöffnet enthält Folgendes:

Delphi-Quellcode:
  object Query: TQuery
    AfterScroll = QueryAfterScroll
    OnNewRecord = QueryNewRecord
    DatabaseName = 'Olympia'
    RequestLive = True
    SQL.Strings = (
      'select * from AT_Kontakt')
    UpdateMode = upWhereKeyOnly
    ....
Interessant ist, dass in der IDE nach dem nächsten Öffnen das Ereignis wieder weg, in der dfm aber noch vorhanden ist. In der IDE wird in diesem Moment nicht angezeigt, dass irgendwas zu speichern wäre. Speichere ich die Unit trotzdem verschwindet das Ereignis auch aus der dfm.

Einigermaßen verständlich, was ich beobachtet habe? Ich mach mir gleich einen Knoten ins Gehirn mit der Geschichte.

Grüße von Mena

shmia 29. Mär 2007 10:46

Re: Ereignis verschwindet aus TQuery Komponente
 
Sind irgendwelche nicht-standard Komponenten auf dem Formular?
Falsch programmierte Komponenten könnten in der Procedure Loaded() oder Notification() eigenmächtig Properties von anderen Komponenten verändern.
Das funktioniert auch zur Entwicklungszeit innerhalb der IDE!!

Mena 29. Mär 2007 12:13

Re: Ereignis verschwindet aus TQuery Komponente
 
Jawoll, Volltreffer!
Da ist eine selbstgestrickte Komponente drauf, die eine published property Dataset hat, und im OnSetDataset wird das Ereignis AfterScroll (und noch ein paar andere) überschrieben/erweitert.
Und das wird auch zur Designtime ausgeführt? Dann wundert mich gar nichts mehr.
Wie kann ich das dem Ding abgewöhnen?
Wir haben versucht, die Eigenschaft Dataset zur public property zu degradieren und zur Laufzeit im Quellcode zu setzen, aber dann wird das, was im DatasetAfterOpen ausgeführt werden soll übergangen.
Wir haben auch versucht, das Überschreiben der Ereignisse im OnSetDataset auf die Laufzeit zu beschränken aber
Delphi-Quellcode:
if (csDesigning in self.ComponenetState)
brachte auch nicht den erhofften Erfolg.

Habt Ihr noch einen Tip?

Danke und Grüße von Mena

shmia 29. Mär 2007 13:29

Re: Ereignis verschwindet aus TQuery Komponente
 
Zitat:

Zitat von Mena
Jawoll, Volltreffer!
Da ist eine selbstgestrickte Komponente drauf, die eine published property Dataset hat, und im OnSetDataset wird das Ereignis AfterScroll (und noch ein paar andere) überschrieben/erweitert.

Das darf man nicht tun! :warn:
Die Komponente darf nicht direkt an TDataSet Komponenten herangehen, sondern indirekt über TDataSource.
Es gibt nun die Komponente TDataLink.
Du musst also in deiner selbstgebauten Komponente ein internes Objekt vom Typ TDataLink erzeugen und mit dem published Property DataSource verbinden.
So wird deine Komponente von allen Änderungen am Dataset indirekt informiert und alle Events des Datasets bleiben dem Programmierer zur freien, eigenen Verfügung.


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