Newsgroup: it.comp.software.database
Titolo: Lista virtuale ... Si, ma i dati ??

Ciao a tutti,
io ho il seguente problema: devo mostrare un grande numero di record da
una tabella di database.
So che questa non è in genere una buona soluzione, ma è necessario per
il progetto. I dati infatti rappresentano "eventi" ricevuti da un
dispositivo hardware, e l'utente vuole verderli "scorrere", e può
lasciare anche aperta la finestra relativa 24/7....
Insomma, per implementarlo ho pensato ad una lista virutale. In
particolare, ho implementato un meccanismo che, usando un picturebox e
una scrollbar, mi permette di sapere quali righe del "mega"-recordset
sono attualmente visibili. Questo funziona.
Il problema, è che ora non so come leggere i dati dal DB !! In
particolare, la mia "lista virtuale" mi dà un'informazione sulle _righe_
da visualizzare, e non sull'ID delle stesse... Come posso fare?
So che si potrebbe tenere aperto il recordset, e muoversi con
AbsolutePosition ... ma non mi sembra molto efficente!! Preferirei avere
la possibilità di fare una query per leggere di volta in volta i soli
dati visualizzabili (ovvero le righe).
Qualche idea?
Grazie mille in anticipo per qualsiasi risposta..
Marco
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ciao a tutti,
?
non c'ho capito nulla??? (tra un po vado a prendere un altro caffč!)
ho capito che
hai un dispositivo che memorizza dati...
si ma dove?
Database?
File di testo?
Memoria?
 leggi questi dati e li metti?
in una textbox dentro una picture?
boh!
senti questa.....
tu memorizzi i dati di questo dispositivo in una tab temporanea
tu hai un timer ed una griglia...
la griglia visualizza questa tabella temporanea
se aggiungi dati essa la riflette istantaneamente...l'hai fatta bound!
ogni 10 minuti ....5 minuti.... un secondo come vuoi tu (ogni tanto non
esagerare) il timer scatena un evento
che memorizza i dati nella tabella principale che contiene i dati
definitivamente....
Vantaggi....vedi gli ultimi 10 minuti...č leggera...č veloce...
Svantaggi... ogni 10 minuti si vuota (ma con qualche escamotage la fai
sembrare piena...ad esempio invece di vuotarla ed un timer...implementa un
buffer LIFO ogni 100 record il nuovo spinge via il piů vecchio nella tabella
definitiva)
accanto prevedi un minimotore di ricerca che fa una query sulla tabella
definitiva....

 tabella definitiva)
quella è una FIFO...
[OT xché non parlo di db]
secondo me (tecnica UNIX, sotto windows non so):
- il log del dispositivo va direttamente sotto una fifo creata con mkfifo.
 -un processo batch si prende cura di leggere dalla fifo e scrivere su file.
- quando starti l'applicazione, termini il processo batch, fail un tail del 
file per riempire il tuo buffer applicativo e ti metti in ascolto della 
fifo.
- man mano che printi a video il risultato, appendi nel file i dati.
le letture le fai direttamente da file.
è più probabile che i dati vengano cercati per tempo, piuttosto che per 
altro, quindi il dato è già ordinato.
con una ricerca binaria fai in fretta!
svantaggio:
se qualcosa si pianta, la fifo rischia di diventare molto grande, dipende da 
quanto logga il dispositivo.
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.collinelli.net/antispam/

 non c'ho capito nulla??? (tra un po vado a prendere un altro caffè!)
:))
Mi dispiace di non essere stato chiaro.
Allora. _IO_ ricevo gli eventi dal dispositivo HW, e li devo
visualizzare al volo su di una finestra.
Questa finestra "scrolla" (come me, qualche volta ... :) ) quando riceve
un evento dal campo.
In più, il mio programma salva quei dati in una tabella di database (per
il momento, Access 2000).
Questo perchè (e qui viene il problema rispetto alle Vs. risposte) è
previsto che l'utente
- lascia la finestra aperta sempre, per vedere questi eventi
- ad un certo punto, decida di "fermare" lo scrolling, e vada indietro
con la scollbar verticale per andare ad analizzare i dati precedenti (!)
Per questo motivo, non posso far vedere solo "gli ultimi x minuti"
(anche se il dispositivo HW in realtà non genera moltissimi eventi -
potrebbero essere circa 100 al giorno !!) proprio per il requisito di
sopra...
Ovvero: la FIFO è un'ottima idea per visualizzare gli eventi a run-time.
Ma per il passato (di pomodoro :))? Come faccio a dare all'utente
"l'impressione" (o la realtà, boh?) di vedere "tutti" i dati?
Grazie mille, per l'attenzione...
M.


 quella č una FIFO...
FIFO First In First out
LIFO Last In First out
mmmmm....mi sa che hai ragione?!!!...urge il caffč!



 ha scritto nel messaggio
news:ba056416a9da5ca78db...@mygate.mailgate.org...
Ma tu guarda se ti devo rincorrere negli altri NG!!!!!
testo del msg nel NG vb
"
Allora....NIENTE crosspost please!!!!!!
100 eventi stanno in una griglia tranquillamente!!!
hai risolto da te!
:-o
"

 ha scritto

100 linee al giorno ?
li carichi in una dbgrid (con dao) o datagrid (con ado) e con un timer
forzi un refresh/movelast ogni x minuti.
tutt'al piu' gli puo' succedere che mentre sta guardando i dati
precedenti il cursore, causa refresh, gli schizza sull'ultimo.
vedi tu se azzerare i dati del giorno alla chiusura del programma, o
se ti serve avere l'archivio completo. in un anno sono 36k righe, non
tante. prevedi solo un po' di ram sulla macchina.
ciao

la dbGrid fa tutto quello che ti serve
-> GbC
http://www.gbcweb.com

 precedenti il cursore, causa refresh, gli schizza sull'ultimo.
Beh, basta aggiungere un Command che inverta la proprietą Enable del Timer:
Sub cmdFreeze_Click()
    tmrDBGridRefresh.Enable = Not tmrDBGridRefresh.Enable
    cmdFreeze.Caption = IIf(tmrDBGridRefresh.Enable, "Disattiva
aggiornamento", _
        "Attiva aggiornamento")
End Sub
Ciao!
Esteban

 Beh, basta aggiungere un Command che inverta la proprietà Enable del
Timer:
ma cosi' gli togli tutta la sorpresa :)