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 WithEnd Sub
这是一个查询数据的子程序,分为两段:读取运报2和读取读调14,现在的问题是把任一段拿出来单独运行,速度都很快但是如果像上面这样,在一起运行,那么运调14的查询速度明显缓慢(还有时是运报2速度慢)请大家帮我看看是哪里出了问题,谢谢

解决方案 »

  1.   

    直接把d18_data的条件写到SQL语句中执行:
    strYb2 = "select d18_date,entry011,entry036 from yb2 where unit='" & SiteID & "' and d18_date='"& selDate &"'" 
      

  2.   

    看你记录集的声明:rsYb2、rsYb14
    是不是你同时打开了多个记录集?
      

  3.   

    干脆将所有要查询的内容一并取出,再按条件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 & "'" 
    只要对应字段的数据类型一致就可以了,这样可以减少数据库的操作时间
      

  4.   

    可能是内存空间问题。多个记录集同时打开,引起大量磁盘交换。建议每次查询后关闭记录集。因为当查询到的记录集很大时,及时记录集开着,MoveFirst, Find 都会引起磁盘交换,未必合算。
      

  5.   

    还是不行啊用完后我加了一句If rsYb2.State = adStateOpen Then rsYb2.Close另外:这次我只打开一个记录集,用完后关闭再打开另一个,还是不行