Newsgroup: it.comp.appl.access
Titolo: Aiutino Barra di progressione

ps. Annullo e riformulo post precedente
---------------------------------------
Ho una maschera "fr_CaricaFile" sulla quale c' un pulsante "cmdCaricaFile"
che esegue il codice riportato sotto.
tale codice fa questo:
1)Legge il contenuto della cartella "MiaCartella"
2)Crea una tabella temporanea in access, chiamata "tb_temp"
3)Inserisce il nome file e il suo percorso (di ciascun file contenuto
nella 
  cartella "MiaCartella") nei rispettivi campi:
  "NomeFile" e "path" della tabella "tb_temp"
Fino qui tutto ok 
Poi sotto tale pulsante ho inserito:
- un OCX, cio� la Barra di Progressione chiamata "BarraProgressione"
- una casella di testo non associata "NrElementi"
  (che dovrebbe contare progressivamente i file inseriti nella tabella)
Poiche non ho mai usato le ProgressBar potete dirmi come modificare il
codice qui sotto affinch� l'avanzamento della Barra di progressione che
del valore numerico "NrElementi" sia reale?
GRAZIEEE
----------------------------------------------------------------------------
Private Sub elencafile_Click()
   Dim j As String
   Dim d As String
   Dim t As TableDef
   Dim r As Recordset
   Dim s As String
 
   d = "C:CreaTabellaContenutoDirectoryMiaCartella"
   j = "*.*"
 
   If Right(d, 1) <> "" Then d = d & ""
   s = "tb_temp" 'imposto il nome della tabella da creare
 
   Set t = CurrentDb.CreateTableDef(s)
   t.Fields.Append t.CreateField("NomeFile", dbText) 'Crea campo
"NomeFile" nella tabella
   t.Fields.Append t.CreateField("Path", dbText) 'Crea campo "Path" nella
tabella
   CurrentDb.TableDefs.Append t
 
   Set r = CurrentDb.OpenRecordset(s, dbOpenTable)
   s = Dir(d & j)
   With r
      Do While s <> "" ' cicla per ogni file nella directory
         .AddNew
         !NomeFile = s 'Campo tabella con il nome dei file
          !Path = d & s 'Campo tabella con il percorso dei file
         s = Dir
         .Update
      Loop
   End With
 
 MsgBox "ELABORAZIONE TERMINATA" & Chr(13) & "LA TABELLA TEMP E' STATA
CREATA !"
 
End Sub
----------------------------------------------------------------------------
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ----------------------------------------------------------------------------
OK trovato con un po di buona volontà ho fatto cosi:
Private Sub elencafile_Click()
   Dim j As String
   Dim d As String
   Dim t As TableDef
   Dim r As Recordset
   Dim s As String
   Dim intCount As Integer
   Dim NumeroFile As Long
   Dim PercorsoMiaCartella As String
   Dim k As String
'Calcolo il numero di file nella cartella "MiaCartella"
    PercorsoMiaCartella = "C:CreaTabellaContenutoDirectoryMiaCartella*.*"
    NumeroFile = 0
    k = Dir(PercorsoMiaCartella)
Do Until k = ""
    NumeroFile = NumeroFile + 1
    k = Dir
Loop
 
 
'imposto la mia cartella
   d = "E:MIMMOGuide&Tutorial_Informatica_UTILITYAccess
docCreaTabellaContenutoDirectoryMiaCartella"
   j = "*.*"
 
   intCount = 1
   iCnt = Dir(d)
 
   If Right(d, 1) <> "" Then d = d & ""
   s = "tb_temp" 'imposto il nome della tabella da creare
 
   Set t = CurrentDb.CreateTableDef(s)
   t.Fields.Append t.CreateField("NomeFile", dbText) 'Crea campo
"NomeFile" nella tabella
   t.Fields.Append t.CreateField("Path", dbText) 'Crea campo "Path" nella
tabella
   CurrentDb.TableDefs.Append t
 
   Set r = CurrentDb.OpenRecordset(s, dbOpenTable)
   s = Dir(d & j)
   With r
      Do While s <> "" ' cicla per ogni file nella directory
 
         .AddNew
         !NomeFile = s 'Campo tabella con il nome dei file
          !Path = d & s 'Campo tabella con il percorso dei file
         s = Dir
         'Visualizzo i file che uno per volta importo nella "tb_temp"
         Me.FileCartella = s
         .Update
 
 
        Me.BarraProgressione.Value = 100 * (intCount / NumeroFile)
        Me.NrElementiPerc = Format(100 * (intCount / NumeroFile), "0") &
"%"
 
            Me.NrElementi = "Nr. " & intCount & " file caricati"
            Me.Repaint
        intCount = intCount + 1
 
      Loop
   End With
   MsgBox "ELABORAZIONE TERMINATA" & Chr(13) & "LA TABELLA TEMP E' STATA
CREATA !"
----------------------------------------------------------------------------
dove "NrElementi" e "NrElementiPerc" sono due caselle di testo che
indicano rispettivamente:
NrElementi --> la progressione numerica dei file importati nella tb_temp
NrElementiPerc --> la progressione % dei file importati nella tb_temp
------------------------------------------------------------------------
PS. ho provato a bloccare il codice dopo che premo il tasto "elencafile"
mediante i tasti Ctrl+Interr/Pausa e mi son fatto due conti semplici,  sia
il valore percentuale di avanzamento quindi anche la barra di progressione
grafica, che il valore progressivo numerico sono attendibili.
Spero possa essere d'aiuto ad altri con la stessa o simile esigenza
ciauuuuuuuu


    CurrentDb.TableDefs.Append t











--------RETTIFICO-------------------------------------------------
OK trovato con un po di buona volontà ho fatto cosi:
Private Sub elencafile_Click()
Dim j As String
Dim d As String
Dim t As TableDef
Dim r As Recordset
Dim s As String
Dim intCount As Integer
Dim NumeroFile As Long
Dim PercorsoMiaCartella As String
Dim k As String
'Calcolo il numero di file nella cartella "MiaCartella"
PercorsoMiaCartella = "C:CreaTabellaContenutoDirectoryMiaCartella*.*"
NumeroFile = 0
k = Dir(PercorsoMiaCartella)
Do Until k = ""
NumeroFile = NumeroFile + 1
k = Dir
Loop
'imposto la mia cartella
d = "C:CreaTabellaContenutoDirectoryMiaCartella"
j = "*.*"
intCount = 1
iCnt = Dir(d)
If Right(d, 1) <> "" Then d = d & ""
s = "tb_temp" 'imposto il nome della tabella da creare
Set t = CurrentDb.CreateTableDef(s)
t.Fields.Append t.CreateField("NomeFile", dbText) 'Crea campo
"NomeFile" nella tabella
t.Fields.Append t.CreateField("Path", dbText) 'Crea campo "Path" nella
tabella
CurrentDb.TableDefs.Append t
Set r = CurrentDb.OpenRecordset(s, dbOpenTable)
s = Dir(d & j)
With r
Do While s <> "" ' cicla per ogni file nella directory
AddNew
!NomeFile = s 'Campo tabella con il nome dei file
!Path = d & s 'Campo tabella con il percorso dei file
s = Dir
'Visualizzo i file che uno per volta importo nella "tb_temp"
Me.FileCartella = s
Update
Me.BarraProgressione.Value = 100 * (intCount / NumeroFile)
Me.NrElementiPerc = Format(100 * (intCount / NumeroFile), "0") &
"%"
Me.NrElementi = "Nr. " & intCount & " file caricati"
Me.Repaint
intCount = intCount + 1
Loop
End With
MsgBox "ELABORAZIONE TERMINATA" & Chr(13) & "LA TABELLA TEMP E' STATA
CREATA !"
----------------------------------------------------------------------------
dove "NrElementi" e "NrElementiPerc" sono due caselle di testo che
indicano rispettivamente:
NrElementi --> la progressione numerica dei file importati nella tb_temp
NrElementiPerc --> la progressione % dei file importati nella tb_temp
------------------------------------------------------------------------


Serviva un OCX per fare una Barra di progressione...?
Ti porti dietro 500Kb di roba con l'obbligo di distribuirla, sempre tu
abbia la licenza per farlo... solo per vedere una barra...?
Se usavi una Label conun controllo Rettangolo ed incrementavi la
larghezza della Label percentualizzando... era una cosa così
brutta....?
      Me.rectProgressBar.Width = (TotalWidth / intCount ) * NumeroFile
Io sono un pò allergico agli OCX e sono di parte, ma se servono posso
capirlo... quando non servono...
Questa è la stessa Progressbar del tuo OCX senza usare l'OCX ma
andando direttamente sulla DLL di Windows...
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=41
Questa è una raffinatezza che feci quando avevo voglia di giocare...:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=289
http://www.sitocomune.com/
3.76 Creare e gestire una barra di progressione senza necessità di OCX
o API
Insomma ne avevi di opzioni....
@Alex

 @Alex
Ciao ale grazie come sempre sei il migliore, tuttavia volevo chiederti una
cosa:
io ho messo sulla form un controllo rettangolo con sfondo trasparente  e
poi una label di colore sfondo verde e come codice che fa aumentare la
larghezza della label il codice che mi hai inndicato:
Me.rectProgressBar.Width = (TotalWidth / intCount ) * NumeroFile
il problema è che invece di aumntare di larghezza la label si riduce, come
posso aggiustarlo?



Al posto di TotalWidth usa la larghezza del controllo Rettangolo come
proporzione al 100%...
Riassumiamo...
Controllo Rettangolo con sfondo Trasparente e bordo incassato.
All'interno disegni una label con caption "..." dei puntini... oppure
"0%"
Ora dimensioni la label Larghezza=0 e posizione X/Y uguale a quelle
del RETTANGOLO.
Fai attenzione che se imposti prima la Larghezza poi devi andare dalla
maschera proprietà a selezionare la Label altrimenti non la becchi...
A questo punto hai la Label che rappresenza lo ZERO ed il RETTANGOLO
che rappresenta il 100%.
Quindi l'equazione sarà:
TotaleRecords:Rect.Width=RecAttuale:Label.Width
la percentualizzazione della Caption invece
rect.Width:100=Label.Width:X
da cui :
Me.Label.Width= NumeRecAttuale x (Rettangolo.Width/TotaleRecords)
Me.Label.Caption=Cstr((Me.Label.Width x 100)/Rettangolo.Width) & " % "
A meno di castronerie banali...
Ciao
@Alex

 @Alex
Allora Ale ho modificato il tuo codice cosi:
ho inserito una nuova etichetta chiamata: "ProgressPerc" e lo posizionata
nel rettangolo ca cui caption iniziale � "0%"
e poi il codice che ho modificato  recita cosi:
**************************************************************************
Me.rectProgressBar.Width = intCount * (BaseProgressBar.Width / NumeroFile)
Me.ProgressPerc.Caption = Format(((Me.rectProgressBar.Width /
BaseProgressBar.Width) * 100), "0") & " % "
**************************************************************************
ora funziona bene
grazieee Ale sei sempre il numero 1
