Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Matrice o file txt

Devo visualizzare in una griglia di massimo 15 righe, i record di una 
tabella.
La tabella ha 6 campi uno di questi � "Categoria" e i record sono divisi in 
7 categorie.
Es: ci possono essere 100 record con categoria1, 10 record con categoria2, 
150 record con categoria3 ecc, il numero di record per cat. � variabile.
Per visualizzarli faccio una query a seconda della categoria che mi 
interessa.
Poi devo poter stampare o tutte le pagine oppure una sola pagina che mi 
interessa, quindi un range di record (sempre 15).
Avevo pensato di fare un file random per memorizzare i dati, per� poi 
cambiando categoria devo sempre andare a riscrivere sul file.
Oppure caricare i record in una matrice UDT bidimensionale (15, 
numeropagina) e poi cambiando categoria azzero la matrice con erase e la 
ridimensiono.
Cosi avrei le 15 righe forzate e il numero di pagina associato.
Il numero di record generalmente non � superiore a 500 ma potrebbe essere 
pure inferiore. Sono quasi tutti di tipo stringa con due currency.
La matrice � veloce ma non so se prende molta memoria.
Quale mi consigliate
Carmelo

 Carmelo
Non ho capito bene se ad ogni 'categoria' corrisponde una dimensione della
matrice - ovvero: se i record sono nell'ordine delle centinaia o delle
decine di migliaia e oltre.
Per come la vedo io, se si tratta di centinaia o poche migliaia di record
(senza crescita significativa) non ti conviene usare un db (a meno che non
ti serva la sua logica di storage e di retrieval o il fatto che i dati
debbano stare in un db per qualche motivo) ma piuttosto allocarti un array
di strutture da scrivere e leggere come tale, in un colpo solo, da un file
binario.
Resta il fatto che se la matrice viene modificata in memoria devi provvedere
al suo salvataggio in tempi ragionevolmente brevi, altrimenti rischi di
perdere le ultime modifiche. Usando un array di centinaia di elementi
l'operazione dovrebbe essere estremamente veloce (in genere piï¿½ che
scrivendo altrettanti record in un db).
Stefano

 Stefano
I record sono gi� in una tabella, io devo solo estrapolare quelli di una 
determinata categoria e visualizzarli e/o stamparli (15) per pagina
di conseguenza devo sempre ridimensionare la matrice max 500/600 che mi 
serve solo per lettura.
Carmelo


Ma hai mai pensato di usare un DataReport?
Imposti il layout in modo che su una pagina possano essere visualizzati al 
max. 15 record.
Cos� avresti anche l'anteprima di stampa (e non avresti necessit� di usare 
la griglia...), la possibilit� di stampare 1 o tutte le pagine, etc etc 
etc....
Bye
Raf 

 Carmelo
Scusa non avevo capito questo. Ma se li hai in una tabella e la query non ï¿½ 
onerosa (si tratta comunque di pochi record) perchï¿½ memorizzare 
ulteriormente i dati in un file? Se anche dovessi usare ripetutamente gli 
stessi dati ti converrebbe estrarli ogni volta o tenerli in memoria (se sono 
sempre gli stessi).
Quanto alle dimensioni dell'array: tieni presente che un array come quello 
che descrivi tu richiede 8 byte per ogni currency + un byte per ogni 
carattere della stringa (2 se Unicode) + 4 byte per ogni stringa piï¿½ una 
manciata di byte per la gestione dell'array. Se quindi hai una matrice di 
500 elementi la memoria occupata sarï¿½ un'inezia su un pc posteriore al C64 - 
a meno che le stringhe non siano dei campi image con 2GB di dati!
Stefano

 Stefano
Le stringhe son tutte testo max 45 caratteri
Carmelo

 Carmelo
Quindi l'intero array di 500 record occuperï¿½ meno di 40KB.
Stefano 

"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:h42akp$8tk$1...@alix.livenet.it...

Ho usato active report per� ho un problema che non riesco a risolvere:
La griglia deve essere cosi:
|---|--------|-------|--------|---|---|---|
|---|--------|-------|--------|---|---|---|
|---|--------|-------|--------|---|---|---|
|---|--------|-------|--------|---|---|---|
|---|--------|-------|--------|---|---|---|
                                          |---|---|---|
                                          |---|---|---|
Le ultime 2 righe sono i totali di pagina e pagina precedente e devono
essere attaccati alla griglia del detail
Invece mi vengono staccate e non riesco a risolvere.
Carmelo

 Carmelo
Purtroppo non conosco activereport, non riesco ad aiutarti su questo...
Ciao
Raf 

 Devo visualizzare in una griglia di massimo 15 righe, i record di zac
...mi son tenuto lontano da questa discussione...ma ora...mi sfugge
qualcosa!
io ho capito...
Hai da stampare i record di una tabella max 15 per pagina....e allora?
Un qualsiasi tool di reporting...
NO?
Tutto a manina?....e perchè? .....????!!! ...vabbe de gustibus!!!
Fai la query...
del risultato ...leggi 15 record e li disegni sul foglio comandando
direttamente la stampante con l'oggetto printer
....hai da stampare la 3 pagina soltanto?
for n=1 to 3
    leggi15record
next
e stampi
....
logico che nella sub leggi15record hai un controllo dell'EOF

 Devo visualizzare in una griglia di massimo 15 righe, i record di zac
...mi son tenuto lontano da questa discussione...ma ora...mi sfugge
qualcosa!
io ho capito...
Hai da stampare i record di una tabella max 15 per pagina....e allora?
Un qualsiasi tool di reporting...
NO?
Tutto a manina?....e perch�? .....????!!! ...vabbe de gustibus!!!
Ho gia spiegato nel post precedente (Rafunk) che con active report non 
riesco ad impostare la stampa come mi serve
Fai la query...
del risultato ...leggi 15 record e li disegni sul foglio comandando
direttamente la stampante con l'oggetto printer
....hai da stampare la 3 pagina soltanto?
for n=1 to 3
    leggi15record
next
Questa non l'ho capita!!! cosi leggo 45 record
e stampi
....
logico che nella sub leggi15record hai un controllo dell'EOF
Devo visualizzare e stampare i totali del foglio corrente e quelli del 
foglio precedente, quindi da qualche parte mi devo memorizzare i dati.
Carmelo 


"O signùr benedeto!"
dì la verità....l'indicatore di conoscenza programmazione ed affini è
vicino a zero!...tradotto in toscano "ù'n tu n'nàai capito una sega
nulla!"
Ho un database con una tabella....voglio stampare i dati!
Come fai?
DAO o ADO?
Poniamo ado
1) Collegamento al database
2) Invio query al database
3) Recupero dati filtrati
il punto 3)....si fà tramite (generalmente) un oggetto chiamato
recordset
Il recordset contiene i risultati...e sono "scorribili parecchio"
ossia esiste un metodo
.movefirst
.movenext
.moveprevious
.movelast
ora caro "el mè 'toni"
se io
ho una cosa del genere (scrivo a braccio)
Assumo le seguenti cose
Rs è l'oggetto recordset
ed ho già testato che non è vuoto
codice tipo
rs.movefirst
for n= 1 to 5
   printer.print rs("Nome") & " " & Rs("Cognome")


wrote:
invio partito a vuoto....proseguo
 rs.movefirst
 for n= 1 to 5
    printer.print rs("Nome") & " " & Rs("Cognome")
    rs.movenext
    if rs.eof then Exit (quello che vuoi ...for ...sub non c'è altro
da leggere)
 next
Una cosa del genere mi stamperà cosa secondo te?
i primi 5 records se ci sono
e se io vorrò invece stampare la terza pagina? e se in ogni pagina
metto 5 records? che records dovrò leggere per stampare la TERZA
pagina????
1 2 3 4 5 .....1 pagina
6 7 8 9 10.....2 pagina
11 12 13 14 15.3 pagina
puoi se sono pochi i records...spostarli con un ciclo....
oppure provare a spostarti direttamente al 11esimo record con il
metodo move (testando sempre eventuali EOF)
...hai capito ora?
p.s.
Il buon "vecchio" GbC ha anche delle routine per chi vuol fare a meno
di strumenti di reportistica  e comandare direttamente la
stampante!....