用Access2000数据库,关于ADODB.Recordset.Find查询语句...在线1小时内解决给分

chendjin 2004-05-06 09:18:52
.....
Dim Rs1 As New ADODB.Recordset
sYmd 为日期字符串,例如"2004-05-02"
cFindStr = "Ymd=#" & sYmd & "# And Id=" & mIdex(II)
Rs1.MoveFirst
Rs1.Find cFindStr'运行至此报错
.....
报错:
实时错误‘3001’:
参数类型不正确,或不在可以接受的范围内,或与其他参数冲突。
高手指点。
...全文
126 16 点赞 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chendjin 2004-05-07
谢谢各位,俺为了赶进度用 Rs1.Find "Ymd=#" & sYmd & "#"后再逐行
判断id号取值(幸好数据行只有几千行),有空再实施各位提供的方法。
  • 打赏
  • 举报
回复
gj121 2004-05-07
楼上几位高手都说得对呀!我感觉还直接执行SQL语句比较好,比如:
dim cn as adodb.connection
dim rs as adodb.recordset
set cn=new adodb.connection
set rs=new adodb.recordset

rs.open SQL语句,...........
rs.execute SQL语句
  • 打赏
  • 举报
回复
chendjin 2004-05-07
For II = 1 To AllIndex
Rs1.Open "Select * from " & cTable & "where Ymd=#" & sYmd _
& "# And Id=" & mIdex(II)'运行此处提示:连接无法用于此
操作。在上下文中他可能已被关闭或无效。楼上的再看一看,是啥原因?

sName(II) = Trim(rs1.Fields("name").Value)
Next
  • 打赏
  • 举报
回复
online 2004-05-07
Dim Conn As ADODB.Connection
Dim Rs1 As ADODB.Recordset

set conn=new adodb.connenction
set rs1=new adodb.recordset
UseMdb = "Data Source=" & MdbName
UseConnstr = "Provider=Microsoft.Jet.OLEDB.4.0;" & UseMdb
Conn.Open UseConnstr

Rs1.CursorLocation = adUseClient
For II = 1 To AllIndex
Rs1.Open "Select * from " & cTable & "where Ymd=#" & sYmd _
& "# And Id=" & mIdex(II)
sName(II) = Trim(rs1.Fields("name").Value)
Next
  • 打赏
  • 举报
回复
chendjin 2004-05-07
UseMdb = "Data Source=" & MdbName
UseConnstr = "Provider=Microsoft.Jet.OLEDB.4.0;" & UseMdb
Conn.Open UseConnstr

Rs1.CursorLocation = adUseClient
UseTable1 = cTable 'Êý¾Ý±í
Rs1.Open UseTable1, Conn, adOpenKeyset, adLockPessimistic
Rs1.MoveFirst
For II = 1 To AllIndex
Rs1.Open "Select * from " & cTable & "where Ymd=#" & sYmd _
& "# And Id=" & mIdex(II)
sName(II) = Trim(rs1.Fields("name").Value)
Next
楼上的,这样执行提示错误:
对象打开时,不允许操作。
是不是不用事先建立连接,直接定义:
Dim Conn As New ADODB.Connection
Dim Rs1 As New ADODB.Recordset即可。
  • 打赏
  • 举报
回复
射天狼 2004-05-07
没有返回结果的SQL语句,包括UPDATE,DELETE,DROP TABLE,CREATE TABLE……之类的SQL语句可以用CN.EXECUTE STRSQL来执行!!
  • 打赏
  • 举报
回复
射天狼 2004-05-07
不推荐使用ADO的方法,包括DELETE,FIND……
原因是效率不高,因为其内部也是先根据用户设置的条件转换为SQL语句再执行,所以还是推荐直接使用SQL语句来执行查询!!
方法:

rs.open "SELECT * FROM TABLENAME WHERE NAME = '" & TEXTNAME.TEXT & "'",CN
  • 打赏
  • 举报
回复
chendjin 2004-05-07
楼上的,怎样执行“select * from tablename where ...(這樣查詢)”,
是用Conn.Execute还是rs.Open “...”?请指教。
  • 打赏
  • 举报
回复
haipingma 2004-05-07
用select * from tablename where ...(這樣查詢)
  • 打赏
  • 举报
回复
online 2004-05-06
rs.Open "select table1.eid,table1.etype,table1.econtent from table1,(select eid,etype,econtent from table1 where econtent like '%" & text1.text & "%' ) a,(select eid,etype,econtent from table1 where econtent like '%" & text2.text & "%') b Where table1.eid = a.eid And table1.eid = b.eid and edate>='"& text3.text &"' and edate<='" & text4.text & "'" and table1.eid=" & mIdex(II)
, mConn, 1, 3

这是一个多表,多条件的,通过测试
  • 打赏
  • 举报
回复
chendjin 2004-05-06
hewei2003:
有其他方法实现上述查询吗?
  • 打赏
  • 举报
回复
hewei2003 2004-05-06
Find方法不支持多条件查询。
  • 打赏
  • 举报
回复
chendjin 2004-05-06
很奇怪,若将查询条件按下面分解"Ymd=#" & sYmd & "# And Id=" &
mIdex(II)便能顺利执行(结果有可能不正确),
cFindStr = "Ymd=#" & sYmd & "#"
Rs1.MoveFirst
Rs1.Find cFindStr
If Rs1.AbsolutePosition > 0 And Not Rs1.EOF Then
Rs1.Find "Id=" & mIdex(II)
.....
是否Find不支持多条件查询,高手指点。
  • 打赏
  • 举报
回复
chendjin 2004-05-06
TO: SunWinter(冬日阳光下的一头猪)
俺声明了Dim cFindStr as string
Ymd为日期类型,Id加单引号试了还是报上述错误,还有其他方法吗。
  • 打赏
  • 举报
回复
SunWinter 2004-05-06
另外,cFindStr最好明确声明为字符类型,即 Dim cFindStr as string
  • 打赏
  • 举报
回复
SunWinter 2004-05-06
cFindStr = "Ymd=DateValue('" & sYmd & "') And Id=" & mIdex(II)

注意:如果 mIdex(II) 是字符型,则需要加单引号

  • 打赏
  • 举报
回复
相关推荐
发帖
数据库(包含打印,安装,报表)
加入

1190

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2004-05-06 09:18
社区公告
暂无公告