Cum se face un câmp de căutare cu o listă dinamică

Cum fac un câmp de căutare cu o listă dinamică?

Ajutați-mă să înțeleg această problemă:
pe interogare are un câmp de căutare, ca o listă care înhămat altă interogare. Este necesar ca pentru fiecare înregistrare această listă să fie diferită în funcție de cheie. Ie de exemplu, în tabelul-director are intrări de forma (magazin, numărul de departament), iar celălalt tabel este necesar pentru a face magazin, și în funcție de acest magazin pentru a trage în lista de diviziuni (TLookupComboBox), separate de doar introducerea magazinului. Și pentru fiecare înregistrare.
Am încercat să recompilam directorul de interogări al departamentelor pentru fiecare înregistrare - se pare că ultima interogare este valabilă pentru întregul tabel și unele câmpuri sunt goale deoarece Lista nu are suficiente valori pentru ele.
Spune-mi ce poți face în acest caz?

Utilizați parametrul din directorul de interogări, pentru a transfera numărul magazinului din înregistrarea curentă

Este suficient să puneți un filtru pe Luka ND.
Și ca să nu dispară - inclusiv cache-ul câmpului de blocare.

Și am făcut-o. Nu asta.
De exemplu, dacă am două intrări într-un tabel:
CEX NOTD
1 2
2 5
și în primul atelier de departamentul 2, iar în data de 2 - 5 divizii, apoi, după stabilirea vor fi transferate la prima intrare în directorul va fi de 2 de înregistrare și de înregistrare cu două workshop nu este suficientă valoare în această listă, goliciunea va străluci.
Sau nu am parametru de transfer acolo - în AfterScroll pe Query și OnChange pe câmpul CEX pe Query?

Johnmen, spune-mi mai multe despre filtru - unde se află și ce să includă?

ceva nu este clar deloc ce se întâmplă. Aduceți structura meselor.

Iată tabelul pe care funcționează acest program
desc. s_trud
NUMĂRUL KZ (2)
NUMA CEX (3)
DOLJ NUMBER (8)
NUMĂR RAZR (1)
NOTD VARCHAR2 (2)
NUMĂRUL FL_DIAP (1)
Iată tabelul din care trebuie să faceți o listă de departamente
desc s_otd
KZ NUMĂRUL NULL (2)
NUMA CEX NU NULL (3)
NU NU NULL VARCHAR2 (2)
NAOTD VARCHAR2 (70)

PS Am încercat doar în director să selectez totul, fără parametru, și pentru acest filtru de schimbare a interogării "CEX =" la magazinul din această înregistrare. Lucrări, dar vseravno dispar valori.
Nu pot intra acolo?
list_notd-> Filter = "CEX =" +
q_s_trud-> Câmpuri-> FieldByName ("CEX") -> AsString;
Aici este inserat în AfterScroll on și OnChange în magazin.

Scuze, repet.
Pentru a nu dispărea, salvați câmpul de blocare.
Mai mult decât atât, în momentul obținerii nodului ND (Open), filtrul nu trebuie să rămână.

Johnmen, făcut LookUpCache = true - vseravno dispare: (

Abandonați LookUp cum cel rău și de a folosi LP „copil“, produs de „fierbinte“ Căutarea prin parametri. Este afișat în grilă, situația din otd.panel sau forma care este activată prin apăsarea sootv.knopki într-o celulă a grilei, afișarea DOS. ND. Avantajele sunt multe - una dintre ele - capacitatea de a „on the fly“ se schimbă directoare.

În ce tabelă introduceți? și descrie cuvintele rusești ale câmpului.

Da, da, da, sa vorbim in detaliu si in limba rusa :)

Nightingale, în tabelul S_TRUD I inserați
CEX (selectat din directorul magazinului)
și NOTD - aici trebuie selectat din directorul S_OTD de pe CEX introdus mai sus.
Și pentru fiecare înregistrare


> CEX (selectat din directorul magazinului)

Ce este acest tabel?

SQL> desc s_pz;
KZ NUMĂRUL NULL (2)
NUMA CEX NU NULL (3)
NACP VARCHAR2 (40)
NACK VARCHAR2 (20)
NUMĂRUL PRB1 (1)
NUMĂRUL PRB2 (1)
LANG VARCHAR2 (2)
DATEN DATE
DATEK DATE
NUMĂRUL KGR (2)
este, de asemenea, înfășurat în DBLookUpComboBox ca o listă

trei seturi de date. Prima tabelă editabilă cu două câmpuri LookUp. Primul câmp este selectat din interogare:

selectați * din s_pz

Așteptați-l pe handler-ul evenimentului După scroll astfel de cod:
Cu Query2 faceți
începe
Închide;
. ParamByName ( "pCex") AsInteger: = Query.FieldByName ( "CEX") AsInteger ;.
Deschideți;
se încheie;
Și în proprietatea SQL scrieți.

selectați * din s_otd unde cex =: pCex

Am făcut doar asta. aceasta este ceea ce se dovedește a fi principalul Interogare (S_TRUD)
CEX NOTD
1 14
2 15

în directorul S_OTD pentru 1 departament 14 departamente, pentru departamentele 2 15.
Când devii pe prima înregistrare, în cel de-al doilea NOTD dispare, pentru că în Interogare2 o listă cu 14 valori.


> pe prima înregistrare, în cel de-al doilea NOTD dispare, deoarece din lista Query2
> din 14 valori

nu înțelege cum este.

pe prima înregistrare a ce?

Am pe formularul meu DBCtrlGrid - mai multe înregistrări sunt imediat vizibile. Se pare că, atunci când lista de valori mai mică decât valoarea într-una din înregistrările, apoi (scris acest lucru) în loc de valoarea afișată goliciune (care are sens, pentru că această valoare nu este listat)

Da, functioneaza, doar acum este aceasta:
în tabelul 2 intrări - a se vedea mai sus
când interogarea este executată, totul strălucește frumos. dar atunci când stanovlyuchs privind înregistrarea cu 15 divizii în ea în loc de departament (15) Vfix nule, nu este selectată, deși lista include toate valorile (toate 15), și acesta din urmă (15): ((Numai dacă selectați 14, apoi 15 , numai atunci se pare că nu înțeleg de ce.
Și în ce moment (ce eveniment) ar trebui ca filtrul să fie oprit?

Am postat acest lucru în AfterScroll:
Interogare2-> filtru = "CEX =" + interogare1-> câmpuri-> FieldByName ("CEX") -> AsString;
Interogare-> Actualizare ();

Deci, funcționează bine, fără a "dispărea", dar în mod semnificativ încetinește :(
Poate sunt câteva considerații despre asta?

Memorie: 0,76 MB
Sincronizare: 0.031 sec

Articole similare