Не удалось обработать нулевой или пустой набор записей в VB6

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

Код такой:

    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 "Есть записи"

Я пробовал изменить строку: If IsNull (Record) Then

to

Если IsNull (Record.Fields (0) .Value), то

но тогда он выдает такую ​​ошибку: -

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

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

пожалуйста, помогите мне ...


person rathu    schedule 13.01.2011    source источник


Ответы (4)


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

' 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
person Grzegorz Gierlik    schedule 13.01.2011
comment
Я думаю, что это излишне в контексте. Они, вероятно, захотят исключения, когда rs Is Nothing, потому что получение набора записей, возвращенного из vanilla SELECT, предполагает серьезную проблему среды (например, таблица была удалена). - person onedaywhen; 14.01.2011
comment
Я предполагаю, что в случае сброшенной таблицы Execute вызывает исключение ... Это излишне, например, из вопроса (простой SQL), но в случае результата от вызова хранимой процедуры или функции VB, возвращающей набор записей, это не так. - person Grzegorz Gierlik; 22.02.2012
comment
зачем мне гуглить, как сделать vb6, когда 2016 год ?? !! - person ikariw; 06.07.2016
comment
@davesol, потому что мы должны поддерживать и исправлять старое программное обеспечение !! (Сейчас 2017 год !!) - person Broken_Window; 19.05.2017

Измените это

If IsNull(Record) Then

to

If Record.RecordCount = 0 Then
person wqw    schedule 13.01.2011

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

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

Я попробую откопать какой-нибудь старый код, чтобы проверить.

person Benjol    schedule 13.01.2011

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

Если Record.BOF и Record.EOF, то

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

person rathu    schedule 14.01.2011
comment
Спасибо за ответ. Вы можете добавлять комментарии к ответам или к своему вопросу, вместо того, чтобы создавать новый «ответ». Обратите внимание, что вы также можете выразить свою признательность, проголосовав. И если на один вопрос будет дан ответ, вы можете отметить его как принятый (с помощью галочки). На мой взгляд, @Grzegorz заслуживает галочки. - person Benjol; 14.01.2011
comment
Просто проверьте EOF OR .RecordCount = 0. Нет необходимости также тестировать BOF. Тестирование как EOF, так и BOF - это то, что необходимо было сделать в более старых технологиях, например. DAO (и RDO?) К счастью, они исправили это при разработке ADO. - person onedaywhen; 14.01.2011
comment
Бенджол: извините за это ... теперь снова проверяю мои вопросы ... я был в спешке в тот день ... заметил это ... спасибо :) ... но мне интересно, что это строка If IsNull (Record) Then не работает ... Я протестировал эту строку с другим вариантом типа переменной и установил для нее значение null ... она отлично работает ... но не работает ли она с набором записей ?? - person rathu; 19.01.2011