Buongiorno a tutti
Ho il seguente problema, vorrei recuperare l'identity di un record aggiunto a una tabella collocata su un SQL server via ODBC durante una transazione.
Questo è il codice che ho utilizzato
Private Sub Comando0_Click()
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rst1 As DAO.Recordset
Dim NewId As Integer
Set wrk = DBEngine(0)
Set db = CurrentDb()
Set rst = db.OpenRecordset("TabellaVenature", dbOpenSnapshot)
Set rst1 = db.OpenRecordset("TabellaVenature", dbOpenDynaset, dbSeeChanges)
rst.FindFirst ("IdRecord=5")
If rst.NoMatch Then
MsgBox ("Venatura non trovata")
Exit Sub
End If
On Error GoTo trans_Err
wrk.BeginTrans
rst1.AddNew
For i = 1 To rst.Fields.Count - 1
rst1(i) = rst(i)
Next
rst1.Update
NewId = DBEngine(0)(0).OpenRecordset("SELECT @@identity FROM TabellaVenature")(0)
MsgBox (NewId)
wrk.CommitTrans dbForceOSFlush
trans_exit:
rst.Close
rst1.Close
db.Close
wrk.Close
Exit Sub
trans_Err:
i = MsgBox("Errore di scrittura sul database " & Err.Number & " - " & Err.Description, vbCritical)
'Roll back the transaction
wrk.Rollback
Resume trans_exit
End Sub
Il mio problema è che quando cerco di recuperare il nuovo id si blocca tutto e dopo qualche secondo genera un errore di scrittura non riuscita.
Se non metto la transazione tutto funziona bene.
Io vorrei usare la transazione perchè poi devo aggiungere righe a un altra tabella da collegare alla prima tramite l'id recuperato.
Esiste un modo per fare questa cosa?