Excel VBA ADODB更新记录集
我试图阅读工作表中两个不同选项卡的内容,并使用ADODB和VBA查询技术进行比较 您可以在下面找到我的代码: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)
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 <> '';")