2012-04-19 2 views
6

Я пытаюсь сделать запрос к базе данных SQL из VBS, но если запись не найдена, я получаю сообщение об ошибкеEOF и BOF ошибка при запросе SQL базы данных

ADODB.Field: Либо BOF или EOF имеет значение ИСТИНА, или текущая запись была удалена. Запрошенная операция требует текущей записи.

Думаю, мне нужно использовать инструкцию IF NOT для захвата, если запись не найдена, но я не могу понять, куда ей нужно идти.

Do Until objFile.AtEndofStream 
    strAppName = objFile.ReadLine 

    ConnString="DRIVER={SQL Server};SERVER=aardvark002;UID=***;PWD=***;DATABASE=DEW_Users" 
    SQL = "USE Win7AppData SELECT " & Chr(34) & strCountry & Chr(34) & " FROM AppsByCountry WHERE Application = '" & strAppName & "'" 

    Set Connection = CreateObject("ADODB.Connection") 
    Set Recordset = CreateObject("ADODB.Recordset") 
    Connection.Open ConnString 
    Recordset.Open SQL,Connection 
    strApproval = Recordset(strCountry) 
    If StrApproval = "YES" Then 
     strApproval = "Approved" 
    Else 
     strApproval = "Denied" 
    End If 
    objExcel.Cells(intRow, 1).Value = strAppname 
    objExcel.Cells(intRow, 2).Value = strCountry 
    objExcel.Cells(intRow, 3).Value = strApproval 
    intRow = intRow + 1 
Loop 

ответ

5

Bit ржавый на моей VBScript, но вы должны быть в состоянии использовать .EOF на Recordset, чтобы проверить, если это в конце:

Recordset.Open SQL,Connection 
If Recordset.EOF = false Then 
    ' have some rows, do what you want with them 
End If 

W3Schools reference

+0

+1 При использовании ADODB достаточно указать ссылку .EOF на свой собственный, вам нужно будет объединить .BOF & .EOF при работе с DAO в MS Access, например. –

0

Вы могли бы другая ошибка также в случае, если у вас есть более одной записи в качестве результата, тогда вам нужно переместить свой рекордный указатель, если вы не хотите заканчиваться бесконечным циклом, я также немного сократил ваш код, с другой стороны, вам нужно закрыть твоя связь если вы не собираетесь использовать его снова.

ConnString="DRIVER={SQL Server};SERVER=aardvark002;UID=***;PWD=***;DATABASE=DEW_Users" 
Set Connection = CreateObject("ADODB.Connection") 
Connection.Open ConnString 
Do Until objFile.AtEndofStream 
    strAppName = objFile.ReadLine 
    SQL = "USE Win7AppData SELECT " & Chr(34) & strCountry & Chr(34) & " FROM AppsByCountry WHERE Application = '" & strAppName & "'" 
    Set Recordset = Connection.Execute(SQL) 
    Do While not Recordset.EOF 
    strApproval = Recordset(strCountry) 
    If StrApproval = "YES" Then 
     strApproval = "Approved" 
    Else 
     strApproval = "Denied" 
    End If 
    objExcel.Cells(intRow, 1).Value = strAppname 
    objExcel.Cells(intRow, 2).Value = strCountry 
    objExcel.Cells(intRow, 3).Value = strApproval 
    intRow = intRow + 1 
    Recordset.MoveNext 
    End If 
Loop 
Connection.Close 
Set Connection = nothing 
0

Я проверял Recodset.EOF и Recordset.BOF, чтобы убедиться, что оба ложны, но каждый раз, когда я получал указанную ошибку. Это заняло у меня несколько часов, но я, наконец, понял, что если вы назовете Recordset.Fields.count, то EOF и BOF изменены на True.

Надеюсь, это может быть полезно.

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