Ms access &引用;例如;操作员在MS Access中工作,但不在ADO中工作

Ms access &引用;例如;操作员在MS Access中工作,但不在ADO中工作,ms-access,vb6,ado,sql-like,Ms Access,Vb6,Ado,Sql Like,我尝试使用带星号的“Like”来过滤记录,当使用access2010返回许多记录时,它会起作用。我不明白为什么它与ADO一起使用时不返回任何内容。代码包括多个表和列,因此为了排除故障,我进行了一个简单的查询。代码如下: strsql = "SELECT tproducts.Prod_Name FROM tproducts " _ & " WHERE tproducts.Prod_Name Like " & Chr(34) & "SO*" & Chr(34) Se

我尝试使用带星号的“Like”来过滤记录,当使用access2010返回许多记录时,它会起作用。我不明白为什么它与ADO一起使用时不返回任何内容。代码包括多个表和列,因此为了排除故障,我进行了一个简单的查询。代码如下:

strsql = "SELECT tproducts.Prod_Name FROM tproducts " _
& " WHERE tproducts.Prod_Name Like " & Chr(34) & "SO*" & Chr(34)

Set cn = New ADODB.Connection
cn = connString
cn.Open
Set rs = New ADODB.Recordset
rs.Open strsql, cn, adOpenStatic, adLockOptimistic

' test here
iRecCount = rs.RecordCount
rs.MoveFirst
Recordcount返回-1

当“Like”替换为“equals”时,它将返回正确的记录,因此我确信它能够连接到数据库,例如:

strsql = "SELECT tproducts.Prod_Name FROM tproducts " _
& " WHERE tproducts.Prod_Name = " & Chr(34) & "SONY Vaio SVD13213CXB" & Chr(34)
在ADO中是否有使用Like运算符的特殊方法


我还可以通过哪些方式过滤,以获得与使用“Like”相同的结果?例如,要在MS Access中查找所有“SVD”产品?

,通配符几乎总是*,在MS Access之外,通配符几乎总是%

str = "SELECT tproducts.Prod_Name FROM tproducts) " _
& " WHERE tproducts.Prod_Name Like ""SO%"""
但是,我强烈建议您转到参数,以避免出现一些严重问题


DAO是ACE/Jet的最佳选择(粗略示例)

您不能指望RecordCount。即使返回了行,它也经常返回-1。如果使用客户端游标,它将仅返回实际计数

相反,使用rs.EOF检查记录集的结尾。请尝试以下操作:

Set cn = New ADODB.Connection
cn = connString
cn.Open
Set rs = New ADODB.Recordset
rs.Open strsql, cn, adOpenStatic, adLockOptimistic

' very innefficient way to find the record count, but gives you the idea.  If you just care about record count use "COUNT(*)" in your query
do while not rs.eof
  iRecCount = iRecCount + 1
  rs.MoveNext
loop

是的,我用了星号通配符。它以前连接到Mysql数据库,使用%,但是,%在MS Access中不返回任何内容。我直接在MS Access上测试了这些语句。您使用的是ADO,因此,如果您使用的是ACE/Jet,则使用DAO的效率要高得多。查询只是通过ADO传递到Access引擎(Jet引擎)。ADO不分析查询本身。@ZIPP如果点相同,则使用ADO时,查询必须使用%,而DAO*是一个选项。使用ACE/Jet时DAO的速度要快得多。我切换到%wildcard,但结果相同,没有返回任何记录。但问题是“Like”并不总是返回任何记录。您如何知道它没有返回任何记录?正如我上面提到的,如果您只检查rs.recordCount,那么您就错了。您需要检查rs.eofrs.movenext是否返回错误:运行时错误“3021”。BOF或EOF为真,或者当前记录已被删除。呵呵……那么您肯定无法恢复任何记录。因此,似乎“Like”在ADO上不起作用。是否有另一种使用通配符进行过滤的方法?