Не удалось обработать нулевой или пустой набор записей в VB6 - PullRequest
1 голос
/ 13 января 2011

Это был день, когда я ломал голову, чтобы решить эту проблему ... Я нашел решения, но ничего не решило мою проблему ...

Код такой:

    Private Sub guh()
Dim oConn As Connection
Dim Record As Recordset
Dim SqlStr As String

SqlStr = "select * from dbo.Msg_History where Client_ID='2' AND Update_Msg='4'"
Set oConn = New Connection

With oConn
.CursorLocation = adUseClient
.CommandTimeout = 0
.Open "Provider=SQLOLEDB;Server=127.0.0.1;Initial Catalog=Table_Msg;UID=Admin;PWD="

End With

Set Record = oConn.Execute(SqlStr)

If IsNull(Record) Then
    MsgBox "There are no records"

    Else
    MsgBox "There are records"

End If

oConn.Close
Set oConn = Nothing
End Sub

Оператор sql возвращает нулевой набор записей ... когда я запускаю код ... он всегда переходит в условие "else", которое представляет собой строку MsgBox "Есть записи"

Я пытался изменить строку: если IsNull (запись), то

до

Если IsNull (Record.Fields (0). Значение), то

но затем выдает ошибку вроде этого: -

ошибка: либо BOF, либо EOF имеет значение true, либо текущая запись была удалена. Запрошенная операция требует текущей записи.

Я проверил http://support.microsoft.com/kb/304267 и использую eof и bof для условия ... n все равно получаю ту же ошибку ..

пожалуйста, кто-нибудь, помогите мне ...

Ответы [ 4 ]

3 голосов
/ 13 января 2011

Измените

If IsNull(Record) Then

на

If Record.RecordCount = 0 Then
3 голосов
/ 13 января 2011

Я бы использовал что-то вроде этого:

' returns true if there is non empty recordset
Function isRSExists(rs) AS boolean
  ' has to exists as object
  If Not rs Is Nothing Then
    ' has to be opened with recordset (could be empty)
    If rs.State > 0 Then
      ' has to have some records
      If Not rs.EOF Then
         isRSExists = true
      End If
    End If
  End If
End Function
1 голос
/ 13 января 2011

Я думаю, что вы можете проверить на if not Record.Eof.

Если я правильно помню (это было давно), он работает только с одним типом курсора, я думаю, это должно быть adUseServer. ( РЕДАКТИРОВАТЬ Нет, на самом деле это RecordCount имеет эту проблему )

Я попытаюсь найти старый код для проверки.

0 голосов
/ 14 января 2011

Спасибо за ответы, ребята: D ... все равно протестирую позже ... Я не проверял все ваши предложения в то время, когда я публикую этот ответ ... Я протестировал это: -

Если Record.BOF и Record.EOF Тогда

, и это работает ...

...