Avoir une application développée dans Access 2010 connectée au serveur MySQL via ODBC.VBA ADODB Transactions
J'ai 2 tables
ContactDetails
avec des colonnes:
ID, FirstName, LastName, TelNo, MobileNo, EmailAddress, PrimaryContact, TimeStamp
et ReportingType
avec des colonnes:
ID, ReportType, ContactID, TimeStamp
J'utilise une transaction ADO, mais lors de l'insertion dans ContactDetails
, j'ai besoin pour récupérer l'ID afin que je puisse insérer un enregistrement correspondant dans ReportingType
et définir ReportingType.ContactID
pour être ContactDetails.ID
.
Dans VB.Net, je sais que je peux utiliser "Select LAST_INSERT_ID()" à la fin de l'instruction SQL et ExecuteScalar
renverra l'incrément automatique ID
.
Ci-dessous est mon code
Dim conn As ADODB.Connection
On Error GoTo ErrorHandler
Set conn = CurrentProject.Connection
With conn
.BeginTrans
'insert a new customer record
.Execute "INSERT INTO ContactDetails (" & _
"FirstName, " & _
"LastName , " & _
"TelNo , " & _
"MobileNo ," & _
"EmailAddress ," & _
"IsPrimaryContact) " & _
"Values (" & _
"'" & Me.FirstName & "'," & _
"'" & Me.LastName & "'," & _
"'" & Me.TeleNum & "'," & _
"'" & Me.MobileNum & "'," & _
"'" & Me.EmailAddress & "'," & _
False & ");", , adCmdText + adExecuteNoRecords
'Added from a possible solution
Dim rs As New ADODB.Recordset
Set rs = conn.Execute("SELECT @@Identity", , adCmdText)
Debug.Print rs.Fields(0).Value ' This returned 0
'Inset a new record into the ReportingType Table
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Checked Then
.Execute "INSERT INTO ReportingType " & _
"(ReportType, ContactID) " & _
"VALUES " & _
"('" & colReportType(ListView1.ListItems(i)) & "' , " & ContactID & ")"
End If
Next i
.CommitTrans
End With
ExitHere:
Set conn = Nothing
Exit Sub
ErrorHandler:
If Err.Number = -2147467259 Then
MsgBox Err.Description
Resume ExitHere
Else
MsgBox Err.Description
With conn
.RollbackTrans
'.Close
End With
Resume ExitHere
End If
End Sub
S'il vous plaît pouvez-vous me aider?
Vous pouvez interroger 'Contactez Details' après avoir écrire des données pour revenir à la dernière valeur d'identité (par un' ADODB.RecordSet') et l'utiliser dans votre prochaine instruction INSERT 'INTO' –
double possible de [Valeur Autonumber de la dernière ligne insérée - MS Access/VBA] (https://stackoverflow.com/questions/1628267/autonumber-value-of-last-inserted-row-ms-access-vba) –
https: // stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted-row – braX