Actuellement, j'utilise Microsoft Office 2007 et j'ai lié une base de données Access 2007 à la base de données Excel 2007. Jusqu'ici tout va bien. Je peux mettre à jour la base de données d'accès et cela s'affiche automatiquement dans le fichier Excel. Voici où j'ai le problème.Erreur d'exécution VBA Excel-Access 3251
Lorsque j'essaie de mettre à jour une base de données Access à partir d'Excel; Je continue d'obtenir l'erreur d'exécution 3251. => Erreur d'exécution maintenant résolue mais NOUVEAU problème concernant une valeur NULL lorsque j'essaie d'ajouter des données?
Sub ADODBExcelToAccess()
'Collecting data from the
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
'---NOTE: Sheet is set to auto refresh data from the database on loading---
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=" & Application.ActiveWorkbook.Path & "\linktest.accdb;"
' open a recordset (i.e. a table)
Set rs = New ADODB.Recordset
rs.Open "linktest", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
For i = 4 To 16
x = 0
Do While Len(Range("K" & i).Offset(0, x).Formula) > 0
With rs
'create a new record
.AddNew
.Fields("ID") = Range("A1" & i).Value
.Fields("PriceID") = Range("B1").Value
.Fields("ProductCode") = Range("C1").Value
.Fields("Price") = Range("D1" & i).Value
.Fields("CurrencyType") = Range("E1").Value
.Fields("Type") = Range("F1").Value
.Fields("Production") = Range("G1" & i).Value
.Fields("Quantity") = Range("H1" & i).Value
.Fields("Details") = Range("I1" & i).Value
.Fields("DateUpdated") = Range("J1" & i).Value
.Fields("Setup") = Range("K1" & i).Value
' stores the new record
.Update
End With
x = x + 1
Loop
Next i
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
La bibliothèque de référence que j'utilise actuellement est Active X Data Objects 2.1 Library.
Quelle est la ligne d'erreur? Est-ce sur la mise à jour? – dbmitch
Désolé c'est sur le ".addNew" ou au moins c'est la ligne qui devient en surbrillance L'erreur est l'erreur 3251 et il indique "Le jeu d'enregistrements actuel ne supporte pas la mise à jour, cela peut être une limitation du fournisseur, ou de le type de verrouillage sélectionné " –
Je déteste ado avec des bases de données d'accès. Mais si vous ne voulez pas utiliser DAO essayez d'ouvrir avec adoopendynamic au lieu de keyset. Vérifiez la propriété RS.updatable juste après .open pour vous assurer que vous avez enregistré peut être mis à jour. L'identifiant est-il un champ clé primaire? – dbmitch