OK. CI SONO! :metallica
Questo il test da me provato:
codice:
Private Sub Command1_Click()
Dim rdsTemp As Recordset
On Error GoTo Errore
Set rdsTemp = New Recordset
With rdsTemp
.ActiveConnection = gConnessioneADODB
.LockType = adLockPessimistic
.Source = "SELECT * FROM LOCKTABLE WHERE IDRECORD = ""PROG1"" "
.Open
If IsNull(.Fields("DATAORA")) Then
' Inserisce la data/ora di blocco del record (da portare a NULL allo sblocco)
.Fields("DATAORA") = Now
.Update
Else
MsgBox "Record bloccato"
End If
.Close
End With
Set rdsTemp = Nothing
Exit Sub
Errore:
Select Case rdsTemp.EditMode
Case adEditNone
MsgBox "Errore non previsto: ..." , vbCritical, "Attenzione:"
Case adEditInProgress
MsgBox "Record in uso.", vbExclamation, "Attenzione:"
End Select
End Sub
Lanciando da 2 task diversi di VB6 ho potuto provare l'effettivo blocco del record con chiave 'PROG1' nella tabella 'LOCKTABLE'.
Il blocco viene riscontrato se un task ha già effettuato l'Update dope che l'altro task ha effettuato solo l'Open e/o le variazione dei campi: all'esecuzione del comando Update si genera un errore che si può tranquillamente controllare valutando lo stato di EditMode.
MA.....
Se invece di lavorare direttamente sul recordset utilizzo un comando SQL per variare il record di LOCKTABLE
codice:
...
UPDATE LockTable SET DataOra = #2004/05/12 10:00# WHERE ((LockTable.DataOra)="PROG1"))
...
si può effettuare il lock del record in qulache maniera? :tongue:
...O NO