![]() |
|
|
![]()
|
|
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Я где-то затупил...
Работаю с Paradox через BDE. Использую компонент TQuery для создания и выполнения запроса. Затем этот TQuery подсоединяю к TDataSet, через который осуществляю доступ к результату запроса. Как мне определить, что запрос Select ничего не вернул? Пробовал: 0. SomeDataSet.DataSet.EOF 1. SomeDataSet.DataSet.RecordCount (значение равно единице, даже если запрос ничего не вернул). 2. SomeDataSet.DataSet.RecordSize=0 (никогда не равно нулю) 3. Считывать данные по полям и проверять их на nil - тоже ничего не получилось. Наверняка есть какое-то свойство у TDataSet или у TQuery, которое позволяет определить это, но я его не нешёл --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Это не хорошо. В первом поле первой записи не пустого множества записей вполне иожет быть Null. Правильнее будет так:
-------------------- Все знать невозможно, но хочется |
||||
|
|||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| fess |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Не срабатывает! Я пишу этот код после Query.Open (всегда возвращает false), если после Query.ExecSql, то всегда - true. В чём прикол? Может, в другом месте надо писать?
Это работает (спасибо,Alex), но я согласен с Петровичем, что это не совсем корректно. --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
||||||||
|
|||||||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
fess, Мой код очень не корректный. Покажи свой код или выложи проект, если он не большой. Код Петровича должен работать.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Петрович |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Прикол наверное в твоем коде. Вот тебе пример:
Так вот, лично у меня он пишет следующее:
Это сообщение отредактировал(а) Петрович - 29.3.2005, 11:59 -------------------- Все знать невозможно, но хочется |
||||||
|
|||||||
| fess |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Петрович - код работает, но не на всех запросах (хотя странно).
Например, если добавить сумму и групировку (как в моём запросе), то это перестаёт работать. Вот изменённый код:
После этого лог выглядит следующим образом:
Где может быть ошибка? --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
||||
|
|||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Если в запросе имеются агригативные функции, то он по определению всегда возвращает результат. Т.к. функция возвращает результат.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
И чего делать в это случае? Если подсоединить всё это к DBGrid'у, то там будет пустая строка без каких-либо данных. --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Здесь тогда насколько я понимаю нужно только на null проверять. -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Ну тогда необходимо проверять на null все поля! Потому как например если в ту же country.db добавить запись у которой поле name = 'A' а поле Area = NULL то для очевидно не пустого запроса:
результат Query.Fields[0].IsNull будет True. Это сообщение отредактировал(а) Петрович - 29.3.2005, 20:48 -------------------- Все знать невозможно, но хочется |
||||
|
|||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Спасибо Alex и Петрович за помощь!
to Alex, наверное, нужно дописать в FAQ DELPHI-DLP-002445 уточнение по поводу применения агрегатных функций в запросе. --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
А так не пробовали?
Query.active:=true; if query.recordcount=0 then ничего нет else есть. По-моему всегда работает. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Работает то всегда. Но, проблема в том, что как писал выше Alex, если в запросе имеется агрегативная функция, то запрос всегда возвращает как минимум одну запись. Соответственно и RecordCount будет >= 1 Это сообщение отредактировал(а) Петрович - 5.4.2005, 08:30 -------------------- Все знать невозможно, но хочется |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |