2012-04-19 7 views
6

を照会するとき、私はVBSからSQLデータベースを照会しようとしているが、何もレコードが見つからなかったとき、私はエラー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

ビット私の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を組み合わせる必要があります。 –

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.countと呼ぶと、EOFBOFTrueに変更されました。

私はこれが役に立つと願っています。

関連する問題