尝试使用带有 AddNew/Update 方法的 ADODB.recordset 将数据从我的 HMI 写入 MSSQL db 时,出现以下错误。我使用 SQL Server Native Client 11.0 进行连接和 Microsoft ActiveX Data Objects 6.0 Library。
Generic VBA Error -2147467259[Microsoft][SQL Server Native Client 11.0][SQL Server]FNGCO,ABCDEFGHI,1000003,2017-04-14,17:00:36:187,FOAML1,A1,,1
如果它有效,则此代码应将每个值写入 MSSQL 数据库中的每一列。我在应用程序的另一部分有非常相似的代码工作,但我似乎无法让它工作。
到目前为止我尝试过的:
- 检查在另一个 HMI 中运行的代码,两者之间的一切似乎都是相同的。
- 尝试使用另一个 ADODB.recordset 使用相同的连接字符串,并使用 AddNew/Update 将数据添加到数据库中。
- 检查数据库表以确保我尝试输入的所有数据都适合该列(它不为空,不超过最大字符数等......)
这是我的代码:在调试时,代码在 sqlrs1.Update 处停止。
Option Explicit
Const strSQLNCLI11_1 = "Driver={SQL Server Native Client 11.0};Server=TESTDEMO\SQLEXPRESS;Database=RABPI;Uid=sa;Pwd=testdemo;QueryTimeout=0"'
Private Sub Button1_Released()
On Error GoTo ErrHandler
Dim sqlcn2 As ADODB.Connection
Dim sqlrs1 As ADODB.Recordset
Set sqlcn2 = New ADODB.Connection
Set sqlrs1 = New ADODB.Recordset
sqlcn2.Open strSQLNCLI11_1
sqlrs1.Open "Select * from AT_BW_PRDN ;", _
sqlcn2, adOpenDynamic, adLockPessimistic
sqlrs1.AddNew
sqlrs1("AT_BW_BUS_UNIT") = "FNGCO"
sqlrs1("AT_BW_PID") = "ABCDEFGHI"
sqlrs1("AT_BW_PRDN_AREA") = "FOAML1"
sqlrs1("AT_BW_SHIFT") = "A1"
sqlrs1("AT_BW_ITEM_ID") = "1000007"
sqlrs1("AT_BW_REL") = 0
sqlrs1.Update
Exit Sub
ErrHandler:
LogDiagnosticsMessage "Generic VBA Error" & Err.Number & " " & Err.Description, ftDiagSeverityError, ftDiagAudienceOperator
Set sqlcn2 = Nothing
Set sqlrs1 = Nothing
Exit Sub
End Sub
更新:我创建了一个测试数据库并重新创建了我要写入的表,没有任何约束或触发器,并且代码运行正常。