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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 14:51   #1
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию посчитать записи по дате.

приветствую. проблема казалось бы элементарна, но что-то определенно не так. нужно посчитать количество записей в таблице за указанную дату. вот как я это делаю
Код:
var
 i: shortint;
begin
 i:=0;
 form1.ADOQuery1.First;
 while not form1.ADOQuery1.Eof do
 begin
  if form1.ADOQuery1.FieldValues['Date']='09.04.2009' then
  begin
   i:=i+1;
   edit3.Text:=IntToStr(i);
  end
  else
   edit3.Text:='0';
  form1.ADOQuery1.Next;
 end;
казалось бы, все как часы должны работать, но... вот как оно работает: бд в аксессе, тип поля Date-Дата/Время, если я в условии указываю 09.04.2009, т.е. текущию дату, то количество записей считается, но стоит указать другу дату, то выводит ноль, хотя в таблице точно есть даты, указанные в условии. пробовал рзличные варианты и тип поля менял, но результата так пока и не добился.
фЁдОр вне форума Ответить с цитированием
Старый 09.04.2009, 15:01   #2
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

а не проще так:
Код:
adoQuery.sql.text:=<ваш_запрос_с_нужной_датой>;
adoquery.open
i:=adoquery.recordcount-1;
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 09.04.2009, 19:38   #3
Minotavr_x86
Пользователь
 
Аватар для Minotavr_x86
 
Регистрация: 22.03.2007
Сообщений: 24
По умолчанию

Если хотите пользоваться таким экзотическим способом, то вот правильный код
Код:
var
 i: shortint;
begin
 i:=0;
 form1.ADOQuery1.First;
 while not form1.ADOQuery1.Eof do
 begin
  if form1.ADOQuery1.FieldValues['Date']='09.04.2009' then
     i:=i+1;   
  edit3.Text:=IntToStr(i);
  form1.ADOQuery1.Next;
 end;
А так Dark_Spirit прав только "-1" я считаю лишним.
Не всё получается так, как придумал,
Но разве за это должно быть стыдно!?!
Minotavr_x86 вне форума Ответить с цитированием
Старый 10.04.2009, 00:38   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а не проще ли сделать временный запрос по типу
Код:
select count(*)
from table
where trunc(date) = :p0
уж точно быстрее отработает (RecordCount все равно фетчит все данные запроса)
soleil@mmc вне форума Ответить с цитированием
Старый 10.04.2009, 01:13   #5
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

edit3.Text:=IntToStr(i); всяко лучше ставить после цикла (поверьте, что даже отрисовочка простого TEdit на большой таблице со значительным совпадением дат неплохо загрузит основной поток приложения).

Насчет же остального - совершенно верно сказано про отдельный запрос для такой задачи. В отношении же подхода от перебора данных руками стоит обратить внимание на тип данных проверяемого поля. Возможно правильней было бы что-то типа сравнения с DateOf(form1.ADOQuery1.FieldByName( 'Date').AsDateTime)
Антон Ю.Б. вне форума Ответить с цитированием
Старый 10.04.2009, 08:30   #6
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Парни, благодарю Вас за помощь. все получилось Признаться я сначало засомневался в коде Minotavr_x86,т.к. практически идентичен и смысл вроде не теряется, но решил все ж проверить, на мое удивление действительно правильно работает. но в итоге я все ж сделал запросом, т.к. нагрузка должна существенно снижаться. В общем всем еще раз спасибо
фЁдОр вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как посчитать возраст по дате рождения dreamMaster SQL, базы данных 10 18.07.2008 16:37
Посчитать символы в Edit Avalonix Общие вопросы Delphi 3 20.05.2008 15:06
Как посчитать Kovalenko.lokal БД в Delphi 16 07.05.2008 17:50
посчитать заливки Gly Microsoft Office Excel 1 04.03.2008 12:53
Как посчитать матрицу? RECREATOR Помощь студентам 8 30.11.2007 07:10