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 

И следующую БДСВЯЗЬ:

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

Кто-нибудь есть какие-либо предложения?

Большое спасибо, Joel

+0

Куда вы включаете dbConnect? Он должен быть включен до включения блока block_databaseoverview.asp. –

+1

Какая линия 30? –

+0

Строка 30 is: Если queryDatabaseCountRecordSet.EOF Then –

ответ

2

Давненько я прикоснулся жерех/суматоху, но у меня есть некоторые смутные воспоминания о EOF не всегда быть надежным индикатором:

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

Как и в сторону, вы не должны» t действительно определить количество записей таким образом. Предпочтительно выполнять оператор или 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 к этой функции (что означает «База данных открыта»), сообщив мне, что эта функция ожидает открытого подключения к базе данных. Но это, конечно, личное предпочтение.

Смежные вопросы