请问ADODB连接SQL数据库,RECORDSET对象中使用模糊查询的方法,请各位相助!

请教ADODB连接SQL数据库,RECORDSET对象中使用模糊查询的方法,请各位相助!!SQL数据库服务器和客户端位于同

请教ADODB连接SQL数据库,RECORDSET对象中使用模糊查询的方法,请各位相助!!
SQL数据库服务器和客户端位于同一网段的不同机器上。
在SQL数据库上建立了ODBC数据源,在客户端上使用如下语句连接:
Dim   DB   As   New   ADODB.Connection
Dim   Rec(5)   As   New   Recordset
DB.Open   "Provider=MSDASQL.1;Persist   Security   Info=False;Data   Source=sqldb "
Rec(1).Open   "SELECT   *   FROM   INVOICE ",   DB,   1,   3
...

Rec(0)没有被使用过
现在我想在Rec(1)中按照字段INV_ID进行记录查询
使用了两种方法:
1:
Set   Rec(0)   =   DB.Execute( "Select   *   From   INVOICE   where   INV_ID   like   ' "   &   Str   &   " ' ")


2:
Rec(1).Find   "INV_ID   = ' "   &   Str   &   " ' ",   1,   adSearchForward,   1


请问一下,上面哪种方法可以正确地进行模糊查询呢??
如果可以模糊查询的的话,得到的查询记录集是否可以进行MOVE操作呢??

我使用第一种方法查询的时候,得到的Rec(0)似乎无法用MOVELAST,也就无法得到RecordCount了。
第二种方法我觉得似乎无法进行模糊查询,哪位知道确切结果的给个回答吧。

谢谢

[解决办法]
if rs.state=adstateopen then rs.close
rs.open "Select * From INVOICE where INV_ID like ' " & Str & "% ' ",db,adopenkeyset,adlockreadonly


[解决办法]
我使用第一种方法查询的时候,可以得到RecordCount

[解决办法]
第2个说实话 不会 我都是用sql实现
[解决办法]
Set Rec(0) = DB.Execute( "Select * From INVOICE where INV_ID like '% " & Str & "% ' ")
[解决办法]
参数1,3
[解决办法]
学习
[解决办法]
应该用静态
[解决办法]
本地游标
可以用切断记录集(类似于ADO.NET的DataSet)
[解决办法]
ADO不好用,初学者容易迷惑
还是ADO.NET好用
据说新出的 ADO.NET vNext相当于ORM了
用dlinq可以直接把查询写在程序里~
[解决办法]
RecordCount没必要用记录集得到,除非有现成的属性
另外用一个查询吧,把Select * 换为Select count(*)
[解决办法]
现在我想在Rec(1)中按照字段INV_ID进行记录查询
============================================
楼主的第一种方法不是从rec(1)取记录而是直接从Table中取记录吧
[解决办法]
Option Explicit
Dim Cn As New ADODB.Connection
Dim Tmp As New ADODB.Recordset

Public Sub FilterField(rstTemp As ADODB.Recordset, StrField As String, strFilter As String)
rstTemp.Filter = StrField & " like ' " & strFilter & " ' "
Set Tmp = rstTemp
End Sub

Private Sub Command1_Click()
Dim Rst As New ADODB.Recordset

Call FilterField(Rst, "字段 ", "值% ")
MsgBox Tmp.RecordCount
End Sub
不知能否满足兄弟的要求



[解决办法]
使用%通配符!
[解决办法]
呵呵 我知道了


Recordset不能使用数组操作
在你使用的时候
编译器会对 Rec(2)有2个理解
1,你理想中的Recordset数组
2 rec对象的第2个字段
我感觉他理解成了第2个意思因此出错 去掉数组吧
[解决办法]
Rec1.Open SQL(1), sql(0), 1, 3
Rec2.Open SQL(2), sql(0), 1, 3
Rec3.Open SQL(3), sql(0), 1, 3
Rec4.Open SQL(4), sql(0), 1, 3
Rec5.Open SQL(5), sql(0), 1, 3
'这样看看
[解决办法]
你数据库是不是部队啊
[解决办法]
你从新装个数据库侃侃那
[解决办法]
SQL(1) = "Select * From INVOICE "
SQL(2) = "Select * From BANK "
SQL(3) = "Select * From PORT "
SQL(4) = "Select * From VESSELS "
SQL(5) = "Select * From DETAIL "
你把sql语句位置颠倒下看看是不是还能返回第一个
2.换测试的数据库侃侃

如果还有这个问题 估计是数据库的安装问题
[解决办法]
肯定与你的数据源有关
拿你的代码测试过(改变数据源后)完全没问题
不要把功夫浪费在这些语句上面,这些语句没问题
[解决办法]
这样
Rec2.CursorLocation = adUseClient
Rec2.Open SQL(2), DB, 1, 3


[解决办法]
从代码看好象没道理,数组rs也可以用,可以返回正确的recordocount,可以move
很奇怪啊

[解决办法]
改下连接代码试试
"Provider = SQLOLEDB.1;Persist Security Info = False; " & _
"User ID = adminID;Password = youPwd;Data Source = youSERVER; " & _
"Initial Catalog = youDB "
[解决办法]
SQL数据库可以这样:
Public DB As New ADODB.Connection

dim rs(5) as new recordset
dim sql string

db.open "Provider = SQLOLEDB.1;Persist Security Info = False; " & _
"User ID = adminID;Password = youPwd;Data Source = youSERVER; " & _
"Initial Catalog = youDB "

sql= "Select * From INVOICE " & vbcrlf & _
"Select * From BANK " & vbcrlf & _
"Select * From PORT " & vbcrlf & _
"Select * From VESSELS " & vbcrlf & _
"Select * From DETAIL "


Dim i As Integer
For i = 1 To 5
rs(i).CursorLocation = adUseClient
Next

rs(1).Open Sql, Conn, adOpenKeyset, adLockOptimistic
Set rs(2) = rs(1).NextRecordset
Set rs(3) = rs(2).NextRecordset
Set rs(4) = rs(3).NextRecordset
Set rs(5) = rs(4).NextRecordset

Debug.Print rs(1).RecordCount
Debug.Print rs(2).RecordCount
Debug.Print rs(3).RecordCount
Debug.Print rs(4).RecordCount
Debug.Print rs(5).RecordCount
[解决办法]
樹上的鳥兒說的對,是CursorLocation 問題
db.CursorLocation = adUseClient


[解决办法]
另外最好如此定義Recordset
Dim Rs As New ADODB.Recordset
[解决办法]
我试验了,都可以取到
db.CursorLocation = adUseClient
试试看
[解决办法]
ding