使用ADODB Recordset来INSERT Oracle DB

时间:2018-01-30 16:20:17

标签: oracle excel-vba adodb vba excel

我正在将一些上传DAO记录集的Excel-VBA代码转换为Access数据库。我的新代码使用ADODB对象,需要将数据推送到Oracle 12c。

我查看了一些文章,并在此处找到了一个方便的等效图表:From-DAO-to-ADO。使用此信息,我创建了以下代码。

这第一位只是加载源记录集。这里没有问题,但如果相关则发布:

Dim CN As New ADODB.Connection, RS As New ADODB.Recordset
Dim SRC_CN As New ADODB.Connection, SRC_RS As New ADODB.Recordset, SRC_CMD As New ADODB.Command
strSQL = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Src_WB_nm & _
        ";Extended Properties='Excel 12.0 Xml;HDR=NO';"
SRC_CN.Open strSQL
Set SRC_CMD.ActiveConnection = SRC_CN
SRC_CMD.CommandType = adCmdText
SRC_RS.Close
Set SRC_RS = Nothing
strSQL = "SELECT * FROM [" & TableNm & "]"
SRC_CMD.CommandText = strSQL
With SRC_RS
    .CursorLocation = adUseClient
    .CursorType = adOpenDynamic
    .LockType = adLockOptimistic
    .Open SRC_CMD
End With

在此细分中,我打开目标连接并尝试打开目标记录集。当我在DAO时,这个方法(AddNew,RS ... value = RS.value,RS.Update ...)工作。我希望它可能需要稍微修改,但它的RS.Open命令是我现在无法通过的。

CN.Open CSTRG
strSQL = "DELETE FROM DFSTOOL.C_QUERYLIST"
Set RS = CN.Execute(strSQL)
Set RS = Nothing
RS.Open "DFSTOOL.C_QUERYLIST", CN, adCmdTable
Do Until SRC_RS.EOF
    RS.AddNew
    RS.Fields(0).Value = SRC_RS.Fields(0).Value
    RS.Update
    SRC_RS.MoveNext
Loop
RS.Close
SRC_RS.Close
Set RS = Nothing
Set SRC_RS = Nothing

抛出的错误是:enter image description here

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

很高兴这是一个简单的语法问题。也许我应该删除这个帖子,但我现在就把它留下来,以防它帮助其他人。我引用的等价表指出“adCmdTable”是ADO中的一个选项,而等效的“dbOpenTable”是DAO中的一个类型。因此,我被要求跳过几个字段,以便它在正确的位置。接着进行了其他微调,最后的迭代按预期工作:

RS.Open "DFSTOOL.C_QUERYLIST", CN, adOpenForwardOnly, adLockOptimistic, adCmdTable
Do Until SRC_RS.EOF
    RS.AddNew
    RS.Fields(1).Value = SRC_RS.Fields(0).Value
    RS.Update
    SRC_RS.MoveNext
Loop

感谢您的耐心社区!