首页 > 解决方案 > 插入查询/选择查询在访问中有效,但在 vba 中无效

问题描述

我创建了一个在 Access 中运行良好且没有错误的查询,并且在尝试将其转换为我的 vba 设置时,我无法弄清楚为什么我没有得到任何值,即使该查询在 access 中显然有效,并且不会导致VBA 端的错误。

在这里拉我的头发,我创建了一个边桌,看看我是否可以“伪插入”计算值,但我遇到了与上面相同的问题 - 插入工作没有访问错误,在 vba 中通过没有问题,但实际上并没有插入任何数据。

我在暂停代码时复制了字符串查询,以确保所有内容都在有效的 Access 查询和 VBA 查询之间匹配,并且没有发现任何差异。

我在某处读到,因为我试图提取“第一行”数据片段,可能有一些我可以更改的 HDR 设置,但是当我尝试应用任何修复时,我发现他们打开了另一个 excel 实例并打开了一个对话框。

请让我知道我在这里做错了什么。

Public Function PullNextLineItemNumB(QuoteNum) As Integer
Dim strQuery As String
Dim ConnDB As New ADODB.Connection
Dim myRecordset As ADODB.Recordset
Dim QuoteModifiedNum As String

ConnDB.Open ConnectionString:="Provider = Microsoft.ACE.OLEDB.12.0; data 
source=" & ThisWorkbook.Path & "\OEE Info.accdb"

'Query to try and make Access dump the value "18" into the table so I can 
grab it after the query is finished, sidestepping excel not working
strQuery = "INSERT INTO TempTableColm (TempColm) SELECT 
MAX(MID([Quote_Number_Line],InStr(1,[Quote_Number_Line]," & Chr(34) & "-" 
& Chr(34) & ")+1)) AS MaxNum from UnifiedQuoteLog where Quote_Number_Line 
like '" & QuoteNum & "*'"
ConnDB.Execute strQuery

'Original query, returns "18" as expected in Access, and null or empty in 
the recordset
strQuery = "SELECT MAX(MID([Quote_Number_Line],InStr(1, 
[Quote_Number_Line]," & Chr(34) & "-" & Chr(34) & ")+1)) from 
UnifiedQuoteLog where Quote_Number_Line like '" & QuoteNum & "*'"

Set myRecordset = ConnDB.Execute(strQuery)
Do Until myRecordset.EOF
For Each fld In myRecordset.Fields
    Debug.Print fld.Name & "=" & fld.Value
Next fld
myRecordset.MoveNext
Loop

myRecordset.Close
Set myRecordset = Nothing
ConnDB.Close
Set ConnDB = Nothing

End Function

访问的实际输出为“18”,这是预期的,excel 的 vba 记录集的输出始终为 null 或空字符串。

标签: vbams-access

解决方案


看来我解决了这个问题,而显然使用 ADODB 访问的 excel 运算符是 % for LIKE 而不是 * (因为原因)。一旦我做出改变,一切就开始工作了。

有人可以解释为什么会这样吗?我真的很想了解为什么这是一个设计选择。


推荐阅读