Soluiți cum să se afișeze numai o parte din înregistrări în DBGrid1 și la
Dragi maeștri de la Delphi! Soliați modul în care în DBGrid1 se afișează doar o parte din înregistrările tabelului serverului și la apăsarea ulterioară de către utilizator pe buton - înregistrările afișate în DBGrid1 au rămas și au fost adăugate următoarele n înregistrări ale acestui tabel.
Ei bine, toate componentele normale de acces la baza de date sunt trase doar de pe server, ceea ce este vizibil pe ecran.
De unde pot obține o astfel de componentă încât să fie posibil să vadă toate cele 743 intrări pe ecran în momentul în care serverul sa întors
Da, dar trebuie să obțin un set de înregistrări de la server la client și afișat în DBGrid, rămâne, iar valorile interogării următoare au fost adăugate la DBGrid.
Adică există un tabel de 100.000 de înregistrări, prin apăsarea unui buton de pe DBGrid afișează solicitarea a 50 de înregistrări de utilizator interesate sleduyuzhy la server - chiar 50, dar în DBGrid afișează deja 100 de intrări, și așa mai departe cu fiecare atingere succesivă. În acest caz, de la server la client ajunge la 50.
diokant (18.06.2003 16:19)
nu folosiți DBGrid
sau utilizați un tabel temporar, unde să îmbinați datele de pe server (dacă există 50 de intrări :)))
> Unde pot obține o astfel de componentă care să fie vizibilă pe ecran în
> În prezent, toate cele 743 înregistrează că serverul a revenit
Nu am scris despre asta.
Există 20 de intrări pe ecran - numai aceste 20 de înregistrări sunt descărcate de pe server.
Nu cunosc tehnologia compresiei imaginilor. )))
> sau utilizați un tabel temporar, unde să fuzionați datele de pe server
Cred că nu voi lucra, deoarece trebuie să modific datele în DBGrid1.
> nu folosiți DBGrid
Dacă nu este dificil - spune-mi mai multe
diokant (18.06.2003 17:55)
Da, deși standardul StringGrid, datele sunt stocate în structura de înregistrare TList +. Când trebuie să adăugați date structurii și tabelului, capturați modificările de date în tabel - actualizați "doar înregistrarea pe server.
> sus
Dacă nu este dificil - spune-mi mai multe
Și dacă este posibil într-un DBGrid să afișeze datele nu de la unul, ci de la mai multe surse de date. Dacă da (și ar putea fi editat) - atunci cred că ar funcționa.
Dragi maeștri de la Delphi!
Trebuie să trag înregistrări de la masa serverului pe client, dar în așa fel încât toate porțiunile din DBGrid să fie afișate și oricare dintre înregistrări să poată fi editate direct în DBGrid.
Vă rog, spuneți-mi, cea mai frumoasă versiune a implementării.
> diokant (7/19/03 9:46 am)
Nu este foarte clar ce comportament standard TDataSet nu se potrivește. Datele din acesta și așa sunt încărcate nu toate simultan, și anume în porții. Ie aproximativ așa:
Există un DataSet și un DBGrid conectat la acesta. Deschideți setul de date. Descărcă de pe server cât mai multe înregistrări pe care le puteți vedea în grilă. Când utilizatorul începe să navigheze prin înregistrările din rețea, dacă doriți să afișați intrările care nu au fost încă încărcate, o nouă porțiune este injectată de pe server și adăugată la tamponul DataSet. "A.
Problema este că clientul comunică cu serverul prin conexiune modem.
Dacă fac o interogare SELECT * FROM T1, interogarea va fi executată mult timp.
De aceea vreau:
- spuneți numărul de înregistrări din tabel (să zicem 50.000)
- utilizatorul a format o condiție,
- după care determin numărul de înregistrări care corespund condiției și informează utilizatorul
- în cazul în care utilizatorul dorește să vadă aceste înregistrări, precum și numărul de înregistrări este mai mică decât, să spunem 100 (100, deoarece este un moment în care aproximativ 10 de secunde), le-am afișa într-un DBGrid (în cazul în care nu încap pe ecran - există defilare verticală)
- utilizatorul formează o nouă condiție,
- dupa care determina numarul de inregistrari care corespund conditiei (printre care determina cantitatea de date deja disponibila pe client (in DBGrid) si suma pe care trebuie sa o primesc de la server la client)
- dacă numărul de astfel de înregistrări este mai mic decât 100 (100 - pentru că este în jur de 10 secunde), atunci le afișez în DBGrid, adică în DBGrid vor fi înregistrate vechi + altele noi.
Astfel, clientul va avea mai multe intrări (toate acestea sunt disponibile într-o DBGrid, iar în cazul în care nu încap pe ecran - există defilare verticală), care sunt subseturi ale unui set de înregistrări, care îndeplinește toate condițiile, care au fost formate de către utilizator. Utilizatorul este capabil de a modifica oricare dintre înregistrările afișate în DBGrid
> diokant (7/19/03 11:00 AM)
După cum am înțeles, de fapt, este necesar ca utilizatorul să poată vedea (și să editeze în rețea) rezultatul mai multor solicitări succesive.
O soluție este utilizarea unui MemoryTable pentru a îmbina rezultatele interogării.
De asemenea, adaug: în cazul în care se deplasează vertical în rețea? Ați încercat în mod repetat (și voi încerca din nou :)), că un număr mare de înregistrări în rețea - nu aveți nevoie de el. Ei bine, o persoană normală nu poate lucra cu câteva mii de înregistrări simultan. În mod ideal, interogarea ar trebui să returneze cât mai multe înregistrări în locul vizibil al grila.
> După cum am înțeles, de fapt, este necesar ca utilizatorul să poată vedea (și să editeze în rețea) rezultatul mai multor cereri succesive.
Da.
> Una dintre soluții: utilizați orice MemoryTable,> și îmbinați rezultatele cererilor.
Și puteți mai mult?
> diokant (06/19/00 11:57)
Există componente, succesoare ale TDataSet, care funcționează cu date care nu sunt în nicio bază de date, ci în memorie. Am folosit o dată TRxMemoryTable (pot fi confundat în nume, a fost mult timp în urmă), întrebați-vă va fi sfătuit aici ce mai bine de utilizat și de unde să-l.
Și algoritmul de lucru este așa:
Se execută o interogare. Setul de date rezultat este scris în tabela de memorie. Următoarea interogare este executată - setul de date primit este adăugat la setul din MemoryTable. Etc.
Pentru ca datele editate să fie trimise către server, acest handler este scris în acest MemoryTable, de exemplu, OnBeforePost, în care se execută interogarea UPDATE.