![]() |
|
|
![]()
|
|
| bursa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 25.2.2005 Где: Липецк Репутация: 1 Всего: 1 |
Всегда делаю во так
if Query1.FieldByName('ID').asString='' then... Может, это извращение, но зато работает надежно и всегда, при условии, что ID-идентификатор not null. А тип - м.б. и number. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
2Петрович: Да-да, согласен. Хм..
Может действительно как Бурса предлагает?..... |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Дело опять-же в наличии агрегативных функций. О каком ID при этом может идти речь? -------------------- Все знать невозможно, но хочется |
|||
|
||||
| DDX |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 31.1.2005 Где: Москва Репутация: 5 Всего: 5 |
проверять все поля на пустое значение
-- а полезно все-таки читать форум - на самых казалось бы примитивных вещах могут обнаружиться интересности --------------------
Учиться, учитьcя и ещё раз учиться |
|||
|
||||
| bursa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 25.2.2005 Где: Липецк Репутация: 1 Всего: 1 |
Редко когда бывают запросы (по крайней мере, у меня) когда не выводишь идентификатор. Выбор там или списка товаров, покупателей или лет - у всего есть идентификатор |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Повторяю еще раз. Речь идет о запросах содержащих агрегативную функцию! Для примера, в демо БД от Borland (DBDEMOS) есть таблица country.db. Там есть поля: Name - Нзвание страны Capital - Столица Continent - Континент Area - Площадь Population - Численность населения Поле Name имеет уникальный индекс. Т.е. данное поле служит тем самым ID записи. Теперь, предположим я хочу получить площадь всех государств располагающихся на континенте 'Atlantida'. Для этого, я использую запрос с агрегативной функцией Sum:
Ну а теперь, покажи мне, куда здесь вставить то самое поле Name? Это сообщение отредактировал(а) Петрович - 5.4.2005, 15:10 -------------------- Все знать невозможно, но хочется |
||||
|
|||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
Не спорьте, вы говорите о разных вещах.
К Петровичу: Раз агрегативная ф-я не имеет id (если его специально так не обозвать) значит нет и результата. Все сходится. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 2 Всего: 7 |
|
|||
|
||||
| bursa |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 25.2.2005 Где: Липецк Репутация: 1 Всего: 1 |
Вариант №1
и если с=0 .... А по нормальному должно выглядеть так
|
||||||
|
|||||||
| Петрович |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Вот это выход!
А вот это нет. Проблема остается если в Continent.db отсутствует запись Name = 'Atlantida'. А потом, нормализация БД до такой степени совсем не практична. Кстати, можно тоже самое записать и с одной таблицей Country.db:
-------------------- Все знать невозможно, но хочется |
||||||||||
|
|||||||||||
| bursa |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 25.2.2005 Где: Липецк Репутация: 1 Всего: 1 |
t2.Continent может быть null. А вот ID не может. И потому проверка t2.id_continent='' должна работать |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
В данном случае, даже если на Continent навесить условие not null, ничего не изменится.
Да это он в таблице не может быть null, а в результате запроса может! Ты попробуй. -------------------- Все знать невозможно, но хочется |
||||
|
|||||
| bursa |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 25.2.2005 Где: Липецк Репутация: 1 Всего: 1 |
Петрович, хватит спорить. Лучше давай подведем итог темы.
Итак, если у вас а) не агрегативный запрос, можете проверять наличие записей 1. При наличии ID not null - проверкой
2. Без ID -
Причем нужно учитывать, что RecordCount - фетчит весь запрос. б)запрос агрегативный 1. При наличии ID not null - проверкой
2.Без ID - в запросе использовать
Какой выбрать вариант - дело вкуса. Мне лично нравится вариант 1, так как базы у меня нормализованнные и код проги одинаков для агрегативных и неагрегативных запросов. И в случае добавления строки group by ... ничего в коде программы менять не надо. |
||||||||
|
|||||||||
| Петрович |
|
||||||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Нет давая поспорим Как никак в споре рождается истина. Вот например пока мы спор не затеяли, мне и в голову не пришло использовать Count(*).
Я смотрю ты забыл про существование:
Ну и как я уже говорил выше, с этим я согласиться не могу, поскольку считаю что это не сработает. Что касается моих выводов, то они таковы. Для проверки на наличие записей надо использовать: а) для запросов не содержащих агрегативных функций:
б) для запросов содержащих агрегативные функции: в запрос надо добавлять count(*)
в программе проверять так:
И не надо заморачиваться на степень нормализации БД, и на наличие в таблицах not null значений.
Ну пожалуй тут ты прав -------------------- Все знать невозможно, но хочется |
||||||||||||||||
|
|||||||||||||||||
![]()
|
| Правила форума "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. |