Newsgroup: it.comp.lang.delphi
Titolo: Paginazione del ResultSet nel DBGrid





Salve,


sto cercando di trovare un modo (meglio se sfruttando le proprietà degli 
oggetti data access) per paginare il risultato di una query dal momento che il 
numero di record restituibili potrebbe essere molto elevato. 


Pensavo di realizzarlo a mano lavorando sullo scrolling verso il basso del 
DBgrid ma non ho trovato un evento così.


Grazie a chiunque mi dà un'idea.
----------------------
andrea...@errepi.it
---------------------- 




Una soluzione potrebbe essere quella di intercettare
il massaggio WM_VSCROLL...
function NewWindowProc(WindowHandle: hWnd;Msg: Word;ParamW: Word; ParamL: LongInt):LongInt;stdcall;
begin
  if (Msg = WM_VSCROLL){scrolling vericale}
   then case ParamW of
    SB_LINEDOWN: showmessage('... scrolling verso il basso.');
    SB_LINEUP  : showmessage('... scrolling verso l''alto.');
   end;
  NewWindowProc := CallWindowProc(OldWindowProc,WindowHandle,TheMessage,ParamW,ParamL);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  OldWindowProc := Pointer(SetWindowLong(DbGrid1.Handle,GWL_WNDPROC,LongInt(@NewWindowProc)));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
  SetWindowLong(DbGrid1.Handle,GWL_WNDPROC,LongInt(OldWindowProc));
end;
...inserisci il codice che vuoi (per l'aggiornamento della query)
al posto dei showmessage che ho messo io...
Ciao!
Alan
---
Questo servizio e' realizzato con Wappi della Virtex
Connetti ad internet il tuo telefonino: 
http://www.wappi.com/
--
Posted from [194.243.91.36] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Se usi un DB relazionale non dovresti avere questi problemi, aprendo la
TQuery
ottieni solo un cursore dati che la DbGrid si arrangia a paginare.
I dati vengono passati al client solo quando vengono effettivamente
richiesti
come nel caso di un next in un tuo programma o quando ti muovi in una
DbGrid (che comunque ha una cache x migliorare le risposte).
Il comportamento dei miei programmi che usano InterBase lo conferma.
Mirko
--
--------------------------------------------
Mirko Guidolin
COMUNE DI RESANA
Provincia di Treviso
Servizio Elaborazione Dati
--------------------------------------------
levare eventuali underscore per rispondere

al posto dei showmessage che ho messo io...
Subclassing? :)
Se devi intercettare un solo messaggio c'è una soluzione migliore di questo
tipo di subclassing, ti conviene sfruttare l'evento OnMessage ti
TApplication!
Ciao
--
- Carlo -
BSSoftware Tips Mailing-List Support

 TApplication!
No, i messaggi di scrolling sono inviati alla coda di messaggi della DBGrid,
mica all'application...
Le uniche cose che si potrebbero rivedere del codice di Alan sono:
- puoi usare la prop. WindowProc al posto di impegolarti sulla
Set/GetWindowLong, e usa variabili TWndMethod facendo direttamente
OldWndProc := DbGrid1.WindowProc;
DbGrid1.WindowProc := NewWindowProc;
[potenza della VCL, le chiamate a SetWindowLong vengono fatte
dall'interno...]
- racchiuderei il tutto in un componente derivato da TDBGrid per questioni
di ordine + che altro...
Ciao
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

mica all'application...
Ma va? Poi farò una prova per verificare quanto hai detto....cmq grazie per
la dritta!
