7

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
4

3 に答える 3

6

私の VBScript では少し錆びていますが、Recordset で .EOF を使用して、最後にあるかどうかを確認できるはずです。

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

W3School リファレンス

于 2012-04-19T09:52:51.067 に答える
1

Recodset.EOFとをチェックしてRecordset.BOF、両方が False であることを確認していましたが、前述のエラーが発生するたびに発生しました。それには数時間かかりましたが、 を呼び出すと と が に変更されることに最終的にRecordset.Fields.count気付きEOFましBOFTrue

これが役立つことを願っています。

于 2017-08-03T17:15:21.863 に答える
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
于 2012-04-19T23:38:55.980 に答える