【问题标题】:EOF and BOF error when querying SQL database查询 SQL 数据库时出现 EOF 和 BOF 错误
【发布时间】:2017-08-04 02:20:27
【问题描述】:

我正在尝试从 vbs 查询 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

【问题讨论】:

    标签: sql vbscript


    【解决方案1】:

    我的 VBScript 有点生疏,但您应该能够在 Recordset 上使用 .EOF 来检查它是否在末尾:

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

    W3Schools reference

    【讨论】:

    • +1 使用 ADODB 时,其本身的 .EOF 引用就足够了,例如在 MS Access 中使用 DAO 时,您只需结合 .BOF 和 .EOF。
    【解决方案2】:

    我正在检查 Recodset.EOFRecordset.BOF 以确保两者都是 False,但每次我都收到提到的错误。这花了我几个小时,但我终于意识到,如果你调用 Recordset.Fields.countEOFBOF 将更改为 True

    我希望这会很有用。

    【讨论】:

      【解决方案3】:

      如果您有多个记录,您可能还会遇到另一个错误,如果您不想以无限循环结束,则需要移动记录指针,我还稍微缩短了您的代码,在另一方面,如果您不打算再次使用它,则需要关闭连接。

      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
      

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 2014-08-21
        • 2015-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多