【问题标题】:Insert Query/Select Query works in access, but not in vba插入查询/选择查询在访问中有效,但在 vba 中无效
【发布时间】:2020-02-25 22:19:36
【问题描述】:

我创建了一个在 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

access 的实际输出是预期的“18”,excel 的 vba 记录集的输出总是 null 或空字符串。

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

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

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

    【讨论】:

    • 这里的访问很奇怪,就像% is the standard wildcard in SQL。因此,通过 ADO 的 Excel 遵循标准。
    • 是的,我开始在 vba 中的其他查询上使用 % 在与 access 交谈时(我习惯于 SQL server 语法),但是当我将它转移到 access 进行测试时,它对我大喊大叫。我猜是新工作,关于数据库和程序的新怪癖。
    • This article 可能会对此有所帮助。 tl;dr:在 Access 中,您可以同时使用 Access 或 SQL 通配符,但您必须在查询中使用 one set exclusively。你不能把它们混在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2013-01-24
    • 2014-09-01
    • 1970-01-01
    • 2014-07-30
    • 2016-07-04
    相关资源
    最近更新 更多