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