Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi gotobookmark (https://www.delphipraxis.net/166682-gotobookmark.html)

hyype 24. Feb 2012 14:33

Datenbank: as400 • Version: ? • Zugriff über: ADO

gotobookmark
 
Hallo Community,

folgendes Problem:
Ich habe ein DBGrid und ein ADOQuery dahinter.
Im DBGrid kann ich multiselecten, d.h. nach der Auswahl eines Datensatzes kann ich beliebig weitere mit gedrückter STRG-Taste selektieren
oder mit gedrückter SHIFT-Taste einen Datensatz anklicken, wodurch der gesamte Bereich selektiert wird.
Nach dieser Auswahl soll von allen selektierten Datensätzen ein bestimmtes Feld aufsummiert werden.
Dies wurde mittels gotobookmark realisiert.
Mein Problem ist, dass gotobookmark am Ende bei Move in der Unit System rauskommt und dort werden die Inhalte der Calcfields weggeschmissen und anschließend neu ermittelt.
Da sich in diesem Fall die Calcfields nicht aus den anderen Queryfields errechnen, sondern mittels einer ganzen Reihe an Selects ermittelt werden, ist das richtig spaßig...
4-5s pro Datensatz und man hat (zumindest theoretisch) die Möglichkeit, Hunderte zu selektieren... (ist nicht von mir, so viel schonmal vorweg)
Ich habe keine Möglichkeit gefunden, die aufzusummierenden Werte aus dem DBGrid selbst auszulesen, im Gegenteil, ich habe recherchiert, dass dies nicht möglich ist.
Jetzt ist die Frage, wie ich verhindern kann, dass er die Calcfields neu ermitteln will. Beim Debuggen in den Debug-DCUs ist mir leider kein Parameter aufgefallen, den ich setzen könnte, um es zu umgehen, daher bin ich ein wenig ratlos. Man müsste sich entweder die Inhalte der Calcfields merken und in der oncalcfields-routine wieder zuweisen (habe aber noch keine sinnvolle möglichkeit gefunden, was das "wie genau" angeht) oder irgendwie anders rumtricksen (dbgrid als stringgrid casten? ^^)
Sauberer, jedoch zeitlich den Rahmen sprengend wäre es natürlich, eine Tabellenwertfunktion mit mehreren Skalarwertfunktionen zu machen und sich so die Calcfields zu sparen

feel free 2 post your senf ;)

Bummi 24. Feb 2012 14:39

AW: gotobookmark
 
Das Abhängen von OnCalcFields hast Du ja bereits erwogen.

Das größere Problem scheint mir hier zu liegen
Zitat:

Da sich in diesem Fall die Calcfields nicht aus den anderen Queryfields errechnen, sondern mittels einer ganzen Reihe an Selects ermittelt werden, ist das richtig spaßig.
lässt sich hier nichts optimieren?

hyype 24. Feb 2012 14:47

AW: gotobookmark
 
Es in einen Select zu packen mit Joins und Cases erscheint mir nicht möglich.
In der oncalcfields-Routine stehen 2 Bildschirmhöhen Code mit if-Anweisungen und Selects. ^^
Daher wäre der sinnvollste Weg sql-functions, da kämen aber 2 Probleme auf mich zu: edit und post ^^

shmia 24. Feb 2012 15:12

AW: gotobookmark
 
Du kannst das Property AutoCalcFields der ADOQuery von True auf False setzen.
Dann wird das Event OnCalcFields weniger oft abgefeuert.

Furtbichler 24. Feb 2012 21:38

AW: gotobookmark
 
Alternativ könntest Du eine 'In-memory Datatset' mit den Daten befüllen.


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