Ciao a tutti,
premetto che è la prima volta che scrivo su questo forum, spero di trovare l'aiuto che sto cercando visto e considerato che come cercavo cadevo sempre su conversazioni di html.it

In breve, è la primissima volta che uso VB quindi ho dovuto arrangiarmi parecchio per realizzare un programma che collega al computer tramite porta COM un lettore di badge,

vi spiego in breve come funziona:

una volta passata una tessera si rileva il codice dell'utente possessore della tessera
(se non presente in db si presenta la scheda di aggiunta di un nuovo utente)

quindi si presenta la scelta del mezzo da prelevare digitando un numero su tastierino numerico
(la ricezione dei caratteri è inizialmente disattivata ma poi attivata solo se l'utente della tessera è riconosciuto, per poi essere ridisattivata dopo la pressione)

una volta premuto il tasto corrispondente al mezzo si fa aprire una serratura e si aggiorna il db con i dati e gli orari
( attivando un relè presente sul lettore badge)

quando questo utente sarà ritornato dal suo viaggio e passerà la tessera nel lettore si dovrà aggiornare il database mettendo che il mezzo è nuovamente disponibile e gli orari e la data di ritorno

Il Problema, questo benedettissimo relè mi funziona soltanto quando chiamo la funzione dentro la funzione aggiungiPartenza, se invece la richiamo dentro aggiungiRitorno mi restituisce errore.... ho provato a collegare a un bottone la funzione apriSerratura e funziona sempre!
Non sò più dove battere la testa!!

Ho inserito di seguito il codice delle funzioni apriSerratura, aggiungiPartenza, aggiungiRitorno... se servissero altre funzioni o parti di queste ditemelo pure che le posto senza problemi!


codice:
Function apriSerratura()

'MsgBox ("confermare")
' per aprire il relè va dato doppio perchè "bistabile"...
MSComm1.Output = "*/R21"
Sleep 1000
MSComm1.Output = "*/R21"

End Function

Function aggiungiPartenza(mezzo As String)
    
   Dim dataOra As Date
   Dim orarioOra As Date
   orarioOra = TimeValue(Now)
   dataOra = DateValue(Now)
    
   stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
   stringa = stringa & "E:............Database.mdb"

    Set connessione = New adodb.Connection
    Set recordset = New adodb.recordset

    connessione.Open stringa
    recordset.Open "viaggi", connessione, 3, 3

    recordset.AddNew
         recordset("codice") = codice.Text
         recordset("mezzo") = mezzo
         recordset("dataPartenza") = dataOra
         recordset("orarioPartenza") = orarioOra
         recordset("dataRitorno") = "no"
         recordset("orarioRitorno") = "no"
         
    recordset.Update


' ora si prova a updare i vari campi

'update del personale
    Set recordset2 = New adodb.recordset
    
    recordset2.Open "SELECT * FROM personale WHERE codice = '" & codice.Text & "'", connessione, 3, 3
    Do Until recordset2.EOF
      recordset2!fuori = "si"
      recordset2.Update
      recordset2.MoveNext
    Loop
    recordset2.Close


'update dei mezzi
    Set recordset3 = New adodb.recordset
    
    recordset3.Open "SELECT * FROM mezzi WHERE idMezzo = '" & mezzo & "'", connessione, 3, 3
    Do Until recordset3.EOF
      recordset3!fuori = "si"
      recordset3.Update
      recordset3.MoveNext
    Loop
    recordset3.Close
    
    Dim nomeUtente As String
    nomeUtente = Replace$(titolo.Caption, "Ciao ", "")
    Sleep 3000
    'MsgBox (nomeUtente & " stai partendo con:" & mezzo & " il " & dataOra & " alle " & orarioOra)

    Call resetta
    
    Set connessione = Nothing
    Set recordset = Nothing
    Set recordset2 = Nothing
    Set recordset3 = Nothing
    
    Call apriSerratura

 
End Function

Function aggiungiRitorno()

   Dim dataOra As Date
   Dim orarioOra As Date
   Dim mezzo As String
   orarioOra = TimeValue(Now)
   dataOra = DateValue(Now)
    
   stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
   stringa = stringa & "E:............Database.mdb"

    
    Set connessione = New adodb.Connection
    Set recordset = New adodb.recordset
    
' mi prendo il viaggio di questo personale che è tornato e vedo che mezzo è, poi aggiorno il mezzo
    connessione.Open stringa
    recordset.Open "SELECT * FROM viaggi WHERE codice = '" & codice.Text & "' AND dataRitorno = 'no' ", connessione, 3, 3
    Do Until recordset.EOF
      mezzo = recordset("mezzo")
      ' mezzo lo prendo e gli altri due li aggiorno
      recordset!dataRitorno = dataOra
      recordset!orarioRitorno = orarioOra
      recordset.MoveNext
    Loop
    recordset.Close
    
' aggiorno il mezzo dicendo che è rientrato
    Set recordset4 = New adodb.recordset
    recordset4.Open "SELECT * FROM mezzi WHERE idMezzo = '" & mezzo & "'", connessione, 3, 3
    Do Until recordset4.EOF
      recordset4!fuori = "no"
      recordset4.MoveNext
    Loop
    recordset4.Close
    
' aggiorno il personale dicendo che è rientrato
    Set recordset3 = New adodb.recordset
    recordset3.Open "SELECT * FROM personale WHERE codice = '" & codice.Text & "'", connessione, 3, 3
    Do Until recordset3.EOF
      recordset3!fuori = "no"
      recordset3.MoveNext
    Loop
    recordset3.Close
    
    Dim nomeUtente As String
    nomeUtente = Replace$(titolo.Caption, "Ciao ", "")
    Sleep 3000
    'MsgBox (nomeUtente & " sei tornato con:" & mezzo & " il " & dataOra & " alle " & orarioOra)

    Call resetta
    
    Set connessione = Nothing
    Set recordset = Nothing
    Set recordset4 = Nothing
    Set recordset3 = Nothing

    Call apriSerratura


End Function
* ho modificato il percorso del file per non far riconoscere il nome del mio cliente ^^
* ho inserito la versione di VB nel titolo