" LIKE"运算符在MS Access中工作,但不在ADO中工作

时间:2014-09-03 00:42:38

标签: ms-access vb6 ado sql-like

我试图使用" Like"来过滤记录。使用星号,它在使用Access 2010返回许多记录时起作用。我难以理解为什么它与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。

何时"喜欢"取而代之的是" equals"它会返回正确的记录,因此我确信它能够连接到数据库,例如:

strsql = "SELECT tproducts.Prod_Name FROM tproducts " _
& " WHERE tproducts.Prod_Name = " & Chr(34) & "SONY Vaio SVD13213CXB" & Chr(34)

在ADO中是否有使用Like运算符的特殊方法?

我可以通过哪些其他方式过滤以获得与使用&#34相同的结果;喜欢"?例如,要查找所有" SVD "产品

2 个答案:

答案 0 :(得分:7)

在MS Access中,通配符几乎总是*,在MS Access之外它几乎总是%,所以

str = "SELECT tproducts.Prod_Name FROM tproducts) " _
& " WHERE tproducts.Prod_Name Like ""SO%"""

但是,我强烈建议您转到参数以避免一些严重的问题。

到目前为止,DAO是ACE / Jet的最佳选择(粗略示例Loop table rows in Access, with or without use of Private Const

答案 1 :(得分:0)

你不能指望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