Office中国论坛/Access中国论坛

标题: 相同语句, 换了sql语句后就不能执行了? [打印本页]

作者: 红过刘德华    时间: 2006-6-15 18:45
标题: 相同语句, 换了sql语句后就不能执行了?
Dim rs
Set rs = CurrentDb.OpenRecordset("SELECT 人员号ID, 姓名, 推介人ID FROM 人员资料 where 推介人ID <> 0 ORDER BY  人员资料.推介人ID;")
MsgBox rs.RecordCount


返回 206


Dim rs
Set rs = CurrentDb.OpenRecordset("SELECT 人员号ID, 姓名, 推介人ID FROM 人员资料")
MsgBox rs.RecordCount


返回 1

但 表中 合计 有 207 条 记录已经上传了文件
[attach]18504[/attach]


[此贴子已经被作者于2006-6-15 11:16:37编辑过]


作者: andymark    时间: 2006-6-15 18:50
增加下面的语句再试试

rs.MoveFirst
rs.MoveLast
作者: wwwwa    时间: 2006-6-15 18:50
1、将表及要求结果贴出来看看;

2、ID有可能为NULL。
作者: 红过刘德华    时间: 2006-6-15 19:18
试过 不行

rs.MoveFirst
rs.MoveLast

ID没有NULL



感谢!
作者: andymark    时间: 2006-6-15 19:35
修改为下面,显示207 正常

sql = "SELECT 人员号ID  FROM 人员资料"
Set rs = CurrentDb.OpenRecordset(sql)
rs.MoveFirst
rs.MoveLast
MsgBox rs.RecordCount
作者: 红过刘德华    时间: 2006-6-15 19:44
这是什么原因呢? 如果遇到 记录集 没有数据, 是无法移动指针的, 会出错的.

有更好的解决方案吗? 除了使用 ADO 外.

感谢!
作者: andymark    时间: 2006-6-15 21:45
可以用EOF加以判断,你的例子可以修改为

Dim rs As Recordset
Dim rs2 As Recordset
Dim i As Long
Dim sql As String

sql = "SELECT 人员号ID  FROM 人员资料"
Set rs = CurrentDb.OpenRecordset(sql)
Do While Not rs.EOF
    Set rs2 = CurrentDb.OpenRecordset("SELECT 人员号ID  FROM 人员资料 where 推介人ID = " & rs!人员号ID)
    If Not rs2.EOF Then
    rs2.MoveFirst
    rs2.MoveLast
   
    MsgBox rs2.RecordCount
     rs2.Close
     End If
    rs.MoveNext
  
   Loop

rs.Close
作者: fan0217    时间: 2006-6-15 22:04
以下是引用andymark在2006-6-15 11:35:00的发言:


修改为下面,显示207 正常

sql = "SELECT 人员号ID  FROM 人员资料"
Set rs = CurrentDb.OpenRecordset(sql)
rs.MoveFirst
rs.MoveLast
MsgBox rs.RecordCount



DAO建立记录集,如果的是非数据表的建立的,均要加上

rs.MoveFirst
rs.MoveLast

才能正常显示记录数量。
作者: 红过刘德华    时间: 2006-6-16 08:43
完全明白 感谢 大家!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3