2012-11-22 2 views
2

아래 코드를 사용하여 테이블에서 데이터를 검색하고 있습니다. 그 결과 데이터를 그리드에 바인딩하고 있습니다. 문제는 속도와 관련이 있습니다.이 쿼리는 백엔드에서 30 ~ 40 초 걸리는 데 거의 2 ~ 3 분이 걸립니다.레코드 집합의 쿼리 실행 시간 증가 (CursorLocation)

----------- 현재 코드 ------------------

rs.ActiveConnection = con //con is connection 
con.Errors.Clear 
rs.CursorLocation = adUseServer 
rs.CursorType = adOpenDynamic 
rs.LockType = adLockOptimistic 
rs.StayInSync = True 
On Error Resume Next 
rs.Open strCmd //strCmd is query 

------- 대체

-------- 사용하여 대체 솔루션을 실행 같은 속도 : 솔루션 나는 클라이언트 ---------------

rs.ActiveConnection = con //con is connection 
con.Errors.Clear 
rs.CursorLocation = adUseClient 
rs.CursorType = adOpenKeyset 
rs.LockType = adLockBatchOptimistic 
rs.StayInSync = True 
On Error Resume Next 
rs.Open strCmd //strCmd is query 

/// 결과를 사용하여 시도 열기 레코딩 대신 ---------------

com.ActiveConnection = con //con is connection 
com.CommandType = adCmdText 
com.CommandTimeout = 500 
com.CommandText = strCmd //strCmd is query 
con.Errors.Clear 
On Error Resume Next 
Set rs= com.Execute() 

// 결과 : 속도가 빠르다하지만 나는 우는 소리 오류를 보여주는 그리드 값을 업데이트하려고하면

"런타임 오류 '3251': 현재 레코드는 updating.This을 지원하지 않습니다 공급자 또는 선택한 locktype의 제한이 될 수 있습니다. "


답변

0

나는 아마 테이블 (들) 설치/쿼리 및 문제를 일으키는하지 연결 같아요.

WHERE, JOIN, & ORDER BY 절에 나열된 모든 필드가 색인화되어 있는지 확인하십시오.

작성중인 파생 필드를 재평가하십시오. 나는 2 개의 텍스트 필드를 합친 쿼리를 보았고 새로운, -unindexed- 필드를 정렬했습니다.

쿼리와 테이블 구조를 게시하면 더 나은 아이디어를 얻을 수 있습니다.