Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
插入查询/选择查询在access中有效,但在vba中无效_Vba_Ms Access - Fatal编程技术网

插入查询/选择查询在access中有效,但在vba中无效

插入查询/选择查询在access中有效,但在vba中无效,vba,ms-access,Vba,Ms Access,我创建了一个在Access中运行良好且没有错误的查询,在尝试将其转换为我的vba设置时,我无法理解为什么我没有获得任何值,即使该查询在Access中运行良好,并且在vba端没有导致错误 我已经创建了一个边表,看看是否可以“伪插入”计算值,但我遇到了与上面相同的问题-插入在访问中没有错误,在vba中没有问题,但实际上没有插入任何数据 我在暂停代码的同时复制了字符串查询,以确保有效的Access查询和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

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

看来我解决了这个问题,而在调查这一点时,使用access的ADODB的excel运算符显然是%的,原因是相似,而不是*。我一做出改变,一切都开始起作用了


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

Access在这里是一个奇怪的选择,就像。所以Excel,通过ADO,遵循标准。是的,我开始在vba中与access交谈时使用%进行其他查询(我习惯SQL server语法),但当我将它转移到access进行测试时,它对我大喊大叫。我想,新的工作,关于数据库和程序的新怪癖需要学习。也许能帮上忙。tl;dr:在Access中,您可以同时使用Access或SQL通配符,但必须在查询中专门使用一组通配符。你不能把它们混在一起。