2012-04-19 16 views
6

Estoy tratando de consultar una base de datos SQL desde VBS pero cuando se encuentra ningún registro que obtenga un errorerror EOF y BOF al consultar la base de datos SQL

ADODB.Field: BOF o EOF es True, o el registro actual ha sido eliminado. La operación solicitada requiere un registro actual.

Creo que necesito usar una instrucción IF NOT para capturar si no se encuentra el registro pero no puedo averiguar a dónde debe ir.

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 

Respuesta

5

poco oxidado en mi VBScript, pero usted debería ser capaz de utilizar .EOF en el conjunto de registros para comprobar si es al final:

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

W3Schools reference

+0

+1 Al usar ADODB, la referencia .EOF es suficiente, solo necesitaría combinar .BOF y .EOF cuando trabaje con DAO en MS Access, por ejemplo. –

0

Usted podría tener otro error también en caso de que tengas más de un registro como resultado, entonces necesitas mover tu recordpointer si no quieres terminar en un bucle infinito, también acorté un poco tu código, por otro lado debes cerrar tu conn ección si no vas a usarlo de nuevo.

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

Estaba revisando el Recodset.EOF y Recordset.BOF para asegurarse de que ambos son falsos, pero cada vez que estaba recibiendo el error mencionado. Eso me llevó algunas horas, pero finalmente me di cuenta de que si llamas al Recordset.Fields.count, EOF y BOF se cambian a True.

Espero que esto pueda ser útil.

Cuestiones relacionadas