DbRegisterClient-häufiger Aufruf von notify bei Relationen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Robert
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 36
Registriert: Mo, 13. Feb 2006 12:47

DbRegisterClient-häufiger Aufruf von notify bei Relationen

Beitrag von Robert »

Hallo,

ich möchte, wenn ich den Satzzeiger einer Datenbank bewege, eine bestimmte Aktion ausführen.

Dazu verwende ich die DbRegisterClient-Funktion und führe bei der Nachricht DBO_MOVE_DONE meine Funktion aus.
Das funktioniert auch soweit.

Wenn ich jetzt zwei Datenbank über eine Relation verbinde wird die Notify-Methode für die kontrollierende Workarea einmal ausgeführt, für die Childworkarea hingegen etliche male. Der letzte notify-Aufruf ist dann der, den eigentlich nur bräuchte, weil die Clientworkarea erst da auf dem passenden Datensatz, entsprechend der Relation steht.

Richtig nachvollziehen kann ich dieses Verhalten nicht, da der Rückgabewert des Codeblocks in DbSetRelation() ja in der Childworkarea gesucht werden soll.
Es scheint aber fast so, als ob der Suchwert inkrementell gesucht wird und bei jedem missglückten Suchvorgang ein dbskip ausgeführt wird.

Kann jemand erklären, warum das so ist und ob bzw. wie man das umgehen kann?

Je nachdem wie ich zeit habe, werde ich das Programm mal abrüsten und dann mal ein Beispiel posten, falls mit meinen Schilderungen niemand was anfangen kann.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Robert.

Wenn Du den Satzzeiger in der Parent-Workarea bewegst, wird eine Suchoperation in der Child-Workarea ausgelöst, und die besteht in der Hauptsache aus Bewegungsoperationen, nämlich vom Beginn der Suche bis zu ihrem Ende. Ich denke, Du müßtest für die Child-Area mit DBO_BULK_REQUEST und DBO_BULK_COMPLETE arbeiten. Aber das ist nur geraten; ich habe die Funktionalität DbRegisterClient() bis dato noch nicht benutzt.
Herzlich,
Tom
Antworten