设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3617|回复: 3
打印 上一主题 下一主题

[与其它组件] 用RecordCount返回记录集中记录数量不准确!请看看

[复制链接]
跳转到指定楼层
1#
发表于 2004-2-19 03:33:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我向大家请教一个问题

代码如下:
'------------------------------------------------
'本过程用于响应TreeView单击Node事件
'------------------------------------------------
Private Sub tvwRegion_NodeClick(ByVal Node As Object)
  
  Dim strSQLWhere As String
  
  If left(Node.Key, 4) = "root" Then
    strSQLWhere = "RegionID = '" & Mid(Node.Key, 5) & "'"
  Else
    strSQLWhere = "CustomerID = '" & Mid(Node.Key, 7) & "'"
  End If
    Me.Filter = strSQLWhere
    Me.FilterOn = True
    Debug.Print Me.Recordset.RecordCount   [B]'注:返回的记录集记录数量与后不一致,其值为1[/B]

  If Me.RecordCount=1 Then
    Common_Toolbar.InitalizeScrollButtons Toolbar1, False
  Else
    Common_Toolbar.InitalizeScrollButtons Toolbar1, True
  End If
    Debug.Print Me.Recordset.RecordCount    [B]'注:返回的记录集记录数量与后不一致, 其值为记录集中实际的记录数量[/B]
End Sub

以上代码中的判断句无法起到作用,我只好采取了另一办法(见后)来补尝
以下是我的看法:
如果在第一个debug方法前设置断点,调试执行,其值为记录集中记录数量
我对这种看法是--可能是语句执行太快,由于利用了过滤器,JET引擎查询速度较语句慢,再者由于记录集类型是动态集,JET为了优化,快速将记录显示出来,是一条一条返回记录的,而不是象快照全部读取后再返回的.
[B]以上不知分析对不对,请高手指教.不知有没有更好的方法来补尝以上BUG.[/B]

折中办法如下:
'------------------------------------------------
'本过程用于响应单击Node事件
'------------------------------------------------
Private Sub tvwRegion_NodeClick(ByVal Node As Object)
  
  Dim strSQLWhere As String
  
  If left(Node.Key, 4) = "root" Then     '通过节点关键字前缀判断其节点的层,而获得条件
    strSQLWhere = "RegionID = '" & Mid(Node.Key, 5) & "'"
  Else
    strSQLWhere = "CustomerID = '" & Mid(Node.Key, 7) & "'"
  End If
    Me.Filter = strSQLWhere
    Me.FilterOn = True
    Me.Recordset.MoveNext
'本来可用RecordCount来判断记录是否为单条,但即使记录为多条也返回数量为1,可能是太快(或是利用了了过滤器,查询速度比较慢)没法只好想了这个办法利用MoveNext方法来使系统识别
  If Me.Recordset.EOF Then
    Common_Toolbar.InitalizeScrollButtons Toolbar1, False
  Else
    Me.Recordset.MovePrevious
    Common_Toolbar.InitalizeScrollButtons Toolbar1, True
  End If
End Sub









[此贴子已经被作者于2004-2-18 19:38:55编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2004-2-19 16:05:00 | 只看该作者
是有这个问题,比较好的解决办法是首先用MOVE方法移到记录集的末尾再取记录集的数量。
3#
发表于 2004-2-19 16:14:00 | 只看该作者
又学会了一招。
4#
发表于 2009-6-22 16:21:12 | 只看该作者
是有这个问题,比较好的解决办法是首先用MOVE方法移到记录集的末尾再取记录集的数量。
zhengjialon 发表于 2004-2-19 16:05

这个办法解决了利用子窗体的模糊查询中的获取最后查询结果记录数的问题。

1、在子窗体的窗体页脚中设置字段进行统计,如记录条计数:=Count(*)
2、在主窗体做调用统计记录数字段,如查询记录计数=IIf(IsNumeric(frmChaxun1.Form!记录条计数),frmChaxun1.Form!记录条计数,0)
3、在利用子窗体筛选的查询语句中做如下代码:
   '查询语句
    Me.Refresh
    Dim strWhere As String
    strWhere = ""
   
        
    If Not IsNull(Me.帐号) Then
        strWhere = strWhere & "([帐号] like '*" & Me.帐号 & "*') AND "
    End If
    If Not IsNull(Me.备注) Then
        strWhere = strWhere & "([备注] like '*" & Me.备注 & "*') AND "
    End If            
    '==========================================================
    If Len(strWhere) > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If

    Me.frmChaxun1.Form.FilterOn = True
    Me.frmChaxun1.Form.Filter = strWhere
        
    '为了记录计数正确,使用这个语句
    Me.frmChaxun1.Form.Recordset.MoveLast
   
    '显示查询结果计数
        
    If Me.查询记录计数 = 0 Then
          MsgBox "没有查询到任何记录!", vbExclamation, "注意!"
        Else
          MsgBox "当前查询到" & Me.查询记录计数 & "条记录!", vbInformation, "注意!"
    End If
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-12 06:00 , Processed in 0.119610 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表