当前位置:编程学习 > VB >>

请教:为什么我的rs.find方法失效?

各位大虾:
    首先我打开一个记录集,代码如下:
    l_strSQL = "SELECT UserName, Pass, TrueName,Descrip,cEmployeeNo,dept.部门" & vbNewLine
    
    l_strSQL = l_strSQL & ",CostDept.部门 as CostDeptName" & vbNewLine
    
    l_strSQL = l_strSQL & ",cAddBy" & vbNewLine
    l_strSQL = l_strSQL & ",dAddDate" & vbNewLine
    l_strSQL = l_strSQL & ",cLastBy" & vbNewLine
    l_strSQL = l_strSQL & ",dLastDate" & vbNewLine

    l_strSQL = l_strSQL & ",iAutoId" & vbNewLine
    
    l_strSQL = l_strSQL & "FROM users " & vbNewLine
    
    l_strSQL = l_strSQL & "left join Employees" & vbNewLine
    l_strSQL = l_strSQL & "on Users.cEmployeeNo=rtrim(Employees.员工编号)" & vbNewLine
    l_strSQL = l_strSQL & "left join dept" & vbNewLine
    l_strSQL = l_strSQL & "on rtrim(Employees.部门编号)=rtrim(dept.编号)" & vbNewLine
    
    l_strSQL = l_strSQL & "left join dept CostDept" & vbNewLine
    l_strSQL = l_strSQL & "on rtrim(users.cCostDeptNo)=rtrim(CostDept.编号)" & vbNewLine
    
    l_strSQL = l_strSQL & "order by users.iAutoId" & vbNewLine
    
    Set m_rs = New ADODB.Recordset
    
    conn.CursorLocation = adUseClient
    m_rs.Open l_strSQL, conn, adOpenStatic, adLockReadOnly
    conn.CursorLocation = adUseServer


    然后在系统的某一处运行:m_rs.find "iAutoId=7",却定位不到这条记录呢?(m_rs.EOF=True)
    但在查询分析器中是可以查到这条记录的
     注:iAutoId是唯一值

     请高手帮忙解决,谢谢!


--------------------编程问答-------------------- 索引支持以及查找、排序和筛选

可能是游标设置问题,请参阅以下内容:


'对字段的索引可极大增强新 Recordset 对象的 Find 方法以及 Sort 和 Filter 属性的性能。在 ADO 2.0 中,可通
'过设置 Field 对象的动态 Optimize 属性来为它创建内部索引。将 CursorLocation 设置为 adUseClient 时,该动
'态属性被添加到 Field 对象的 Properties 集合中。请注意该索引内置于 ADO 2.0,因此无法对它进行访问或用于其
'他方面。

'Sort 属性决定移动 Recordset 行的顺序;Filter 属性决定移动行时哪些行是可用的;Find 方法可在 Recordset 已
'索引的列(字段)中快速找出数值。
--------------------编程问答-------------------- 能否清晰一些啊,具体该如何解决?你的意思是去掉游标的设置就可以了吗?
真的没有人知道吗?急啊 --------------------编程问答-------------------- 我曾经尝试用Filter来解决这个问题,但问题是用了Filter之后Rs.movenext等移动的方法就没有用了 --------------------编程问答-------------------- 不好意思,以上问题已经可以了
但出现了另外一个问题,就是ms_find "iAutoId=7"方法运行之后,再运行m_rs.moveprevious方法就不行了
但m_rs.movenext就可以

是什么原因啊? --------------------编程问答--------------------
Set m_rs = New ADODB.Recordset 
    
'conn.CursorLocation = adUseClient

'第3、4个参数,同样的值在不同的数据库中表现会不一样,用不同组合试试
m_rs.Open l_strSQL, conn, adOpenKeyset, adLockReadOnly, adCmdText

'直接将记录集和连接对象断开,就不会受到 conn 变更的影响
Set m_rs.ActiveConnection = Nothing

'conn.CursorLocation= adUseServer 


已打开的连接更改 CursorLocation 是无效的:
MSDN:
This property setting affects connections established only after the property has been set. Changing the CursorLocation property has no effect on existing connections.
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,