Newsgroup: it.comp.appl.access
Titolo: utilizzo moduli

Ciao scusate se sono ancora qua a rompere......ma sto realizzando il
mio primo database e incontro mille difficoltà.... il problema che ho
questa volta è il seguente:
Ho creato una tabella con due campi Espr1 ed Espr2....Espr1 è la somma
di valori contenuti in altre tabelle e sono espressi  secondi,millesimi
ora nella colonna Espr2, tramite la "funzione" StringaTempo, contenuta
nel modulo che è ho inserito ne DB (il modulo non l'ho creato io in
quanto non conosco VB!!!) dovrei convertire il valore Espr1 nel formato
hh.mm.ss.dcm (ore.minuti.secondi,millesimi)......Ho provato con una
query utilizzando l'espressione Espr2: StringaTempo ([Espr1]) ma non
funziona, quando vado asd eseguire la qurey mi da "errore di
compilazione nell'espressione della query StringaTempo ([Espr1])"
Qualcuno mi sa dare qualche consiglio?

 ha scritto nel messaggio 
news:1159550128.4...@k70g2000cwa.googlegroups.com...
Ciao scusate se sono ancora qua a rompere......ma sto realizzando il
mio primo database e incontro mille difficoltà.... il problema che ho
questa volta è il seguente:
Ho creato una tabella con due campi Espr1 ed Espr2....Espr1 è la somma
di valori contenuti in altre tabelle e sono espressi  secondi,millesimi
ora nella colonna Espr2, tramite la "funzione" StringaTempo, contenuta
Se magari ci copi la funzione e un pò esempi di valori da convertire, forse possiamo aiutarti.
Michele

 Michele
Questo è il codice della funzione:
Function StringaTempo(secondidcm As Double) As String
' converte un numero che rappresenta secondi,decimicentesimimillesimi
' in una stringa 
hh.mm
'ss"dcm
Timing.secondi = secondidcm
StringaTempo = Timing.TimeString_12
End Functio
un valore si esempoi potrebbe essere 75.456 che una volta convertito
deve essere 00.01'15"456

ant...@virgilio.it
 ha scritto:

C'è qualche cosa che non hai capito...!
Quel codice, pare utilizzi una proprietà di un'oggetto Timing che non
ci hai esposto...!
Sarà magari una Classe...???
Quella Funzione così non fà nulla se non restituire un errore cerca
di vedere dove viene istanziata
la classe Timing e cosa c'è dentro...!
@Alex

 ha scritto nel messaggio 
news:1159551250.2...@k70g2000cwa.googlegroups.com...




Dunque, provando su un mio modulo, vedo che timing è una variabile non definita. Probabilmente ti 
sei dimenticato di inserire un modulo di classe (per esempio ClsTiming, un nome a caso), che fa 
funzionare i calcoli, e di dichiarare una variabile a livello di modulo appena sotto a "option 
compare database" con il seguente testo:
Dim Timing As New ClsTiming
Prova a vedere se hai tutti i pezzi e casomai riscrivi
Michele

 Michele
Scusate pensavo fosse sufficente quel codice....vi copio tutto il
codice del modulo qui di seguito....
Option Compare Database
Option Explicit
Public Declare Function GetTickCount Lib "Kernel32.dll" () As Long
Dim Timing As New Timing
Function secondi(hhmmssdcm As String) As Double
' converte una stringa hhmmssdcm o 
hh.mm
'ss"dcm in un numero che
' rappresenta secondi,decimicentesimimillesimi
If IsNull(hhmmssdcm) Or hhmmssdcm <= "" Then
    hhmmssdcm = "000000000"
End If
If Len(hhmmssdcm) > 9 Then
    Timing.TimeString_12 = hhmmssdcm
Else
    Timing.TimeString_9 = hhmmssdcm
End If
secondi = Timing.secondi
End Function
Function Centesimi(hhmmssdcm As String) As Double
' converte una stringa 
hh.mm
'ss"dcm in un numero che
' rappresenta centesimi di secondo
Timing.TimeString_12 = hhmmssdcm
Centesimi = Timing.secondi * 100
End Function
Function StringaTempo(secondidcm As Double) As String
' converte un numero che rappresenta secondi,decimicentesimimillesimi
' in una stringa 
hh.mm
'ss"dcm
Timing.secondi = secondidcm
StringaTempo = Timing.TimeString_12
End Function
Function FormatTempo(oreminsecdcm As Double) As String
' converte un numero che rappresenta hhmmssdcm in
'                                    
hh.mm
'ss"dcm
Timing.TimeString_9 = oreminsecdcm
FormatTempo = Timing.TimeString_12
End Function
Function FormatTempoDec(oreminsec As String) As String
' converte una stringa che rappresenta hhmmss,dcm in
'                                    
hh.mm
'ss"dcm
If IsNull(oreminsec) Or oreminsec = "" Then
    FormatTempoDec = String(12, " ")
    GoTo exit_FormatTempoDec
End If
If Len(oreminsec) = 12 Then
    FormatTempoDec = oreminsec
    GoTo exit_FormatTempoDec
End If
Do While InStr(1, oreminsec, ".") <> 0
    Mid(oreminsec, InStr(1, oreminsec, "."), 1) = ","
Loop
FormatTempoDec = FormatTempo(CDbl(oreminsec) * 1000)
exit_FormatTempoDec:
End Function
Function FormatTempoMaster(oreminsecdcm As String) As String
' converte un numero che rappresenta 
hh.mm
'ss"dcm in
'                                    hhmmssdcm
'     oreminsecdcm = oreminsecdcm * 1000
Timing.TimeString_12 = oreminsecdcm
FormatTempoMaster = Timing.TimeString_9
End Function
Function VelMedia(secondidcm As Double, kilometri As Double) As Double
' Calcola la media su un percorso espresso in Kilometri
' con un tempo espresso in secondi,dcm
    If secondidcm > 0 Then
        VelMedia = (((kilometri) / (secondidcm / 3600)) * 1000 \ 1) /
1000
    Else
        VelMedia = 0
    End If
End Function
Function Distanza(secondidcm As Double, Velocita As Double) As Double
' Calcola una distanza
    If secondidcm > 0 Then
        Distanza = (Velocita * (secondidcm / 3600)) * 1000
    Else
        Distanza = 0
    End If
End Function
Function TempoMedia(Media As Double, kilometri As Double) As String
    TempoMedia = Mid(StringaTempo((kilometri / Media) * 3600), 1, 11) &
"0"
End Function
Function StringaTempoPulita(StringaTempo As String) As String
Dim i As Integer
StringaTempoPulita = StringaTempo
' elimina gli zeri non significativi da una stringa
'                     
hh.mm
'ss"dcm
For i = 1 To 7 '    no Len(StringaTempoPulita) per lasciare almeno
secondi e frazioni
    If InStr(i, StringaTempo, "0") = i Then
        Mid(StringaTempoPulita, i, 1) = " "
        Select Case i
            Case 2, 5, 8
                Mid(StringaTempoPulita, i + 1, 1) = " "
                i = i + 1
'            Case 8
'                Mid(StringaTempoPulita, i + 1, 2) = "  "
'                i = i + 2
            Case Else
        End Select
    Else
        Exit For
    End If
Next i
End Function
Public Function Coll(stringa As String, Separator As String) As
Collection
' restituisce da una stringa con separatore di campo
' <,> tutti i campi
Set Coll = New Collection
While InStr(1, stringa, Separator) > 1
    Coll.Add (Mid(stringa, 1, InStr(1, stringa, Separator) - 1))
    stringa = Mid(stringa, InStr(1, stringa, Separator) + 1)
Wend
If stringa > "" Then
    Coll.Add (stringa)
    stringa = ""
End If
End Function
Public Function FirstString(stringa As String, posizione As Integer) As
String
Dim i As Integer
Dim mintInizio As Integer
Dim mintFine As Integer
' restituisce la sottostringa di una stringa con i
' campi compresi fra <.....><.....><.....>
'     posizione         1      2      3
If InStr(1, stringa, "<") = 0 Then
    stringa = "<" & stringa
End If
If InStr(1, stringa, ">") = 0 Then
    stringa = stringa & ">"
End If
mintInizio = 0
mintFine = 0
For i = 1 To posizione
    mintInizio = InStr(mintInizio + 1, stringa, "<")
    mintFine = InStr(mintInizio + 1, stringa, ">")
Next i
FirstString = Mid(stringa, mintInizio + 1, mintFine - mintInizio - 1)
End Function

ant...@virgilio.it
 ha scritto:

LA CLASSE TIMING DEVI VEDERE...:!!!!!!!!! questo è solo un Modulo che
istanzia nella 3° riga la classe e poi la usa...!
@Alex

 sei dimenticato di inserire un modulo di classe (per esempio ClsTiming, un nome a caso), che fa
Option Compare Database
Option Explicit
End Function
Ti manca sempre il modulo di classe Timing.
Scrivendo "as new Timing" mi vien da pensare che assieme al modulo da dove tu copi sto codice, ci 
debba essere un modulo di classe (che ha il simbolo diverso) che si chiama Timing. Lo hai?

 > Michele
Alex, dove scrivo io scrivi anche tu...... Abbiamo il filo invisibile che ci collega!
Saluti
Michele 

 ha scritto nel messaggio 
news:1159550128.4...@k70g2000cwa.googlegroups.com...

Secondo me, invece di utilizzare una miriade di funzioni e classi, se la tua esigenza è convertire 
semplicemente come da esempio, usa questa funzione, che si chiama Sec_to_Sess, accetta in ingresso 
currency e restituisce stringa (Currency mi sembra più corretto per memorizzare tempi a virgola 
fissa)
-----------------------------------------------------------
Function Sec_to_Sess(SecondsIn As Currency) As String
Dim Ore As Long
Dim Min As Long
Dim Sec As Long
Dim Mill As Integer
Dim OreStr As String
Dim MinStr As String
Dim SecStr As String
Dim MillStr As String
SecondsIn = Int(SecondsIn * 1000) / 1000
Ore = Int(SecondsIn / 3600)
Min = Int(SecondsIn / 60) - Ore * 60
Sec = Int(SecondsIn) - Ore * 3600 - Min * 60
Mill = (SecondsIn - Ore * 3600 - Min * 60 - Sec) * 1000
OreStr = Trim(Str(Ore))
MinStr = Trim(Str(Min))
SecStr = Trim(Str(Sec))
MillStr = Trim(Str(Mill))
If Not Len(OreStr) > 1 Then
    OreStr = "0" & OreStr
End If
If Not Len(MinStr) > 1 Then
    MinStr = "0" & MinStr
End If
If Not Len(SecStr) > 1 Then
    SecStr = "0" & SecStr
End If
Do While Not Len(MillStr) = 3
    MillStr = "0" & MillStr
Loop
Sec_to_Sess = OreStr & "." & MinStr & "'" & SecStr & """" & MillStr
End Function
------------------------------------------
Fai un pò di prove per la correttezza dei calcoli, ma dovrebbe essere corretta.
Non puoi utilizzare tempi negativi, il decimillesimo viene troncato, e la conversione si ferma 
all'ora nel senso che 86400 in input mi restituisce 24.00'00"000 e non 1gg00.00'00"000
Fammi sapere
Michele

 Michele
Grazie mille....funziona perfettamente....l'unica cosa se è possibile
eliminare gli zeri...(es. 1'15"132 anzichè 00.01'15"132)
P.S. proseguendo con l'apprendimento di access ho notato diversi limiti
aggirabili con VB, che purtroppo non conosco....avete qualche guida da
consigliarmi per apprenderne almeno le basi?
Grazie

 Michele
Grazie mille....funziona perfettamente....l'unica cosa se č possibile
eliminare gli zeri...(es. 1'15"132 anzichč 00.01'15"132)
P.S. proseguendo con l'apprendimento di access ho notato diversi limiti
aggirabili con VB, che purtroppo non conosco....avete qualche guida da
consigliarmi per apprenderne almeno le basi?
Grazie
Per eliminare gli zeri usala cosě, ma non č un gran risultato estetico....
-----------------------------------------
Function Sec_to_Sess(SecondsIn As Currency) As String
Dim Ore As Long
Dim Min As Long
Dim Sec As Long
Dim Mill As Integer
Dim OreStr As String
Dim MinStr As String
Dim SecStr As String
Dim MillStr As String
SecondsIn = Int(SecondsIn * 1000) / 1000
Ore = Int(SecondsIn / 3600)
Min = Int(SecondsIn / 60) - Ore * 60
Sec = Int(SecondsIn) - Ore * 3600 - Min * 60
Mill = (SecondsIn - Ore * 3600 - Min * 60 - Sec) * 1000
If Ore = 0 Then
   OreStr = ""
Else
   OreStr = Trim(Str(Ore)) & "."
End If
If Min = 0 And Ore = 0 Then
   MinStr = ""
Else
   MinStr = Trim(Str(Min)) & "'"
End If
SecStr = Trim(Str(Sec)) & """"
If Mill = 0 Then
   MillStr = ""
Else
    MillStr = Trim(Str(Mill))
    Do While Not Len(MillStr) = 3
       MillStr = "0" & MillStr
    Loop
End If
Sec_to_Sess = OreStr & MinStr & SecStr & MillStr
End Function
------------------------------------------------------
Ricordati che la devi sempre provare.
Per quel che riguarda il testo da leggere, oltre ad una scarrellata sul Sito Comune, io posso 
consigliarti, per mia personale esperienza, il manuale della Apogeo
"Costruire applicazioni con Access versioni 2000/2002/2003" di Mike Davis ISBN 88-503-2328-x, ma 
forse non č piů in stampa. E' un pň un mattone, ma al caro Mike devo moltissimo di quel che sň.