Delphi - Lekérdezés eredmény megjelenítő ListBox komponens

forráskód letöltése
Ebben a cikkben egy olyan ListBox komponenst hozunk létre, mely képes egy TQuery eredményének egy mezőjét megjeleníteni. Ez hasonló, mint amit a TDBLookupListBox komponens is tud, de ami a mellékelt példában található, az a TQuery lezárása után sem "felejti el" a lekérdezés eredményét, az továbbra is használható. A mellékelt példaprogram megnyitása előtt az SQLViewListBox.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A komponenst a TCustomListBox-ból származtatjuk és kiegészítjük egy Query nevű TQuery típusú property-vel. Itt lehet majd egy TQuery komponenst hozzákapcsolni a TSQLViewListBox komponensünkhöz.

Hogy a lekérdezés eredményének mely mezője jelenjen meg a ListBox-ban, azt a DataField property-n keresztül adhatjuk meg. Ekkor azonban még nem jelenik meg a tartalom automatikusan. Ehhez meg kell hívnunk az UpdateContent eljárást. Ennek a plusz lépésnek előnye is van: elegendő csak akkor megjeleníteni a lekérdezés eredményét, amikor arra ténylegesen szükség van a programban. Ha többször is változik egy lekérdezés SQL scriptje, nem biztos, hogy az eredmény minden oszlopára is szükségünk van azonnal.
A feltöltést egy egyszerű ciklussal végezzük, mely végigmegy az összes rekordon. Előtte eltároljuk az aktuális rekord pozíciót egy könyvjelzőbe (bookmark), hogy a végén vissza tudjunk ugyanoda állni.

A Notification eljárás akkor kerül meghívásra, mikor egy komponens felkerül, illetve törölve lesz a Form-ról. Hogy melyik ez a komponens, azt az AComponent paraméterből tudhatjuk meg. A műveletről az Operation paraméter tájékoztat. Ha azt látjuk, hogy a komponensünkhöz kapcsolt Query komponenst törli a Form-ról a felhasználó, akkor az FQuery változóból is törölnünk kell azt, különben olyan komponensre hivatkoznánk a változó által, mely már nem létezik és így igen csúnyákat mondana nekünk a Delphi.