Newsgroup: it.comp.lang.visual-basic
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č!
OT
Amico scusa mi accorgo ora del  crosspost!!!!

 Ciao ad entrambi.
CUT
Allora....NIENTE crosspost please!!!!!!
100 eventi stanno in una griglia tranquillamente!!!
hai risolto da te!
:-o

 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


 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

 100 eventi stanno in una griglia tranquillamente!!!
Allora: ho fatto male a dire questo. Il problema è che questo "oggetto"
sarà usato dapprima in una "piccola azienda" (che è quella che "paga" il
progetto ;)) ) che ha pochi eventi
(appunto, 100 al giorno). Ma poi l'idea è di riutilizzarlo per quanto
possibile "dovunque" (i.e. da tutti i clienti). Alcuni clienti hanno un
traffico molto maggiore, del tipo 5.000 - 10.000 eventi al giorno (!).
Di qui nasce il problema. Poi, non mi serve visualizzare solo i dati di
un giorno, ma continuare a visualizzare eventi (forse per tutto
l'anno?). Ripeto: l'utente potrebbe decidere di lasciare la finestra
aperta sempre, e poi ad un certo punto, decidere di "fermare" lo
scrolling, ed andare indietro con la scollbar verticale per andare ad
analizzare i dati precedenti (!)
Infine: DBGrid. Sì, però (per quel poco che ne so della DBGrid) questa
fa vedere solo i dati sul DB. In realtà io devo far vedere delle
"stringhe" che sono "calcolate" dal programma in funzione dei valori
numerici ricevuti dall'HW. Quindi questa soluzione non va (o sono io che
devo studiare la DBGrid) ??
Ciao e grazie ancora a tutti.
M.


 M.
ciao

 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

 tabella.
...ma allora puoi scrivere i dati come vuoi, anche se questi non sono
nel database, ma sono "funzione" dei valori del database?
Vado a studiare!! :)
Grazie.


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

 Vado a studiare!! :)
ho detto della tabella, non della griglia.
in casi del genere mi scrivo delle miniquery che a comando o a tempo
ricalcolano, es nome & " " & cognome, e scrivono il risultato nel
campo "nome completo" previsto apposta. il campo poi e' visualizzabile
come gli altri. non so se coi db seri per cose simili si usano le
stored procedures.
ciao

 campo "nome completo" previsto apposta. il campo poi e' visualizzabile
[CUT]
Ecco, appunto. Io devo visualizzare stringhe che _non_ sono nel DB,
neanche come aggregati delle altre. Il codice VB fa qualcosa del genere:
(ma configurabile dall'utente):
if rst!P1 = 10 then stringa = "Ciao, come va?"
elseif rst!P1 = 20 then ....
ecc. ecc.
Questo č il problema... 
Ciao e grazie ancora per il tempo dedicato alla mia domanda e per i
suggerimenti.
M.


 degrada le prestazioni?
che ci sta a fare l'SQL?
INSERT e UPDATE?
quando arrivano i dati
ADO connection open
ADO command execute
ADO close
chi parla di rs?
guarda che ADO poi ti tiene i dati anche disconnesso!
Ossia tengo il rs aperto in SOLO LETTURA mi serve solo a mostarre la
griglia! ...è veloce!
la conn è chiusa...
arrivano dati?
    riapro la conn
    faccio il command
    requery del rs
    richiudo la conn
esempi dei recordset disconnessi....dappertutto in rete...
CUT

 M.
di niente, anzi. a volte si impara molto dalle domande altrui. ti
pongono i problemi in un modo che non ti verrebbe mai in mente.
ciao