С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300

ADOTable Фильтрация по дате (неделя и месяц)

15.09.2020, 14:36. Показов 5365. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Hi , подскажите как сделать фильтрацию по дате? есть две кнопки, на первой включается фильтр 1 неделя, на второй включается фильтр 1 месяц.
В таблице есть поле date типа Дата и время, на форму положила 2 компонента DateTimePicker.
Поля заполнены, дата в полях присутствует. Набрала следующий код:
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
// за неделю
DateTimePicker1.Date:=now;
DateTimePicker2.Date:=now;
  ADOTable1.Filter := '[date]>=#'+DateToStr(DateTimePicker1.Date)+'# and [date]>#'+DateToStr(DateTimePicker2.Date-7)+'#';
  ADOTable1.Filtered := True;
end;
Получаю ошибку при фильтрации: Could not convert variant of type (Null) into type (OleStr).

0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2020, 14:36
Ответы с готовыми решениями:

Фильтрация ADOTable по дате
как сделать поиск по дате? подскажите пожалуйста { if (Edit3->Text != "") { AnsiString textEdit = Edit3->Text; ...

Фильтрация по дате в компоненте ADOTable
Добрый день уважаемые Гуру програмирования! Подскажите начинающему, зашел в тупик. Суть: Нужно в компоненте ADOTable1 провести...

Сортировка ADOTable по дате. Выборка из таблицы по дате
Доброго вечера! Пытался решить проблему сам - не получилось. Тезисно: имеется программа, сделанная в c++ Builder; из бд Accsess в программе...

22
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
15.09.2020, 15:37
Я не знаю, что обозначает символ '#', но
Delphi
1
ADOTable1.Filter := 'date >= ''' + DateToStr(DateTimePicker1.Date) + ''' AND date > ''' + DateToStr(DateTimePicker2.Date-7) + '''';
Вместо двойных ковычек можно использовать QuotedStr ( я привык к ковычкам).
0
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
15.09.2020, 16:37  [ТС]
Hi UR1004SWL Hi ,
Так тоже появляется эта ошибка, а вообще условия правильные?
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
15.09.2020, 17:23
Решетками обрамляется дата в Акцесе, вот только эта фишка не работает при подключении к Акцесовской базе из Delphi, а потому попробуйте так:
Delphi
1
ADOTable1.Filter := '[date] between '+DateTimeToStr(DateTimePicker1.DateTime)+' and '+DateTimeToStr(DateTimePicker2.DateTime-7);
Но имейте ввиду, что Акцес всегда работает с датой в формате TDateTime и если ему задать дату в формате 01.01.2020 то он ее сам преобразует в 01.01.2020 00:00:00, следовательно для указания правой границы в диапазоне дат, надо это учитывать.
1
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
15.09.2020, 18:02
Лучший ответ Сообщение было отмечено LSvetlana как решение

Решение

Delphi
1
2
3
4
5
6
uses
 DateUtils
 
ADOTable.Filtered := False;
ADOTable.Filter := 'date >= ' + QuotedStr(DateToStr(StartOfTheWeek(DateTimePicker1.Date))) + ' AND date <= ' + QuotedStr(DateToStr(EndOfTheWeek(DateTimePicker1.Date)));
ADOTable.Filtered := True;
1
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
15.09.2020, 20:22  [ТС]
Hi Пытливый ,
Цитата Сообщение от Пытливый Посмотреть сообщение
Решетками обрамляется дата в Акцесе, вот только эта фишка не работает при подключении к Акцесовской базе из Delphi, а потому попробуйте так:
Так тоже не работает, но появляется другая ошибка Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
Цитата Сообщение от Пытливый Посмотреть сообщение
следовательно для указания правой границы в диапазоне дат, надо это учитывать.
Вот это я не совсем поняла, каким образом это учесть?
Hi UR1004SWL ,
И так тоже ошибка, самая первая

Добавлено через 12 минут
Цитата Сообщение от LSvetlana Посмотреть сообщение
Hi UR1004SWL ,
И так тоже ошибка, самая первая
А теперь попробовала, и заработал Ваш вариант
Только как показывать записи за последние 7 дней, месяц?

Добавлено через 21 минуту
Изменила вот это (я специально не выделила код форматированием Delphi):
ADOTable1.Filter := 'date >= ''' + DateToStr(DateTimePicker1.Date) + ''' AND date > ''' + DateToStr(DateTimePicker2.Date-7) + '''';

на

ADOTable1.Filter := 'date <= ''' + DateToStr(DateTimePicker1.Date) + ''' AND date > ''' + DateToStr(DateTimePicker2.Date-7) + '''';
И всё заработало
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
15.09.2020, 20:26
Цитата Сообщение от LSvetlana Посмотреть сообщение
месяц?
Delphi
1
ADOTable.Filter := 'date >= ' + QuotedStr(DateToStr(StartOfTheMonth(DateTimePicker1.Date))) + ' AND date <= ' + QuotedStr(DateToStr(EndOfTheMonth(DateTimePicker1.Date)));
Цитата Сообщение от LSvetlana Посмотреть сообщение
за последние 7 дней
Не менять значение в DateTimePicker или выставить текущую дату. Работает запрос из предыдущего моего поста за неделю.
1
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
15.09.2020, 20:31  [ТС]
Цитата Сообщение от UR1004SWL Посмотреть сообщение
Не менять значение в DateTimePicker или выставить текущую дату. Работает запрос из предыдущего моего поста за неделю.
Да, я так и делала, но у меня показывает записи до конца текущей недели, т.е. если я выставила в DateTimePicker1 текущую дату, то он отобразит только записи до конца текущей недели (т.е. как то определяет начало недели), т.е. не за 7 дней
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
15.09.2020, 20:33
Я Вам дал код для недели и месяца, а не для - семь дней от выставленной даты. Прибавляйте к дате семь дней.
0
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
15.09.2020, 20:34  [ТС]
StartOfTheWeek- Возвращает значение TDateTime которое представляет 12:00:00:00 AM первого дня недели, заданой значением TDateTime.

EndOfTheWeek- Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня недели, указаной в TDateTime.
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
15.09.2020, 20:37
Для увеличения даты на n-дней есть функция IncDay(date, кол-во дней).

Добавлено через 1 минуту
Цитата Сообщение от LSvetlana Посмотреть сообщение
StartOfTheWeek- Возвращает значение TDateTime которое представляет 12:00:00:00 AM первого дня недели, заданой значением TDateTime.
EndOfTheWeek- Возвращает значение TDateTime которое представляет последнюю милисекнду последнего дня недели, указаной в TDateTime.
А что Вам нужно.
0
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
15.09.2020, 22:01  [ТС]
Поняла, единственное мне не понятно, для StartOfTheWeek и EndOfTheWeek нужно два DateTimePicker?

Спасибо за помощь
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
15.09.2020, 23:12
Цитата Сообщение от LSvetlana Посмотреть сообщение
нужно два DateTimePicker
Одного хватит.
0
16.09.2020, 03:48

Не по теме:

Ёжики кололись, плакали, но продолжали грыздь кактус.
Какой TхххTable и какой Filter в третьем десятке третьего тысячелетия?

0
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
16.09.2020, 09:05  [ТС]
Hi UR1004SWL ,
Цитата Сообщение от UR1004SWL Посмотреть сообщение
Одного хватит.
Поняла,
0
5 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 256
16.02.2025, 16:29
Мне нужно отфильтровать данные от AG1 до AG2 включительно
Delphi
1
DM.ADOTablePacient.Filter := 'Years => ' + QuotedStr(AG1) + ' AND Years <= ' + QuotedStr(AG2);
Не срабатывает вот такой фильтр. Пишет "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликты друг с другом."
Когда убираешь знаки = все работает но не включительно т.е. ввожу 5-14 он выдает список начиная 6 и до 10, 5 и 14 не включает.

пробовал вот так написать
Delphi
1
DM.ADOTablePacient.Filter := 'Years = '+QuotedStr(AG1)+' OR Years >'+QuotedStr(AG1)+' AND Years < '+QuotedStr(AG2)+' OR Years = '+QuotedStr(AG2);
Такая же ошибка
или OR он не понимает здесь?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
17.02.2025, 02:23
Цитата Сообщение от Volhv Посмотреть сообщение
или OR он не понимает здесь?
Попробуйте для начала задействовать скобки, что отличить одну логическую комбинацию от другой.
1
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
17.02.2025, 05:46
Поле Years какого типа? Переменные AG и AG2 какого типа? И как эти переменные получают значения?
Если ничего с типами не нарушено, то все прекрасно фильтруется:



Другое дело, что использование именно механизма фильтрации - это спорный момент, допустимый лишь на локальных файловых БД и то только при небольшом объеме данных
1
 Аватар для Beltar
806 / 422 / 37
Регистрация: 05.05.2022
Сообщений: 2,924
17.02.2025, 08:18
Какой формат даты-времени в базе? Что именно получается после преобразования даты в текст? Обычно, такая фигня возникает, когда в базе, например, yyyy.mm.dd, а подается что-то вроде 2020.15.09. У Access, если это она, вообще свое обрамление времени.

Фильтр слабый, и его применение имеет смысл только на уже загруженных обычным SQL-запросом с фильтрацией датасетом, когда надо, например, реагировать на вводимые символы.

Table не применяется, Query с выбором всех полей то же самое, но там же и Select прописывается.
0
126 / 106 / 20
Регистрация: 23.05.2015
Сообщений: 694
17.02.2025, 09:34
LSvetlana, 12 тем назад отвечал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2025, 09:34
Помогаю со студенческими работами здесь

CalendarView - отображать Месяц/Неделя/День
Здравствуйте. Интересует каким образом можно используя CalendarView, стандартными способами отобразить календарь ввиде...

Фильтрация ADOTable
Всем привет! Есть табличка, в Edit ввожу число по которому табличка должна отфильтроваться. void __fastcall...

Adotable фильтрация
Ребят не могу отфильтровать в адотейбл записи по фио Код: ADOTable10.Filter := 'fio_sotr='+sotr; ADOTable10.Filtered := True; ...

Фильтрация в ADOTable
Вечер добрый,уважаемые. Я бы хотел попросить помочь с фильтрацией в ADOTable-е. Всё мои попытки использовать собственный фильтр в...

ADOTable фильтрация
Всем доброго времени суток! Уже терпения просто не хватает... Вобщем такая проблема - фильтрация вот так работает: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru