2012-04-19 27 views
6

Ben vbs bir SQL veritabanını sorgulamak için çalışıyorum sorgulama ama hiçbir kayıt bulunduğunda Bir hatayıEOF ve BOF hata SQL veritabanı

ADODB.Field olsun: BOF veya EOF True veya mevcut kayıt silinmiştir. İstenen işlem geçerli bir kayıt gerektirir.

Kaydın bulunamaması durumunda yakalamak için bir IF NOT ifadesi kullanmam gerektiğini düşünüyorum, ancak nereye gitmesi gerektiğini anlayamıyorum.

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 

cevap

5

Bit benim VBScript paslı, ama bunun sonunda olmadığını kontrol etmek Recordset'te .EOF kullanmak mümkün olmalıdır:

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'yi kullanırken, kendi başına .EOF referansı yeterlidir, örneğin MS Access'te DAO ile çalışırken yalnızca .BOF & .EOF değerini birleştirmeniz gerekir. –

0

Sen olabilirdi Başka bir hata da sonuç olarak birden fazla kayda sahip olmanız durumunda, daha sonra bitmeyen bir döngüde bitirmek istemiyorsanız kayıt cihazınızı hareket ettirmeniz gerekiyor, ayrıca kodunuzu biraz kısaltdım, diğer yandan kapatmanız gerekiyor senin bağlantın eğer tekrar kullanmayacaksan, rasyon.

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

ben hem yanlış olduğundan emin olmak için Recodset.EOF ve Recordset.BOF kontrol ediyordu, ama her bahsettiğim hatayı alıyordum. Bu bana birkaç saat sürdü ama sonunda, Recordset.Fields.count'u çağırırsanız, EOF ve BOF'un True olarak değiştirildiğini fark ettim.

Umarım bu yararlı olabilir.