本帖最后由 ljy00879 于 2012-8-22 13:14 编辑
Sub 调运录入1() '使用数据集更新,向数据表中添加记录。
Dim rg As Range
Dim arr
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim st As String, sql As String
Dim i As Integer, j As Integer, x As Integer
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
Set rg = Sheet4.Range("a3:l" & Range("a65536").End(xlUp).Row)
arr = rg
'Data Source=oracle实例名;
sql = "select * from dy"
st = "provider=msdaora.1;" & _
"data source=orcl;" & _
"user id=scott;" & _
"password=tiger;" & _
"persist security info=true"
cnn.Open st
cnn.CursorLocation = adUseClient
rst.Open sql, cnn, adOpenDynamic, adLockOptimistic
For i = 1 To UBound(arr, 1)
rst.AddNew '这里出错啦!
For j = 0 To rst.Fields.Count - 1
rst.Fields(j) = arr(i, j + 1)
Next j
On Error Resume Next
rst.Update
For x = 0 To cnn.Errors.Count - 1
Debug.Print cnn.Errors(x).Description'返回ORA-00001,ORA-02291
Debug.Print cnn.Errors(x).NativeError '返回1,2291
Debug.Print cnn.Errors(x).Number'返回-2147217873,-2147467259
Debug.Print cnn.Errors(x).Source' 返回Microsoft OLE DB Provider for Oracle
Debug.Print cnn.Errors(x).SqlState '返回空
Next
Next i
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
MsgBox "数据录入完毕,共" & i & "条记录。"
End Sub
打印出如下出错信息,以供医家研究。
ORA-00001: 违反唯一约束条件 (SCOTT.DY_MD_PK)
1
-2147217873
Microsoft OLE DB Provider for Oracle
ORA-02291: 违反完整约束条件 (SCOTT.KC_DY_KCH_FK) - 未找到父项关键字
2291
-2147467259
Microsoft OLE DB Provider for Oracle
这是两类主要的错误。
任何涉及 ADO 对象的操作都会生成一个或多个提供者错误。每个错误出现时,一个或多个 Error 对象将被放到 Connection 对象的 Errors 集合中。当另一个 ADO 操作产生错误时,Errors 集合将被清空,并在其中放入新的 Error 对象集。
注意 每个 Error 对象都代表特定的提供者错误而不是 ADO 错误,ADO 错误被记载到运行时的例外处理机制中。
除了在 Error 对象和 Errors 集合中说明的提供者错误之外,ADO 本身也将错误返回到运行时环境的异常处理机制之中。