Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 10:35   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Количество записей в БД

Добрый день! Нужно посчитать количество записей в БД по первому столбцу такого плана:
Пакет | Страница
317 1
317 2
318 1

результатом запроса должно быть число "2", т.к. в БД два разных числа. Такой запрос:
Код:
SELECT COUNT(NUMBER_PACKAGE) FROM ARCHIVE
считает все записи по столбцу, а надо чтобы только количество разных. DISTINCT не помогает. Помогите?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.09.2010, 10:40   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Код:
SELECT COUNT(*) FROM (SELECT DISTINCT oper_user FROM p_indany)
или так:
Код:
SELECT COUNT(DISTINCT oper_user) FROM p_indany
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 15.09.2010 в 11:12.
Yurk@ вне форума Ответить с цитированием
Старый 15.09.2010, 10:49   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Зачет! Спасибо, Юра!
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.09.2010, 11:07   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Код:
SELECT COUNT(NUMBER_PACKAGE) FROM ARCHIVE GROUP BY NUMBER_PACKAGE
Цитата:
Код:
SELECT COUNT(*) FROM (SELECT DISTINCT oper_user FROM p_indany
неверно проверь на наборе
317 1
317 2
318 1
319 1
319 2
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.09.2010, 11:07   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
DISTINCT
Ну не знаю... Говорят что эта директива ресурсоемкая.
Я бы писал что нить вроде:
Код:
SELECT COUNT(oper_user) FROM  p_indany group by oper_user
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2010, 11:19   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Блин, я уже голову сломал, не пойму в чем дело. Выполняю такой запрос:
Код:
procedure TForm1.RzURLLabel18Click(Sender: TObject);
begin
 Form1.pFIBDataSet5.Active:=False;
 Form1.pFIBDataSet5.SQLs.SelectSQL.Clear;
 Form1.pFIBDataSet5.SQLs.SelectSQL.Text:='SELECT COUNT(*) FROM (select distinct NUMBER_PACKAGE FROM ARCHIVE)';
 Form1.pFIBDataSet5.Active:=True;
 Form1.RzLabel1.Caption:=IntToStr(Form1.pFIBDataSet5.FieldByName('NUMBER_PACKAGE').AsInteger);
 Form1.StatusBar3.Panels[3].Text:=Form1.StatusBar2.Panels[3].Text;
end;
А мне все время выдается ошибка: "pFIBDataSet5: Field 'NUMBER_PACKAGE' not found"
Хотя, поле такое в базе есть. Что за ерунда-то?

evg_m, да вроде все правильно выводит код Юры
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 15.09.2010 в 11:29.
artemavd вне форума Ответить с цитированием
Старый 15.09.2010, 11:27   #7
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

такого поля нет в датасете

по поводу запроса
Код:
SELECT COUNT(*) FROM (select distinct NUMBER_PACKAGE FROM ARCHIVE)
ИМХО, так лучше не делать. Двойной запрос не стоит этого.
©Учиться, учиться и еще раз учиться!

Последний раз редактировалось quit; 15.09.2010 в 11:33.
quit вне форума Ответить с цитированием
Старый 15.09.2010, 11:30   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Хотя, поле такое в базе есть.
А при чем тут база?)))))))))))))))))
Ты же открываешь набор где у полей могут быть свои имена.
Например у вычисляемых полей если ты явно не задал имя СУБД дает имя совпадающее с выражением.
В твоем случае тебе нужно писать так:
Код:
Form1.pFIBDataSet5.SQLs.SelectSQL.Text:='SELECT COUNT(*) as cnt FROM (select distinct NUMBER_PACKAGE FROM ARCHIVE)';
...
 Form1.RzLabel1.Caption:=IntToStr(Form1.pFIBDataSet5.FieldByName('cnt').AsInteger);
или

Код:
 Form1.RzLabel1.Caption:=IntToStr(Form1.pFIBDataSet5.Fields[0].AsInteger);
ибо запрос SELECT COUNT(*) FROM скорее всего выкатит тебе таблицу с полем "COUNT(*)"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2010, 11:30   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
такого поля нет в датасете
Да нет же! Есть!
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.09.2010, 11:34   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да нет же! Есть!
Неа. Нет в наборе (Он же ДатаСет) такого поля
Иначе бы не ругалось
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать количество записей в БД ACCESS Dux БД в Delphi 22 31.03.2015 20:36
Количество записей в отчете timesoon Microsoft Office Access 4 09.06.2010 01:58
Получить количество записей с определенным значением RamireZ БД в Delphi 7 04.06.2010 07:12
Количество записей с 1 именем Gapro БД в Delphi 6 09.12.2009 15:31
Количество записей в FastReport4 Askat БД в Delphi 1 02.07.2007 23:37