Hogyan készíts egy keresési mezőt egy dinamikus listával?

Hogyan készíthetek keresési mezőt dinamikus listával?

Segítsen megérteni ezt a problémát:
A lekérdezés egy Lookup területen, mint egy olyan lista, amely beakadt egy másik lekérdezés. Szükséges, hogy minden bejegyzés a lista alapján a különböző kulcsfontosságú. Ie például az asztali könyvtárban van bejegyzés a forma (bolt, osztály számát), és a másik táblázatra van szükség ahhoz, hogy a bolt, és attól függően, hogy ez a bolt, hogy húzza a körzetek jegyzékét (TLookupComboBox) egymástól csak a bevezetése a boltban. És így minden rekordot.






Megpróbáltam újrafordítani az egyes rekordok lekérdezési könyvtárát - ez kiderül, hogy az utolsó lekérdezés az egész asztalra érvényes, és egyes mezők üresek. A lista nem rendelkezik elég értékekkel számukra.
Mondja meg, mit tehet ebben az esetben?

Használja a paramétert a lekérdezés-könyvtárban, hogy a boltszámot átviheti az aktuális rekordból

Elég egy szűrőt rakni a Luka ND-re.
És így nem tűnik el - beleértve a zárolási mező gyorsítótárát is.

És én is. Nem ez.
Például, ha 2 bejegyzésem van a táblázatban:
CEX NOTD
1 2
2 5
és a 2. részleg 1. részlegénél és a 2. részlegnél - 5 részlegnél, majd a paraméter elküldése után az első rekordhoz 2 bejegyzés kerül a könyvtárba, és a 2. műhelybe történő felvételhez nem lesz elegendő érték a listán, az üresség meg fog ragyogni.
Vagy nincs ott a transzfer paraméter - az AfterScroll a Lekérdezés és az OnChange mezőben a CEX on Query mezőben?

Johnmen, mondj többet a szűrőről - hol található, és mit kell bevennie?

egyáltalán nem világos, mi folyik itt. Hozd el asztalod szerkezetét.

Itt van az a táblázat, amelyen ez a program működik
desc s_trud
KZ NUMBER (2)
CEX SZÁM (3)
DOLJ SZÁM (8)
RAZR SZÁM (1)
NOTD VARCHAR2 (2)
FL_DIAP NUMBER (1)
Itt van az a táblázat, amelyből meg kell adnia a részlegek listáját
desc s_otd
KZ NOT NULL NUMBER (2)
CEX NOT NULL NUMBER (3)
NOTD NOT NULL VARCHAR2 (2)
NAOTD VARCHAR2 (70)

PS megpróbáltam csak válassza ki mind a könyvtár nélkül paramétert, ehhez változtatni a Query Filter „CEX =” üzlet ezt a rekordot. Működik, de vseravno hiányzó értékeket.
Nem lehet behelyezni?
list_notd-> Filter = "CEX =" +
q_s_trud-> Mezők-> FieldByName ("CEX") -> AsString;






Itt beillesztésre kerül az AfterScroll on és OnChange a boltban.

Sajnálom, ismétlem.
Annak érdekében, hogy ne tűnjön el, a zárolási mező elrejtése.
És az ND (Open) nuklid fogadásának idején a szűrő nem állhat meg.

Johnmen, tette LookUpCache = true - vseravno eltűnik: (

Használja a "gyereked" ND-t, amit a "forró" paraméteres lekérdezés kap. Ez megjelenik a rácsban, külön panelben vagy formában helyezkedik el, aktiválva az alapvonalat megjelenítő rács cellában lévő megfelelő gombra kattintva. ND. Számos előnye van, ezek közül az egyik a "menet közben" szerkesztési lehetőség.

Melyik táblázatban helyezkedik el? és írja le a mező orosz szóját.

Igen, igen, igen, nézzünk részletesen és oroszul :)

Nightingales, a S_TRUD táblázatban beszúrtam
CEX (a boltkönyvtárból választható)
és NOTD - itt kell kiválasztani a fent bemutatott CEX S_OTD könyvtárból.
Így minden rekordhoz


> CEX (kiválasztva a bolt könyvtárából)

Mi ez a tábla?

SQL> desc s_pz;
KZ NOT NULL NUMBER (2)
CEX NOT NULL NUMBER (3)
NACP VARCHAR2 (40)
NACK VARCHAR2 (20)
PRB1 SZÁM (1)
PRB2 NUMBER (1)
LANG VARCHAR2 (2)
DÁTUM DÁTUMA
DATEK DÁTUM
KGR NUMBER (2)
a DBLookUpComboBoxban is szerepel a listán

három adatsor. 1. a szerkeszthető asztal két LookUp mezővel. Az 1. mező a Lekérdezés:

válasszon * az s_pz-ből

Vegye fel az eseménykezelőt AfterScroll ilyen kódot:
A Query2 nem
kezdődik
Bezárás;
ParamByName ("pCex") AsInteger: = Query.FieldByName ("CEX") AsInteger;
Nyisd;
végén;
És az SQL tulajdonság írás.

válasszon * az s_otd-ból, ahol cex =: pCex

Én csak ezt tettem. ez az, ami kiderül, hogy a legfontosabb lekérdezés (S_TRUD)
CEX NOTD
1 14
2 15

a S_OTD könyvtárban 1 osztály 14 részlegéhez, a 2. 15. osztályhoz.
Ha az első rekordra vált, a 2. NOTD eltűnik, mert a Query2-ben 14 értéket tartalmazó lista.


> az 1. rekord, a 2. NOTD eltűnik, mert a Query2 listában
> 14 értékből

nem értette, hogy van.

az első rekord, mi?

A DBCtrlGrid formámban van - több rekord látható azonnal. Így kiderül, hogy amikor az értékek listája kisebb, mint az egyik rekord értéke, akkor az érték helyett az üresség jelenik meg (ami elég logikus, mivel ez az érték nincs a listán)

Igen, működik, csak most van ez:
a 2. táblázat bejegyzésében - lásd fent
amikor a lekérdezés végrehajtásra kerül, minden szépen ragyog. de ha 15 osztályból álló rekordot kezdem, az osztály (15) helyett üresen jelenik meg benne, bár a listában vannak minden érték (mind a 15) és az utolsó (15) nincs kiválasztva: ((Csak akkor, ha kiválasztja a 14-et, majd 15 , csak akkor kiderül, hogy nem értem, miért.
És milyen ponton (milyen eseményen) kell a szűrőt kikapcsolni?

Feladtam ezt az AfterScroll-ban:
Query2-> Filter = "CEX =" + Query1-> Fields-> FieldByName ("CEX") -> AsString;
Lekérdezés-> Frissítés ();

Így jól működik, anélkül, hogy "eltűnt", de észrevehetően lelassít :(
Talán vannak némi megfontolások erről?

Memória: 0,76 MB
Időzítés: 0.031 mp




Kapcsolódó cikkek