我试图使用" 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 "产品
答案 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