Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос ничего не вернул, Как определить? 
:(
    Опции темы
fess
Дата 28.3.2005, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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, которое позволяет определить это, но я его не нешёл smile smile
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Alex
Дата 28.3.2005, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Код

if Query.Fields[0].IsNull then // Запрос ничего не вернул



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Петрович
Дата 28.3.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(Alex @ 28.3.2005, 23:49)
1:

if Query.Fields[0].IsNull then // Запрос ничего не вернул

Это не хорошо.
В первом поле первой записи не пустого множества записей вполне иожет быть Null.
Правильнее будет так:
Код

if Query.IsEmpty then // Запрос ничего не вернул

smile


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Alex
Дата 28.3.2005, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
fess
Дата 29.3.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

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



Цитата
Код

if Query.IsEmpty then // Запрос ничего не вернул

Не срабатывает! Я пишу этот код после Query.Open (всегда возвращает false), если после Query.ExecSql, то всегда - true.
В чём прикол? Может, в другом месте надо писать?

Цитата

Код

if Query.Fields[0].IsNull then // Запрос ничего не вернул


Это работает (спасибо,Alex), но я согласен с Петровичем, что это не совсем корректно.

--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Alex
Дата 29.3.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



fess, Мой код очень не корректный. Покажи свой код или выложи проект, если он не большой. Код Петровича должен работать.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Петрович
Дата 29.3.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(fess @ 29.3.2005, 10:44)
Цитата
Код Pascal/Delphi
if Query.IsEmpty then // Запрос ничего не вернул
Не срабатывает! Я пишу этот код после Query.Open (всегда возвращает false), если после Query.ExecSql, то всегда - true.
В чём прикол? Может, в другом месте надо писать?

Прикол наверное в твоем коде. smile
Вот тебе пример:
Код

procedure TTestForm.Button1Click(Sender: TObject);
var  q :TQuery;
begin //
  q := TQuery.Create(Self);
  try
    q.DatabaseName := 'DBDEMOS';

    // эксперимент 0 - нет записей
    q.SQL.Text := 'SELECT * FROM country.db WHERE name = ''Petrovich Kingdom''';
    q.Open;
    if  q.IsEmpty  then
      Log('0 нет записей')
    else
      Log('0 есть записи')
    ;
    q.Close;

    // эксперимент 1 - одна запись
    q.SQL.Text := 'SELECT * FROM country.db WHERE name = ''Canada''';
    q.Open;
    if  q.IsEmpty  then
      Log('1 нет записей')
    else
      Log('1 есть записи')
    ;
    q.Close;

    // эксперимент 2 - много записей
    q.SQL.Text := 'SELECT * FROM country.db';
    q.Open;
    if  q.IsEmpty  then
      Log('2 нет записей')
    else
      Log('2 есть записи')
    ;
    q.Close;

  finally
    q.Free;
  end;
end;

Так вот, лично у меня он пишет следующее:
Цитата
0 нет записей
1 есть записи
2 есть записи


Это сообщение отредактировал(а) Петрович - 29.3.2005, 11:59


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
fess
Дата 29.3.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

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



Петрович - код работает, но не на всех запросах (хотя странно).
Например, если добавить сумму и групировку (как в моём запросе), то это перестаёт работать.
Вот изменённый код:

Код

procedure TTestForm.Button1Click(Sender: TObject);
var  q :TQuery;
begin //
  q := TQuery.Create(Self);
  try
    q.DatabaseName := 'DBDEMOS';
    // эксперимент 0 - нет записей
    q.SQL.Text :='SELECT Sum(Area), name FROM country.db WHERE Continent = ''Petrovich Kingdom'' Group By name';
    q.Open;
    if  q.IsEmpty  then
      Log('0 нет записей')
    else
      Log('0 есть записи')
    ;
    q.Close;
    // эксперимент 1 - одна запись
    q.SQL.Text := 'SELECT * FROM country.db WHERE name = ''Canada''';
    q.Open;
    if  q.IsEmpty  then
      Log('1 нет записей')
    else
      Log('1 есть записи')
    ;
    q.Close;
    // эксперимент 2 - много записей
    q.SQL.Text := 'SELECT * FROM country.db';
    q.Open;
    if  q.IsEmpty  then
      Log('2 нет записей')
    else
      Log('2 есть записи')
    ;
    q.Close;
  finally
    q.Free;
  end;
end;


После этого лог выглядит следующим образом:

Цитата
0 есть записи
1 есть записи
2 есть записи


Где может быть ошибка?
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Alex
Дата 29.3.2005, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Если в запросе имеются агригативные функции, то он по определению всегда возвращает результат. Т.к. функция возвращает результат.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
fess
Дата 29.3.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

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



Цитата
Если в запросе имеются агригативные функции, то он по определению всегда возвращает результат. Т.к. функция возвращает результат.

И чего делать в это случае?
Если подсоединить всё это к DBGrid'у, то там будет пустая строка без каких-либо данных.
--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Alex
Дата 29.3.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Цитата(fess @ 29.3.2005, 17:33)
И чего делать в это случае?
Если подсоединить всё это к DBGrid'у, то там будет пустая строка без каких-либо данных.

Здесь тогда насколько я понимаю нужно только на null проверять.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Петрович
Дата 29.3.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(Alex @ 29.3.2005, 18:42)
Здесь тогда насколько я понимаю нужно только на null проверять.

Ну тогда необходимо проверять на null все поля!
Потому как например если в ту же country.db добавить запись у которой поле name = 'A' а поле Area = NULL то для очевидно не пустого запроса:
Код
SELECT Sum(Area), name FROM country.db Group By name

результат Query.Fields[0].IsNull будет True.

Это сообщение отредактировал(а) Петрович - 29.3.2005, 20:48


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
fess
Дата 29.3.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.2.2005
Где: г. Мурманск, Росс ия

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



Спасибо Alex и Петрович за помощь!

to Alex, наверное, нужно дописать в FAQ DELPHI-DLP-002445 уточнение по поводу применения агрегатных функций в запросе.

--------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом.
PM MAIL ICQ   Вверх
Bes
Дата 5.4.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А так не пробовали?
Query.active:=true;
if query.recordcount=0 then ничего нет else есть.
По-моему всегда работает.
PM MAIL   Вверх
Петрович
Дата 5.4.2005, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(Bes @ 5.4.2005, 08:21)
По-моему всегда работает.

Работает то всегда. Но, проблема в том, что как писал выше Alex, если в запросе имеется агрегативная функция, то запрос всегда возвращает как минимум одну запись. Соответственно и RecordCount будет >= 1

Это сообщение отредактировал(а) Петрович - 5.4.2005, 08:30


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
bursa
Дата 5.4.2005, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всегда делаю во так
if Query1.FieldByName('ID').asString='' then...
Может, это извращение, но зато работает надежно и всегда, при условии, что ID-идентификатор not null. А тип - м.б. и number.

PM MAIL   Вверх
Bes
Дата 5.4.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2Петрович: Да-да, согласен. Хм..
Может действительно как Бурса предлагает?.....
PM MAIL   Вверх
Петрович
Дата 5.4.2005, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(bursa @ 5.4.2005, 09:43)
Всегда делаю во так
if Query1.FieldByName('ID').asString='' then...
Может, это извращение, но зато работает надежно и всегда, при условии, что ID-идентификатор not null. А тип - м.б. и number.

Дело опять-же в наличии агрегативных функций. О каком ID при этом может идти речь? smile



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
DDX
Дата 5.4.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 31.1.2005
Где: Москва

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



проверять все поля на пустое значение
--
а полезно все-таки читать форум - на самых казалось бы примитивных вещах могут обнаружиться интересности
--------------------
Учиться, учитьcя и ещё раз учиться  
PM MAIL WWW   Вверх
bursa
Дата 5.4.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
О каком ID при этом может идти речь?

Редко когда бывают запросы (по крайней мере, у меня) когда не выводишь идентификатор.
Выбор там или списка товаров, покупателей или лет - у всего есть идентификатор

PM MAIL   Вверх
Петрович
Дата 5.4.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(bursa @ 5.4.2005, 13:52)
Редко когда бывают запросы (по крайней мере, у меня) когда не выводишь идентификатор.

Повторяю еще раз. Речь идет о запросах содержащих агрегативную функцию!
Для примера, в демо БД от Borland (DBDEMOS) есть таблица country.db. Там есть поля:
Name - Нзвание страны
Capital - Столица
Continent - Континент
Area - Площадь
Population - Численность населения
Поле Name имеет уникальный индекс. Т.е. данное поле служит тем самым ID записи.
Теперь, предположим я хочу получить площадь всех государств располагающихся на континенте 'Atlantida'. Для этого, я использую запрос с агрегативной функцией Sum:
Код
SELECT Sum(Area) FROM Country.db WHERE Continent = 'Atlantida'


Ну а теперь, покажи мне, куда здесь вставить то самое поле Name?

Это сообщение отредактировал(а) Петрович - 5.4.2005, 15:10


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Bes
Дата 5.4.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не спорьте, вы говорите о разных вещах. smile Короче типа я так понял бурсу: нет id - нет результата.
К Петровичу: Раз агрегативная ф-я не имеет id (если его специально так не обозвать) значит нет и результата. Все сходится.
PM MAIL   Вверх
Петрович
Дата 5.4.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(Bes @ 5.4.2005, 16:20)
Раз агрегативная ф-я не имеет id (если его специально так не обозвать) значит нет и результата. Все сходится.

smile


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Bes
Дата 5.4.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile Это типа "ни хрена себе........." ? smile
PM MAIL   Вверх
bursa
Дата 5.4.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Ну а теперь, покажи мне, куда здесь вставить то самое поле Name

Вариант №1
Код

SELECT Count(*) as c, Sum(Area) FROM Country.db WHERE Continent = 'Atlantida'

и если с=0 ....
А по нормальному должно выглядеть так
Код

SELECT t2.id_continent, t2.name, Sum(Area) FROM Country.db t1 , Continent.db t2 
WHERE t2.Name = 'Atlantida'
and t1.id_continent=t2.id_continent
group by t2.id_continent, t2.name






PM MAIL   Вверх
Петрович
Дата 5.4.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(bursa @ 5.4.2005, 17:04)
Вариант №1
Код

SELECT Count(*) as c, Sum(Area) FROM Country.db WHERE Continent = 'Atlantida'

Вот это выход!

Цитата(bursa @ 5.4.2005, 17:04)
А по нормальному должно выглядеть так
Код

SELECT t2.id_continent, t2.name, Sum(Area) FROM Country.db t1 , Continent.db t2 
WHERE t2.Name = 'Atlantida'
and t1.id_continent=t2.id_continent
group by t2.id_continent, t2.name

А вот это нет. Проблема остается если в Continent.db отсутствует запись Name = 'Atlantida'.
А потом, нормализация БД до такой степени совсем не практична.
Кстати, можно тоже самое записать и с одной таблицей Country.db:
Код

SELECT t2.Continent, Sum(Area) FROM Country.db t1 , Country.db t2 
WHERE t2.Continent = 'Atlantida'
and t1.Continent=t2.Continent
group by t2.Continent



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
bursa
Дата 5.4.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
можно тоже самое записать и с одной таблицей Country.db

t2.Continent может быть null. А вот ID не может. И потому проверка
t2.id_continent='' должна работать


PM MAIL   Вверх
Петрович
Дата 5.4.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(bursa @ 5.4.2005, 17:38)
t2.Continent может быть null.

В данном случае, даже если на Continent навесить условие not null, ничего не изменится.

Цитата(bursa @ 5.4.2005, 17:38)
А вот ID не может. И потому проверка
t2.id_continent='' должна работать

Да это он в таблице не может быть null, а в результате запроса может! Ты попробуй.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
bursa
Дата 6.4.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Петрович, хватит спорить. Лучше давай подведем итог темы.
Итак, если у вас
а) не агрегативный запрос, можете проверять наличие записей
1. При наличии ID not null - проверкой
Код

if Query1.FieldByName('ID').asString= '' then... 

2. Без ID -
Цитата(fess @ 28.3.2005, 21:08)
SomeDataSet.DataSet.EOF
SomeDataSet.DataSet.RecordCount

Причем нужно учитывать, что RecordCount - фетчит весь запрос.

б)запрос агрегативный
1. При наличии ID not null - проверкой
Код

if Query1.FieldByName('ID').asString= '' then... 

2.Без ID - в запросе использовать
Код

select count(*), .... from


Какой выбрать вариант - дело вкуса.
Мне лично нравится вариант 1, так как базы у меня нормализованнные и код проги одинаков для агрегативных и неагрегативных запросов. И в случае добавления строки group by ... ничего в коде программы менять не надо.


PM MAIL   Вверх
Петрович
Дата 6.4.2005, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата(bursa @ 6.4.2005, 09:13)
Петрович, хватит спорить. Лучше давай подведем итог темы.

Нет давая поспорим smile
Как никак в споре рождается истина. Вот например пока мы спор не затеяли, мне и в голову не пришло использовать Count(*).

Цитата(bursa @ 6.4.2005, 09:13)
2. Без ID -

Цитата (fess @ 28.3.2005, 21:08)
SomeDataSet.DataSet.EOF
SomeDataSet.DataSet.RecordCount

Я смотрю ты забыл про существование:
Код

SomeDataSet.IsEmpty


Цитата(bursa @ 6.4.2005, 09:13)
Мне лично нравится вариант 1, так как базы у меня нормализованнные и код проги одинаков для агрегативных и неагрегативных запросов. И в случае добавления строки group by ... ничего в коде программы менять не надо.

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

Что касается моих выводов, то они таковы.

Для проверки на наличие записей надо использовать:

а) для запросов не содержащих агрегативных функций:
Код
SomeDataSet.IsEmpty


б) для запросов содержащих агрегативные функции:
в запрос надо добавлять count(*)
Код
select count(*), .... from

в программе проверять так:
Код
SomeDataSet.Fields[0].AsInteger > 0


И не надо заморачиваться на степень нормализации БД, и на наличие в таблицах not null значений.

Цитата(bursa @ 6.4.2005, 09:13)
Петрович, хватит спорить.

Ну пожалуй тут ты прав smile. Мы оба высказались, т.е. для себя мы все решили. А остальные, пусть сами выбирают.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Medved
Дата 10.4.2005, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Можно использовать свойство RecordCount у всех потомков класса TDataSet.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex
Дата 11.4.2005, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Pegas, без обид. Тему прочитай всю smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Medved
Дата 11.4.2005, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Нормально. Я согласен с Перовичем, что лучше использовать функцию Count().


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


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

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


 




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


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

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