Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание ошибки при выборе данных 
:(
    Опции темы
Igor Graf
Дата 13.6.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 10.2.2005

Репутация: нет
Всего: нет



Привет всем большой!

У меня появился один, наверное простой вопрос, но че-то я никак не могу понять как это сделать, задача такая:

Значит есть у меня бд, с данными, я подключаю

Код

Data2.DatabaseName = "c:\Reyting.mdb"
Data2.RecordSource = "select * from Info where fieldsname = " & str5 & ""
Data2.Refresh


ну значит данные выбираются и выводятся на форму, теперь надо предусмотреть тот момент, когда данных нет, я делаю так:

Код

if data2.recordset.fields!fileldsname is nothing then
msgbox("ля ля")
end if

но че-то он этоусловие проскакивает, как быть, подскажите


с уважением Graf
PM MAIL   Вверх
Naghual
Дата 13.6.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Что такое
Цитата
когда данных нет
?
Если реч идет об отсутствии записей в таблице, то нужно пользоватся свойствами RecordCount и EOF объекта Recordset.
Если говорить о незаполненных полях, то инструкция is nothing не сработает. Она служит для проверки содержания Объекта!
Проверяй через Is Null и/или Len(Trim$(data2.recordset.fields!fileldsname)) = 0


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Igor Graf
Дата 13.6.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 10.2.2005

Репутация: нет
Всего: нет




Naghual спасибо, за помощь!

В данном случае речь идет именно об отсутствии записи в таблице info, из которой я выбираю записи.
Буду пробовать RecordCount
Еще раз спасибо

С уважением Graf
PM MAIL   Вверх
Гость_boevik
Дата 13.6.2005, 14:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Проверяй рекордсет на EOF и BOF. Так как RecordCount не всегда дает верную информацию
Код

Data2.DatabaseName = "c:\Reyting.mdb"
Data2.RecordSource = "select * from Info where fieldsname = " & str5 & ""
Data2.Refresh
if data2.recordset.EOF = TRUE and data2.recordset.BOF = TRUE then
msgbox("ля ля")
end if

  Вверх
Naghual
Дата 13.6.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Гость_boevik :
Это когда-же RecordCount дает не верную информацию?


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
boevik
Дата 14.6.2005, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



К примеру самый простой случай когда все параметры берутся по умолчанию:
Код

Dim cn as New connection
Dim rs as recordset

cn.open ....
set rs = cn.execute "select ..."
Msgbox rs.recordcount
...


Во всех случаях, не зависимо есть данные или нет, recordcount равен -1.

Выдержка из MSDN:
Цитата
Use the RecordCount property to find out how many records are in a Recordset object. The property returns -1 when ADO cannot determine the number of records or if the provider or cursor type does not support RecordCount. Reading the RecordCount property on a closed Recordset causes an error.




--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Igor Graf
Дата 14.6.2005, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 10.2.2005

Репутация: нет
Всего: нет



Большое спасибо boevik, весьма понятно и доступно

С уважением Graf

Это сообщение отредактировал(а) Igor Graf - 14.6.2005, 09:05
PM MAIL   Вверх
Naghual
Дата 14.6.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



boevik:
Вы батенька MSDN сильно далеко читаете! smile
А там сказано, что RecordCount нужно использовать после инструкций MoveLast и MoveFirst. Вот тогда он не будет вызывать описанные Вами выше проблемы.
Тоесть после каждого Открытия Recordset, добавления или удаления из него данных необходимо выполнять такой код:
Код

Recordset.MoveLast
Recordset.MoveFirst

И вот тогда RecordCount будет именно правильный.

Говоря по большому счету, RecordCount они придумали только для удобства и в самый последний момент. И как всегда недоработали! smile
А сами то пользуются EOF!



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
boevik
Дата 14.6.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Naghual,
1) ты просил пример когда RecordCount не работает, пример приведен.
2) Где сказано, что надо выполнять Recordset.MoveLast: Recordset.MoveFirst?
3) В примере приведенном Igor Graf, не используется Recordset.MoveLast: Recordset.MoveFirst, да и проблематично его выполнять на пустом recordset-e.
4) Не всегда можно выполнить Recordset.MoveFirst. (В случае когда CursorType = adOpenForwardOnly)

Из все выше сказаного следует, что применять RecordCount довольно проблематично, но возможно.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Naghual
Дата 14.6.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Согласен. Что тут скажеш.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.