Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA ADODB更新记录集_Excel_Vba_Recordset - Fatal编程技术网

Excel VBA ADODB更新记录集

Excel VBA ADODB更新记录集,excel,vba,recordset,Excel,Vba,Recordset,我试图阅读工作表中两个不同选项卡的内容,并使用ADODB和VBA查询技术进行比较 您可以在下面找到我的代码: stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & wbBook.FullName & ";" _ & "Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;Readonly = False"";" ' MsgBox (stCon)

我试图阅读工作表中两个不同选项卡的内容,并使用ADODB和VBA查询技术进行比较

您可以在下面找到我的代码:

stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" _
 & "Data Source=" & wbBook.FullName & ";" _
 & "Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;Readonly = False"";"
' MsgBox (stCon)
'here is SQL code to gather data including our calculation from two tables within the workbook
'stSQL = "SELECT [Recon_Daily_Xml_report$].RECTYPEGLEDGER, [GL_Activity_totals$].TRXNTYPE, ([Recon_Daily_Xml_report$].Amount_Abs - [GL_Activity_totals$].BILLINGAMT) as Amount_Diff ,"
'stSQL = stSQL & " ([Recon_Daily_Xml_report$].NUMOFENTRIES - [GL_Activity_totals$].NUMOFTRXNS) as Count_Diff "
'stSQL = stSQL & " FROM [Recon_Daily_Xml_report$], [GL_Activity_totals$]"
'stSQL = stSQL & " WHERE Lower([Recon_Daily_Xml_report$].RECTYPEGLEDGER) = Lower([GL_Activity_totals$].TRXNTYPE)"
'stSQL = stSQL & " ORDER BY [Recon_Daily_Xml_report$].RECTYPEGLEDGER ASC"

stSQL = "SELECT LCASE([GL_Activity_totals$].TRXNTYPE),Sum(ABS([GL_Activity_totals$].BILLINGAMT)),Sum([GL_Activity_totals$].NUMOFTRXNS) "
stSQL = stSQL & " FROM [GL_Activity_totals$] "
stSQL = stSQL & " Group By [GL_Activity_totals$].TRXNTYPE "
stSQL = stSQL & " ORDER BY [GL_Activity_totals$].TRXNTYPE ASC"


'MsgBox (stSQL)
Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

cnt.Open stCon
'rst.Open stSQL, cnt, 1, 3
rst.Open stSQL, cnt, adOpenStatic, adLockOptimistic
'rst.Open strSQL, cnt, adOpenStatic, adLockOptimistic
With rst


    Do While Not .EOF
    If rst.Fields.Item(0).Value <> "" Then
       strString = Replace(rst.Fields.Item(0).Value, "  ", " ")

        rst.Update
        rst.Fields.Item(0) = strString

    End If
    .MoveNext
    Loop

End With
尝试使用1,3选项更改打开记录集的方式,但再次出现相同的错误

有人能帮忙吗?

问题在于

LCASE([GL_Activity_totals$].TRXNTYPE)
和小组一起。 在本例中,rst.Fields.Item(0)是一个表达式,而不是表值。无法更新表达式。此外,由于您使用的是GROUP BY,因此记录集不会链接到任何特定的记录以进行编辑。您可以完全用SQL完成相同的任务

cnt.Execute("UPDATE [GL_Activity_totals$] " & _
" SET [GL_Activity_totals$].TRXNTYPE = Substitute([GL_Activity_totals$].TRXNTYPE,'  ', ' ') " & _
" WHERE NOT [GL_Activity_totals$].TRXNTYPE IS NULL " & _
" AND [GL_Activity_totals$].TRXNTYPE <> '';")
cnt.Execute(“更新[总帐活动总额$”&_
“设置[GL\U活动\U总计$]”。TRXNTYPE=替换([GL\U活动\U总计$]”。TRXNTYPE、、“”)”和_
“其中不包括[GL\U活动\U总计$]。TRXNTYPE为空”&_
“和[GL_活动总数$].TRXNTYPE”“;”)

感谢您的回复。无法识别ADODB VBA更新中的替换功能。因此,没有进行替换。我是否需要进行任何其他更改才能使其正常工作?我想要的最终结果是替换记录集中trxntypes字符串中的所有额外空格。再次查看您的问题后,我想知道是否最好不使用ADODB直接打开工作表,但无论如何,我认为应该使用替换,而不是替换,因为它是excel
cnt.Execute("UPDATE [GL_Activity_totals$] " & _
" SET [GL_Activity_totals$].TRXNTYPE = Substitute([GL_Activity_totals$].TRXNTYPE,'  ', ' ') " & _
" WHERE NOT [GL_Activity_totals$].TRXNTYPE IS NULL " & _
" AND [GL_Activity_totals$].TRXNTYPE <> '';")