2012-04-19 222 views
6

我想查询从VBS SQL数据库,但在没有找到记录我得到一个错误EOF和BOF错误,当SQL数据库

ADODB.Field:BOF或EOF为True,或当前记录已被删除。请求的操作需要当前记录。

我想我需要使用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

有点生疏了我的VBScript,但你应该能够使用.EOF的记录,以检查它是否在最后:

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引用就足够了,例如,在MS Access中使用DAO时,只需要组合.BOF&.EOF。 – 2012-04-20 07:56:10

0

你可以有如果你有多条记录作为结果,另一个错误也会发生,那么如果你不想以无限循环结束,那么你需要移动记录指针,另外我还缩短了你的代码,另一方面你需要关闭你的conn如果你不打算再次使用它。

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.EOFRecordset.BOF,以确保这两个都是假的,但每次我收到提到的错误。这花了我几个小时,但我终于明白,如​​果你拨打Recordset.Fields.countEOFBOF改为True

我希望这可以是有用的。