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

ADO 查询的疑问,恳请大家帮忙

Public Sub Yb2StartCheck()

With frmMain.lstResult

    '---------读取运报2---------------------------------------------------------
    
    strYb2 = "select d18_date,entry011,entry036 from yb2 where unit='" & SiteID & "'"

    If rsYb2.State = adStateOpen Then rsYb2.Close

       rsYb2.Open strYb2, conn, adLockReadOnly
       
    If rsYb2.RecordCount = 0 Then Exit Sub
   
       rsYb2.MoveFirst
   
       rsYb2.Find ("d18_date='" & SelDate & "'")
     
       yb2yyc = rsYb2.Fields(1)
       yb2fyyc = rsYb2.Fields(2)
       
    On Error Resume Next
       
       rsYb2.MoveNext
       
       rsYb2.Find ("d18_date='" & SelDate & "'")
       
       yb2yyc = yb2yyc + rsYb2.Fields(1)
       yb2fyyc = yb2fyyc + rsYb2.Fields(2)
      
       MsgBox yb2yyc
       MsgBox yb2fyyc
       
  
    '----------读取运调14-----------------------------------------------------
    
     strYb14 = "select d18_date,entry078,entry079 from y14 where unit='" & SiteID & "'"
 
    'entry078 entry079
   
    If rsYb14.State = adStateOpen Then rsYb14.Close

        rsYb14.Open strYb14, conn, adLockReadOnly
       
    If rsYb14.RecordCount = 0 Then Exit Sub
    
        rsYb14.MoveFirst
    
        rsYb14.Find ("d18_date='" & SelDate & "'")
    
        y14yyc = rsYb14.Fields(1)
        y14fyyc = rsYb14.Fields(2)
           
        MsgBox y14yyc
        MsgBox y14fyyc

 
End With

End Sub


这是一个查询数据的子程序,分为两段:读取运报2和读取读调14,现在的问题是把任一段拿出来单独运行,速度都很快

但是如果像上面这样,在一起运行,那么运调14的查询速度明显缓慢(还有时是运报2速度慢)

请大家帮我看看是哪里出了问题,谢谢 --------------------编程问答-------------------- 直接把d18_data的条件写到SQL语句中执行:
strYb2 = "select d18_date,entry011,entry036 from yb2 where unit='" & SiteID & "' and d18_date='"& selDate &"'" 
--------------------编程问答-------------------- 这个方法我早已经试过了,现象还是一样的,但谢谢楼上的回答 --------------------编程问答-------------------- 看你记录集的声明:rsYb2、rsYb14
是不是你同时打开了多个记录集? --------------------编程问答-------------------- 干脆将所有要查询的内容一并取出,再按条件Find
strSQL = "select d18_date,entry011,entry036, from yb2 where unit='" & SiteID & "'" 
strSQL = strSQL & " Union "
strSQL = strSQL & "select d18_date,entry078,entry079 from y14 where unit='" & SiteID & "'" 
只要对应字段的数据类型一致就可以了,这样可以减少数据库的操作时间

--------------------编程问答-------------------- 可能是内存空间问题。多个记录集同时打开,引起大量磁盘交换。

建议每次查询后关闭记录集。因为当查询到的记录集很大时,及时记录集开着,MoveFirst, Find 都会引起磁盘交换,未必合算。 --------------------编程问答-------------------- 谢谢几位回答的朋友,我把记录集用完后关闭试试 --------------------编程问答-------------------- 还是不行啊

用完后我加了一句

If rsYb2.State = adStateOpen Then rsYb2.Close

另外:这次我只打开一个记录集,用完后关闭再打开另一个,还是不行
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,