Newsgroup: it.comp.lang.visual-basic
Titolo: Non capisco ...ma pare chiaro

Scuste, la mia domanda da perfetto ignorante....ma eppure la spiegazione
appare chiara!!!!
ho un'applicazione dove voglio caricare dei dati da un db, quindi utilizza
un controllo DATA e una MSFG..siccome i dati sono molti, il controllo ci
mette un po' a caricarli....
Allora volendo fare in modo che (figassa) il form appaia prima dell'inizio
caricamento dati, cosi da dare un'impressione di lavoro continuo, uso la
"load <nome form>" per precaricarlo come spiegato in MSDN...il form appare
subito, ma quando io chiamo il metodo SHOW per fare continuare le operazioni
di caricamento ..ciccia....non le ricarica...(e qui mi sorge il dubbio che
invece di rompervi le balle a voi, dato che fa caldo, potevo usare il metodo
refresh...ma sbagliando si impara)...
seconda cosa....il controllo DATA, e' si comodissimo e veloce (a confronto
di un ciclo For Next) ma purtroppo non permette di interagire...e quindi mi
vedo costretto a togliere la mia bellissima barra di progressione, perche'
non so come ancorarla....altrimenti devo metterla sopra e quindi i tempi
della barra si vanno a sommare a quelli del caricamento reale dei
dati...troppo decisamente...
allora le mie domande sono queste....nell'help di Microsoft c'e' scritto che
il comando LOAD (rivolto a Form) serve per precaricare senza visualizzare i
form...perchè lo visualizza subito?
Perchè poi non fa il comando SHOW per finire il caricamento delle
informazioni?
Come posso fare per far intruffolare il codice della barra di progressione
fra quello del comando data?
Es codice per DATA....
sub Codice()
'codice per la barra di progressione
progressione.min = 0
' codice per la lettura dei dati
set xrec = db.openrecordset (sqlStringaDati, dbOpenDynaset)
'limite massimo per la progressione
progressione.max = xrec.recordcount
'estrazione dati
set data1.recordset = xrec
'questo lo vorrei evitrare perchè raddoppia i tempi...
for ind = 1 to xrec.recordcount
    progressione.value = ind
next ind
end sub
ciao a tutti e grazie...ovviamente buon ferragosto a tutti

 next ind
Questo invece è da evitare.
Non affidarti alla RecordCount che potrebbe non essere correttamente
valorizzata.
Per i loop sui recordset usa sempre questa forma:
Set rs = DB.OpenRecordset(...)
Do While Not rs.EOF
    ...
    rs.MoveNext
Loop
Ciao
--
Math Parser, VB.Framework : 
http://www.neodatatype.net
Sito Comune               : 
http://www.it-lang-vb.net

 ha scritto nel messaggio
news:bZw_a.1785$zN5....@news1.tin.it...

ciao Zanna, grazie della risposta....
e si i record sono tantini....circa 30.000, ho provato a confrontare la For
Next e il Data...il ciclo For ci mette sette (7) minuti a caricarli tutti
(tieni conto che il reocrdset che leggo e' composto da molti campi) mentre
il data non piu' di 30" ...capisci il problema...non so perche ci mette
tanto effettivamente mi paiono parechi 7 minuti...ma cosi e'...
Grazie

 parechi 7 minuti...ma cosi e'...
umm umm, soli 30'000 record e ci impiega 30secondi ???
Scusa posso chiederti il numero di campi di un record ?
se tu nel load passi il recordset al controllo data e hai una msflex
collegata ad esso in binding diretto mi pare molto strano tutto sto tempo,
per curiosita' perdi 5 min e prova un nuovo progetto con un controllo data e
una flex e confronta i tempi !
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 ha scritto nel messaggio
news:Z6z_a.241510$Ny5.7...@twister2.libero.it...

ciao Gigio2K....
allora, ho fatto le seguenti prove prima di usare la data + msfg........
1) MSFG e ciclo for....pauroso ...30.000 record 7 minuti
2) MSFG e data.... stessi record e circa 30"
3) MSHFG e ADODC....come la 2 forse qualcosa in meno....
4) DBGrid e ADODC ...apparentemente cambia poco...
il recordset che leggo e' vaiabile..diciamo che quello piu' lungo, (quello
appunto da 7 minuti ) e composto da 14 campi...
quello che mi stupisce e che non ci faccio particolari lavori o controlli
sopra...mi limito a caricarlo nella msfg....
sara il mio pc che e' troppo vecio? :)
grazie


[cut]
scusami Zanna, non voglio assolutamente entrare in discussione con qualcuno
piu' esperto di me, ma ti riporto alcuni brani presi da MSDN riguardo
all'istruzione LOAD...
Istruzione Load
Carica in memoria un form o un controllo.
....................
Per i form, non è necessario utilizzare l'istruzione Load a meno che non si
desideri caricare un form senza visualizzarlo.
...............................
Esempio di istruzione Load
In questo esempio l'istruzione Load viene utilizzata per caricare un oggetto
Form.
..........................
Private Sub Form_Click ()
   Dim Answer, Msg as String   ' Dichiara la variabile.
   Unload Form1   ' Scarica il form.
   Msg = "Form1 è stato scaricato. Scegliere Sì per caricare il form"
   Msg = Msg & " e visualizzarlo. Scegliere No per caricare il "
   Msg = Msg & "form e mantenerlo nascosto."
   Answer = MsgBox(Msg, vbYesNo)   ' Legge la risposta dell'utente.
   If Answer = vbYes Then   ' Valuta la risposta.
      Show   ' Se è stato scelto Sì, visualizza il form.
   Else
      Load Form1   ' Se è stato scelto No, lo carica solamente.
      Msg = "Form1 è caricato. Scegliere OK per visualizzarlo."
      MsgBox Msg   ' Visualizza il messaggio.
      Show   ' Visualizza il form.
   End If
End Sub
Come vedi MSDN dice proprio che LOAD ha come compito quello di caricarre
senza visualizzare il form....quindi secondo me questo vuol dire che lo
carica in memoria, ma senza metterlo a video...
Ripeto...non voglio fare polemica, non ne sono in grado, voglio solo capire,
dato che a volte si puo' fraintendere quanto si legge o sente.
Ti ringrazio per la tua eventuale risposta
Ciao

 capire, dato che a volte si puo' fraintendere quanto si legge o sente.
vi state a intreccia' , zanna voleva dire che se tu fai
form1.show
che succede ? che :
1) il programma parte
2) Visualizza la form
3) inizia a caricare le cose (mettendoci 7 minuti)
se fai
Form1.load
1) il programma parte
2) inizia a caricare le cose (mettendoci 7 minuti)
se c'e' uno show da qualche parte
3) si visualizza la form
quindi zanna ti dice di usare la prima opzione " ...Per dare l'effetto di
"velocità apparente" come spiegato da MSDN ..."
Scusa pero' io lavoro con database catastali in Dbf o Mdb(97) e ho record di
una 30ina di campi x 100'000 e passa record
su un celeron 800 ci impiega una manciata di secondi (un 6-7) a caricare il
tutto !
Bho che cosa strana !
Cmq scusami se faccio un appunto sulla cosa + importante, dovresti in ogni
caso , cercare di non caricare tutti e 30'000 i record ma caricare il
Recordset a blocchi di 1000 ad esempio, infondo pensaci, cosa te ne fai di
una griglia con 30'000 linee quando al massimo ne visualizzi un centinaio ?


 ha scritto nel messaggio
news:gSR_a.243182$lK4.7...@twister1.libero.it...

questa e' un'ottima idea...a cui non avevo pensato...tant'e' che il
personaggio che deve consultare l'archivio, piu' una 40ina per volta non ne
visualizza....si potrebbe spezzare la visualizzazione in piu' parti
..esattamente come faccio su internet quando devo visualizzare molti dati e
dividerli in pagine...mitico....
per quant riguarda i tempi, non so proprio cosa dire..sara forse l'uitlizzo
del ciclo for nest e dell'istruzione additem di MSFG a rallentre il
tutto...boh...
Grazie dell'idea...provare subito

 Grazie dell'idea...provare subito
Prego, scusa se mi permetto ma dovresti un po vederti i consigli della
netiquette sul quote, in pratica quando rispondi devi tagliare le parti del
messaggio precedente che non sono importanti e soprattutto la firma non va
riportata ^_-


 riportata ^_-
opssssss......scusa...effettivamente non mi e' mai passato per la testa di
guardare o leggere la netiquette dei NG...
:-D
ecco il codicillo della routine (quella che fa il record di sonnolenza)!!!
.......... in una funzione dove assemblo la mia query dopo aver controllato
e selezionato dei parametri...........
Set recArticoli = NomeDB.OpenRecordset(sqlStringa, dbOpenDynaset)
'richiamo il caricamento della msfg
ShowArticleDetail
.................................
Private Sub ShowArticleDetail()
' visualizza l'elenco articoli
Dim indArticoli As Integer
On Error GoTo ErrorMessage
MSFGAttivoMagazzino.Rows = 1
With recArticoli
  If .RecordCount > 0 Then
     .MoveLast
     .MoveFirst
     For indArticoli = 1 To .RecordCount
        MSFGAttivoMagazzino.AddItem (indArticoli & vbTab &
.Fields("Art_Codice") & vbTab & _
         .Fields("Art_Autore") & vbTab & _
         .Fields("Art_Titolo") & vbTab & _
         .Fields("Art_Descrizione") & vbTab & _
         .Fields("Art_Categoria") & vbTab & _
         .Fields("Art_Quantita") & vbTab & _
         FormatNumber(.Fields("Art_Prezzoeuro"), 2) & vbTab & _
         IIf(.Fields("Art_Garanzia") = 0, "N0", "SI") & vbTab & _
         .Fields("Art_DataAcquisizione") & vbTab & _
         .Fields("Art_ricarico") & vbTab & _
         .Fields("Art_Note") & vbTab & _
         .Fields("idcliente") & vbTab & _
         .Fields("IDArticoli"))
     .MoveNext
     Next indArticoli
  End If
End With
Exit Sub
ErrorMessage:
'Gestione degli errori
   ErroreCompleto = "Inventario Magazzino: ShowArticleDetail-
visualizzazione dettaglio articoli"
   ScriviMessaggiErrore ErroreCompleto, Err.Number, Err.Description,
Err.Source
   MsgBox ErroreCompleto, vbOKOnly + vbCritical, "Rilevato errore run-time"
   Resume Next
End Sub

Thunderbolt ha scritto:

Inanzitutto non usare For indArticoli = 1 to .RecordCount ... Next
ma usa Do Until .EOF ... Loop
Poi prima di iniziare il ciclo fai
MSFGAttivoMagazzibo.Redraw = False
per poi rimetterlo a True dopo la fine del ciclo
-- 
Samuele Battarra
prova il mio newsreader:
http://news-navigator.sourceforge.net

 per poi rimetterlo a True dopo la fine del ciclo
perfetto, io poi aggiungerei di provare (perche' non so le diversita' di
performance) a passare da AddItem ad TextMatrix
ripeto, fallo solo per provare, va a finire che ci mette anche d+ ! Ma
provare non fa male ^_-


[cut]
ringrazio tutti dei suggerimenti
Emanuele
Ciao