Newsgroup: it.comp.appl.access
Titolo: progress bar e qualche altra domanda

Salve a tutti.
Seguendo le istruzioni per l'uso gentilmente fornite da Federico Luciani,
dico in premessa che uso A/97 su W95 (uff)e/o W/98 (casa).
Il Pc a mia disposizione è un PII a 35o Mhz 128Mb ram.
Cio' premesso vengo subito ai quesiti:
a) dal sito comune ho scaricato l'applicazione esempio barra, purtroppo non
ho capito come si fa per inserire una progress bar in una applicazione (ad
esempio faccio eseguire da codice l'aggiornamento di una tabella e per tale
operazione access impiega alcuni minuti  - talvolta anche 10 - la progress
bar mi aiuterebbe a capire a che punto siamo)
b) in una tabella ho un campo "data" purtoppo in formato testo lunghezza 6 e
la data è scritta nel formato ggmmaa (es. 250499) c'è un modo per convertire
questa stringa in formato data? Ho pensato ad usare funzioni del tipo left$,
right$ e mid$ per l'estrazione delle singolle componenti della data, ma poi
non ho alcuna idea di come ricomporre il tutto nel formato data (gg/mm/aa).

 non ho alcuna idea di come ricomporre il tutto nel formato data (gg/mm/aa).
strData = "250499"
g = mid(strData,1,2)
m = mid(strData,3,2)
a = mid(strData,5,2)
rst![campoData] = format(DateSerial(a, m, g), "dd/mm/yyyy")
naturalmente puoi usare anche altre funzioni.
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------






__
E se volessi incrementarla mentre importo o esporto tabelle con
DoCmd.TransferDatabase?
Oppure durante operazioni con comandi di tipo FileCopy?
ciao e grazie
Riccardo

 Antonio
Per favore rispondi dopo dopo la parte quotata. GRazie
se il formato e' cosi' "20200", cioe' "gmmaa", potresti aggiungere un controllo
sulla lunghezza della stringa e aggiungere uno zero iniziale.
.....
strData = rst![campoDataVecchia]
if len(strData) = 5 then strData = "0" & strData
g = mid(strData,1,2)
m = mid(strData,3,2)
a = mid(strData,5,2)
rst![campoDataNuova] = format(DateSerial(a, m, g), "dd/mm/yyyy")
...
riguardo all'errore, mi mancano informazioni per poterti dire qualcosa, magari
posta il codice che hai scritto e dimmi dove viene generato l'errore.


 >

Non puoi.
Per copiare un file dovresti utilizzare altri sistemi, ad. esempio copiare il
file un pezzo alla volta, ma mi chiedo se ne vale la pena.


 --------------------------------------
Intanto ti ringrazio per l'attenzione che mi dedichi, e sono convinto che
questa comunità, attraverso l'elevata comptenza dei sostenitori, sia il più
qualificato degli approcci al mondo di access.
ebbene, a proposito della progress bar ti indico di seguito il codice usato:
Function troncamento()
dim archivi as database
dim tabe as recordset
dimragcod as string
dim filiale as string
dim testo_Sys as string
dim contarecord as double
set archivi =dbengine.workspaces(0).databases(0)
set tabe=archivi.openreccordset ("nometabella", dbopenTable)
tabe.movelast
contarecord=tabe.recordcount
testo_sys=syscmd(acsyscmfInitMeter, "affiornamento ragcod in corso,
attendere prego...", contarecord)
tabe.movefirst
do while not tabe.eof
tabe .edit.
tabe.("ragcod")=left$(tabe("filiale"),2)
tabe.update
tabe.movenext
loop
contarecord=1
do until tabe.eof
contarecord=contarecord+1
testo_Sys(syscmd(acsyscmdupdatemeter.contarecord)
loop
tabe.close
msgbox" aggiornamento ragcod completato"
testo_Sys=syscmd(acsyscmdclearstatus)
end fubction
la funzione viene attivata con comando call da un ottone in una form.
Se dal codice così scritto tolgo qualsiasi stringa relativa alla progress
bar, compatibilmente con la dimensione del dbase, l'aggiornamento viene
eseguit tra i 2 e i sette nibuti (min 250000 max 850000 record).
Ma se il codice viene attivato così come scritto (quindi con tutte le
stringhe relative alla progress bar) dopo pochi secondi Access si blocca
(errore MicrosoftAcce (Bloccato)).
Puoi darci uno sguardo e dirmi per favore dove è sbagliato?
grazie ancora.
Ciao e a presto
Antonio


Praticamente ti bloccavi nel secondo loop che non serviva a niente, perché
l'aggiornamento dell'indicatore andava messo nel primo ciclo, e da cui non
uscivi + perché non ti muovevi tra i record e quindi non arrivavi mai al
eof.
Comunque controlla che non abbia scritto delle sciocchezze.
Ciao
--
Silvio
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access

 ha scritto nel messaggio

Che fai, mi rubi le risposte ;-)
aggiungo solo che la variabile testo_Sys andrebbe dichiarata Variant,
inoltre, per le costanti usate in SysCmd, ti consiglio di usare queste:
AcSysCmdInitMeter
AcSysCmdUpdateMeter
AcSysCmdRemoveMeter
quelle usate da Silvio, credo siano di access 2, funzionano lo stesso, ma non
si sa mai per il futuro!


 si sa mai per il futuro!
Hai ragione Federico, si tratta proprio di un retaggio difficile a morire,
anche perché, finché funzionano, non ne senti il bisogno di cambiarle nella
tua testa.
Grazie.


 Per adesso infinite grazie, proverò il codice durante il weekend e sono
certo. Nel caso se non mi mandate a quel paese chiederò ulteriori lumi.
Buon fine settimana a tutti.
Antonio


Rieccomi di nuovo a chiedere la cortesia di un vostro controllo
come indicato ho scritto il seguente codice
Function troncamento()
' questa funzione provvede ad aggiornare il campo ragcod
' dal campo filiale di cui restituisce le prime due cifre
Dim archivi As Database
Dim tabe As Recordset
Dim ragcod As String
Dim filiale As String
Dim Testo_Sys As Variant
Dim contarecord As Double
Dim maxrecord As Double
DoEvents
Set archivi = DBEngine.Workspaces(0).Databases(0)
Set tabe = archivi.OpenRecordset("backup1", dbOpenTable)
tabe.MoveLast
maxrecord = tabe.RecordCount
Testo_Sys = SysCmd(acSysCmdInitMeter, "aggiornamento ragcod in corso...",
maxrecord)
contarecord = 1
Testo_Sys = SysCmd(acSysCmdInitMeter, "attendere prego...", contarecord)
tabe.MoveFirst
Do While Not tabe.EOF
tabe.Edit
tabe("ragcod") = Left$(tabe("filiale"), 2)
tabe.Update
tabe.MoveNext
Testo_Sys = SysCmd(acSysCmdUpdateMeter, contarecord)
contarecord = contarecord + 1
Loop
tabe.Close
MsgBox "aggiornamento ragcod completato"
Testo_Sys = SysCmd(acSysCmdRemoveMeter)
End Function
ma ahime' non appena lanciato Acc si blocca e non appare alcuna barra di
progressione nè alcuno dei warning indicati nella variabile Testo_Sys
Vi dispiace ricontrollare se per caso ho trascritto male o male interpretato
qualche riga?
infinite grazie
Antonio

 Antonio
per il resto la funzione e' ok.
il problema e' da ricercare altrove.


 > >[cut]
tutto perfetto, grazie, forse si era "impicciato" il dbase sul quakle stavo
lavorando. Ne ho fatto una copia e tutto è andato a meraviglia.
ancora grazie
Antonio