Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 13.06.2011
Сообщений: 7

Фильтр по месяцу и году в ADO

25.06.2012, 19:05. Показов 4983. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Просмотрела много тем и вопросов по своей проблеме, но фильтрация всё равно не работает как надо.
Дана таблица TKart(ADO, база данных MSAccess), поле data_prest(дата/время). Нужно выполнить фильтрацию данных по месяцу и году, которые выбираются в ComboBox1 и вводятся в Edit1 соответственно. Код такой:

Delphi
1
2
3
4
5
6
for i := 0 to TKart.RecordCount-1 do
  begin
TKart.Filter:='data_prest='''+DateToStr(EncodeDate(strtoint(edit1.Text),ComboBox1.ItemIndex+1,DayOf(TKartdata_prest.AsDateTime)))+'''';
TKart.Filtered:=true;
end;
end;
если я правильно ввожу данные, он фильтрует только если на этой строке находится курсор, иначе оставляет таблицу пустой.
Пробовала с запросом, но зависла на самом условии фильтрации:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
with DataModule1.ADOQuery2 do
     begin
       SQL.Clear;
       SQL.Add('SELECT * FROM Kart WHERE data_prest=:data');
       Parameters.ParamByName('data').Value:=FormatDateTime('dd.mm.yyyy',Date);
       Active:=True;
       for i := 0 to RecordCount-1 do
         begin
         TKart.Filter:='data_prest='''+[COLOR="DarkOrange"]...зависла...[/COLOR]+'''';
         Filtered:=true;
          ShowMessage(FieldByName('data_prest').AsVariant);
         end;
     end;
     finally;
   end;
ещё пробовала написать
Delphi
1
SQL.Add('SELECT * FROM Kart WHERE data_prest = #' + IntToStr(ComboBox1.ItemIndex+1) + '/1/' +edit1.Text + '#');
Подскажите пожалуйста, где ошибка и как её можно исправить? Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.06.2012, 19:05
Ответы с готовыми решениями:

Фильтр по месяцу и году
Хочу организовать фильтр по месяцу и году. Имеются 4 поля со списками: ГодС, ГодПо, МесяцС, МесяцПо. При выборе всех четырех полей должен...

Выбор по месяцу и году
Доброго времени суток форумчане, подскажите как сделать запрос по определённому месяцу и нескольким годам? подобного ничего не нашёл.

Фильтрация по году и месяцу
Здравствуйте. Не получается сделать фильтрацию по году и месяцу. Есть форма с двумя подчиненными формами. Одна с данными, другая...

13
 Аватар для albor
504 / 106 / 16
Регистрация: 01.12.2011
Сообщений: 399
25.06.2012, 19:56
Цитата Сообщение от Бегущая вдаль Посмотреть сообщение

Delphi
1
2
3
4
5
  with DataModule1.ADOQuery2 do
  begin
     SQL.Clear;
     SQL.Add('SELECT * FROM Kart WHERE data_prest=:data');
     Parameters.ParamByName('data').Value:=FormatDateTime('dd.mm.yyyy',Date);
А так попробовать..

Delphi
1
2
     ...
     Parameters.ParamByName('data').Value:=Date;
0
0 / 0 / 0
Регистрация: 13.06.2011
Сообщений: 7
25.06.2012, 20:05  [ТС]
Цитата Сообщение от albor Посмотреть сообщение
А так попробовать..

Delphi
1
2
     ...
     Parameters.ParamByName('data').Value:=Date;
попробовала - также, не фильтрует вообще. Я вот думаю, в запросе вообще надо отдельно прописывать фильтрацию, или Select итак выбирает только те записи, которые соответствуют условиям?
0
 Аватар для albor
504 / 106 / 16
Регистрация: 01.12.2011
Сообщений: 399
25.06.2012, 21:10
Цитата Сообщение от Бегущая вдаль Посмотреть сообщение
попробовала - также, не фильтрует вообще. Я вот думаю, в запросе вообще надо отдельно прописывать фильтрацию, или Select итак выбирает только те записи, которые соответствуют условиям?
Еще одна попытка. Попробуйте, чем.. SQL не шутит:

Delphi
1
2
3
SQL.Add('SELECT * FROM Kart WHERE data_prest>=:date1 and data_prest<:date2');
Parameters.ParamByName('date1').Value:=Date;
Parameters.ParamByName('date2').Value:=Date+1;
ЗЫ База Access, тип поля DateTime..
0
0 / 0 / 0
Регистрация: 13.06.2011
Сообщений: 7
25.06.2012, 21:48  [ТС]
ой, я малость не поняла...
этот фрагмент реализует поиск между двумя датами, ведь так? Или вместо date1 date2 нужно ввести свои значения? Поиск-то организуется по ComboBox1.Text и Edit1.Text...
дико извиняюсь, с SQL пока мало знакома, каюсь)
0
 Аватар для albor
504 / 106 / 16
Регистрация: 01.12.2011
Сообщений: 399
25.06.2012, 22:07
Цитата Сообщение от Бегущая вдаль Посмотреть сообщение
ой, я малость не поняла...
этот фрагмент реализует поиск между двумя датами, ведь так? Или вместо date1 date2 нужно ввести свои значения? Поиск-то организуется по ComboBox1.Text и Edit1.Text...
дико извиняюсь, с SQL пока мало знакома, каюсь)
Сделать именно так как я написал. Дата одна и та же, но второе значение +1 день.

Кстати для установки даты лучше использовать DateTimePicker.
Он дает значение именно типа TDatetime, а это важно для передачи через параметры.
Не string из TEdit, а именно TDatetime. Это все тайны Accessa, как он там с датами манипулирует.
0
 Аватар для notsliva
15 / 15 / 7
Регистрация: 25.06.2012
Сообщений: 95
25.06.2012, 22:30
Цитата Сообщение от albor Посмотреть сообщение
Он дает значение именно типа TDatetime
Согласен, все дело в формате, который вы передаете в фильтр. Там принимается что-то вроде "y.m.d h.m.s" - год, месяц, день, час, минута, секунда, а, может, даже еще милисекунда.

Если фильтрация только по месяцу и году, то как выход в sql-запросе использовать Year() & Month() - в скобки подставьте значения из своей программы.

Добавлено через 2 минуты
SELECT * FROM Kart WHERE Year(data_prest) >= :date1 AND Month(data_prest) < :date2
0
 Аватар для albor
504 / 106 / 16
Регистрация: 01.12.2011
Сообщений: 399
25.06.2012, 22:45
Цитата Сообщение от notsliva Посмотреть сообщение
SELECT * FROM Kart WHERE Year(data_prest) >= :date1 AND Month(data_prest) < :date2
После такого объяснения наша "Бегущая вдаль" окончательно убежит от нас.

Если уж строить запрос только до уровня месяц-год, то тогда так:

SQL
1
SELECT * FROM Kart WHERE YEAR(data_prest) = :YEAR AND MONTH(data_prest) = :MONTH
и соответственно:

Delphi
1
2
Parameters.ParamByName('YEAR').Value   :=MyYear;   //integer
Parameters.ParamByName('MONTH').Value:=MyMonth; //integer
1
0 / 0 / 0
Регистрация: 13.06.2011
Сообщений: 7
26.06.2012, 14:32  [ТС]
Цитата Сообщение от albor Посмотреть сообщение
Сделать именно так как я написал. Дата одна и та же, но второе значение +1 день.

Кстати для установки даты лучше использовать DateTimePicker.
Он дает значение именно типа TDatetime, а это важно для передачи через параметры.
Не string из TEdit, а именно TDatetime. Это все тайны Accessa, как он там с датами манипулирует.
ладно, чёрт с этими месяцами и годами. Поставила DateTimePicker1, прописала:
Delphi
1
2
3
4
5
6
7
DataModule1.ADOQuery2 do
     begin
     Close;
     SQL.Clear;
     SQL.Add('select * from Kart where data_prest>=:data');
    Parameters.ParamByName('data').Value:=DateTimePicker1.DateTime;
    Active:=True;
никакой реакции. вообще. я уже не знаю, что делать... (( как вы предлагали, с :Month и :Year та же ситуация - ни ошибок, ни фильтра. Может я не знаю каких-либо нюансов об SQL? Свойства DataSource и Connection я указала. пробовала запрос прописывать в самом AOQuery, в свойстве SQL Object Inspector'a, но - ноль внимания, фунт презрения... ((
0
 Аватар для albor
504 / 106 / 16
Регистрация: 01.12.2011
Сообщений: 399
26.06.2012, 14:58
Цитата Сообщение от Бегущая вдаль Посмотреть сообщение
ладно, чёрт с этими месяцами и годами.....пробовала запрос прописывать в самом AOQuery, в свойстве SQL Object Inspector'a, но - ноль внимания, фунт презрения... ((
Вы меня заинтриговали. Было такое подозрение, что у Вас в базе записана дата вместе со временем.
С Аццесом иногда такое случается. Тогда прямое сравнение ничего не дает. Нет там даты с нулевым значением времени.
Но если Вы уже и попробовали условие >=, и опять не работает.. О_о

Файл базы дадите на посмотреть?..
1
0 / 0 / 0
Регистрация: 13.06.2011
Сообщений: 7
26.06.2012, 15:51  [ТС]
ой.. сделала по-детски, но я уже устала париться. Странно что раньше не додумалась:
Delphi
1
2
DataModule1.TKart.Filter:='data_prest>='''+DateToStr(DateTimePicker1.Date)+'''';
DataModule1.TKart.Filtered:=true;
базу ловите, таблица Kart... ну вы знаете))) может получится что-нибудь, просто разобраться-то охота... спасибо за помощь))
Вложения
Тип файла: rar таблицы.rar (65.4 Кб, 33 просмотров)
0
 Аватар для albor
504 / 106 / 16
Регистрация: 01.12.2011
Сообщений: 399
26.06.2012, 16:17
Ну не знаю.. у меня все работает: см.приложение

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select * from Kart where data_prest>=:date');
    Parameters.ParamByName('date').Value:=DateTimePicker1.DateTime;
    Active:=True;
  end;
end;
Вложения
Тип файла: zip Project1.zip (431.3 Кб, 40 просмотров)
0
0 / 0 / 0
Регистрация: 13.06.2011
Сообщений: 7
26.06.2012, 17:21  [ТС]
Цитата Сообщение от albor Посмотреть сообщение
Ну не знаю.. у меня все работает: см.приложение

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select * from Kart where data_prest>=:date');
    Parameters.ParamByName('date').Value:=DateTimePicker1.DateTime;
    Active:=True;
  end;
end;
я поняла где ступила... это вообще кошмар. У меня же в свойстве DataSet у DataSource1 указан ADOTable1, а не ADOQuery1))) вот поэтому запрос и не работал)

Спасибо большое за помощь))))

эмм... а как тему закрыть?..))
0
 Аватар для notsliva
15 / 15 / 7
Регистрация: 25.06.2012
Сообщений: 95
27.06.2012, 19:02
Ужасы в решете.
Думаю, модер сам прикроет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2012, 19:02
Помогаю со студенческими работами здесь

Выборка по месяцу и году из даты
Приветствую! Не могу нагуглить ничего внятного. С sql и ораклом знаком пару дней. Так все работает: SELECT * FROM ИЗДАНИЯ WHERE...

Группировка по году, месяцу и вывод данных
В таблице mysql имеется столбец с датами 2015-08-13 02:04:00.000000 Необходимо вывести следующую структуру: 2015 -...

Как вывести строки по месяцу и году?
Здравствуйте, уважаемые форумчане! У меня в таблице есть колонка с датой, формата YYYY-mm-dd, как мне сделать запрос по месяцу и году?...

Сформировать TDate по дню, месяцу,году
Здравствуйте. Есть 3 Editа - день, месяц, год. И по ним нужно сформировать дату не зависимо от формата даты (который установлен в ОС) и...

Факт и план по месяцу, году по товарам (одежда)
Здравствуйте!)) Я новичок в программировании и мне нужна помощь. Помогите пожалуйста. Мне нужно составить план месяца, затем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru