2010-05-28 3 views
0

좋은 아침, 나는 다음과 같은 기능을 가지고있다 간단한 ASP 기능 질문

:

FUNCTION queryDatabaseCount(sqlStr) 
     SET queryDatabaseCountRecordSet = databaseConnection.Execute(sqlStr) 
     If queryDatabaseCountRecordSet.EOF Then 
      queryDatabaseCountRecordSet.Close 
      queryDatabaseCount = 0 
     Else 
      QueryArray = queryDatabaseCountRecordSet.GetRows 
      queryDatabaseCountRecordSet.Close 
      queryDatabaseCount = UBound(QueryArray,2) + 1 
     End If 
    END FUNCTION 

그리고 다음 dbConnect을 :

SET databaseConnection = Server.CreateObject("ADODB.Connection") 

    databaseConnection.Open "Provider=SQLOLEDB; Data Source ="&dataSource&"; Initial Catalog ="&initialCatalog&"; User Id ="&userID&"; Password="&password&"" 

그러나

나는 다음과 같은 오류가 몇 가지 이유 :

ADODB.Recordset error '800a0e78' 

오브젝트가 닫히면 조작이 허용되지 않습니다.

/UBS/DBMS/includes/blocks/block_databaseoverview.asp, 라인 (30)

사람이 어떤 제안이 있습니까?

많은 감사, 조엘

+0

dbConnect를 포함하는 곳은 어디입니까? block_databaseoverview.asp가 포함되기 전에 포함될 필요가 있습니다. –

+1

어느 라인이 30입니까? –

+0

30 번 라인은 다음과 같습니다. if queryDatabaseCountRecordSet.EOF Then –

답변

2

내가 ASP/ADO를 감동하지만 EOF 항상 신뢰할 수있는 표시되지 않는에 대한 몇 가지 막연한 기억이 있기 때문에 긴 시간 : 여담으로

If (rst.BOF And rst.EOF) Then 
-- 
Else 
-- 
End If 

, 당신이 'shouldn를 그런 식으로 레코드 수를 실제로 결정할 필요가 없습니다. 행을 리턴 한 후 계수하는 것이 아니라 계수만을 리턴하는 명령문 또는 proc를 실행하는 것이 바람직합니다.

+1

그게 내가 이걸 어떻게 성취 할 수 있었는지 좀 더 합리적으로 들리네. –

0

이미 지적 된 바와 같이 (! 코드가 메모리에 모든 데이터를로드)

function queryDatabaseCount(sTable, sSomeCondition) 
    dim sSql 
    dim Result 
    Result = 0 
    sSql = "select Count(*) as Cnt from " & sTable 
    if sSomeCondition <> "" then 
     sSql = sSql & " where " & sSomeCondition 
    end if 
    objRec.Source = sSql 
    objRec.Open 
    Result = Fld("Cnt") 
    objRec.Close 
    queryDatabaseCount = Result 

최종 기능

dim i 
SET databaseConnection = Server.CreateObject("ADODB.Connection") 
SET objRec = Server.CreateObject("ADODB.Recordset") 
objRec.ActiveConnection = databaseConnection 

i = queryDatabaseCount("MyTable", "SomeField = 1") 

databaseConnection.Close 
SET databaseConnection = nothing 
로 호출 코드 대신에 수를 사용

이 코드를 테스트하지는 않았지만 트릭을 수행해야합니다 (또는 솔루션에 매우 가까이 와야합니다).

사이드 노트와 마찬가지로이 함수에 _DBO라는 접미사를 추가하는 경향이 있습니다. 즉,이 함수는 데이터베이스 연결이 필요하다는 것을 알려줍니다. 그러나 그것은 물론 개인적인 취향 일뿐입니다.