0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
1

Выбор диапазона дат. БД access в C++ Builder

08.02.2025, 22:52. Показов 3698. Ответов 21

Author24 — интернет-сервис помощи студентам
на форуме нашел пример работы с выбором по диапазону дат.

C++
1
2
3
4
5
6
DataModule1->ADOQuery1->Close();
DataModule1->ADOQuery1->SQL->Clear();
DataModule1->ADOQuery1->SQL->Add("select * from Journal Where datarow Between :datastart and :datastop ");
DataModule1->ADOQuery1->Parameters->ParamByName("datastart")->Value =FormatDateTime("dd/mm/yyyy",DateTimePicker1->Date);
DataModule1->ADOQuery1->Parameters->ParamByName("datastop")->Value = FormatDateTime("dd/mm/yyyy",DateTimePicker2->Date);
DataModule1->ADOQuery1->Open();
Выбор почему то работает если указать на день больше искомого.
Работает так: DateTimePicker1 - ставлю 01-02-2025 в DateTimePicker2 - ставлю 02-01-2025.
Если в DateTimePicker2 поставить 01-02-2025, то записей нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2025, 22:52
Ответы с готовыми решениями:

Выбор из диапазона дат
Добрый день! Срочно нужна помощь! Ситуация: есть несколько объектов строительства со сроками. Во время выполнения своих обязанностей...

Выбор диапазона дат
Здравствуйте! Подскажите, не могу сообразить как реализовать в запросе поиск данных за период с...по.... Имеется Поле в нем указана дата и...

Выбор диапазона дат
Есть модель таблицы учебного курса, у него есть дата начала и дата окончания. class Curs(models.Model): name =...

21
Нарушитель
9795 / 5337 / 1212
Регистрация: 12.03.2015
Сообщений: 25,040
08.02.2025, 22:59 2
Возможно, перепутаны дни и месяцы. Попробуй сделать запрос, например, с 29 мая 2023 по 13 января 2024.
0
Модератор
 Аватар для D1973
9713 / 6313 / 2437
Регистрация: 21.01.2014
Сообщений: 26,900
Записей в блоге: 3
08.02.2025, 23:50 3
Цитата Сообщение от SAnatoliy Посмотреть сообщение
на форуме нашел пример работы с выбором по диапазону дат.
Это кривой пример.
1. Нет ни малейшей необходимости сначала очищать значение свойства SQL, а потом добавлять новый текст запроса. Достаточно сразу менять свойство SQL->Text
2. Поля, содержащие дату - они и должны быть типа Дата/Время, а не текстовыми. В Вашем примере параметры принимают текстовое значение.
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
09.02.2025, 14:18  [ТС] 4
Формат поля в БД "Дата и Время". значения хранятся в виде "09.02.2025 14:13:42"

Можете привести пример кода для ADOQuery1 поиска в диапазоне дат. БД access?
0
40 / 32 / 6
Регистрация: 21.10.2022
Сообщений: 368
Записей в блоге: 2
09.02.2025, 14:21 5
SAnatoliy, попробуй задавать в формате "yyyy-mm-dd" ну или вообще без формата, там же параметры.
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
09.02.2025, 15:39  [ТС] 6
При изменении формата на другой отображение нет. Без указания формата тоже самое как в первом топике ( чтоб посмотреть за 9 число, нужно ставить диапазон с 08 по 10 числа).
0
40 / 32 / 6
Регистрация: 21.10.2022
Сообщений: 368
Записей в блоге: 2
09.02.2025, 17:25 7
SAnatoliy, а если с временем? 2025-02-01 00:00:00 по 2025-02-01 23:59:59
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
09.02.2025, 19:44  [ТС] 8
Вот так проверил все работает.
C++
1
2
DataModule1->ADOQuery1->Parameters->ParamByName("datastart")->Value = "04/02/2025 00:00:00"; 
DataModule1->ADOQuery1->Parameters->ParamByName("datastop")->Value = "04/02/2025 23:59:00";
Пробую изменить вот так:
C++
1
2
DataModule1->ADOQuery1->Parameters->ParamByName("datastart")->Value = FormatDateTime("dd/mm/yyyy hh:mm:ss",DTP1->DateTime);
DataModule1->ADOQuery1->Parameters->ParamByName("datastop")->Value = = FormatDateTime("dd/mm/yyyy hh:mm:ss",DTP2->DateTime);
а время ввожу в форме вручную, время не меняется и поиск не работает.

как с помощью этого компонента вводить время?
0
40 / 32 / 6
Регистрация: 21.10.2022
Сообщений: 368
Записей в блоге: 2
09.02.2025, 21:26 9
сделай так "dd/mm/yyyy 23:59:59" и, кстати, минуты кажись nn
1
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
10.02.2025, 07:32  [ТС] 10
поправил код так:
C++
1
2
    DataModule1->ADOQuery1->Parameters->ParamByName("datastart")->Value = FormatDateTime("dd/mm/yyyy 00:00:00",DTP1->Date);
    DataModule1->ADOQuery1->Parameters->ParamByName("datastop")->Value = FormatDateTime("dd/mm/yyyy 23:59:59",DTP2->Date);
показывает все требуемые записи.

Огромное спасибо за помощь.
0
Модератор
 Аватар для D1973
9713 / 6313 / 2437
Регистрация: 21.01.2014
Сообщений: 26,900
Записей в блоге: 3
10.02.2025, 08:23 11
Цитата Сообщение от SAnatoliy Посмотреть сообщение
ParamByName("datastop")->Value = = FormatDateTime("dd/mm/yyyy hh:mm:ss",DTP2->DateTime);
SAnatoliy, Вы вообще читаете, что Вам пишут? Я же еще когда написал, что не надо приводить тип TDate к типу String, а Вы до сих пор чушь лепите!

Вот пример, где все работает:
Миниатюры
Выбор диапазона дат. БД access в C++ Builder   Выбор диапазона дат. БД access в C++ Builder  
Вложения
Тип файла: zip C-thread3198985.zip (22.5 Кб, 5 просмотров)
1
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
10.02.2025, 14:50  [ТС] 12
Загрузил Ваш пример. Скомпилировал exe. Поиск не работает, показывает только "Все записи" и все.

У себя пока сделал так и проверил по разным диапазонам все записи отображаются корректно, в чем ошибка в коде? По сути время мне не нужно в поиске.

Не пойму где я привожу дату в текст?

P.S.
по сути сформированный запрос для ADOQuery и есть строка...


C++
1
2
3
4
5
6
7
    DataModule1->ADOQuery->Close();
    DataModule1->ADOQuery->SQL->Clear();
    DataModule1->ADOQuery->SQL->Add("create_record from Log Where create_record Between :datastart and :datastop");
    DataModule1->ADOQuery->Parameters->ParamByName("datastart")->Value = FormatDateTime("dd/mm/yyyy 00:00:00",DTP1->Date);
    DataModule1->ADOQuery->Parameters->ParamByName("datastop")->Value = FormatDateTime("dd/mm/yyyy 23:59:59",DTP2->Date);
 
    DataModule1->ADOQuery->Open();
0
Модератор
 Аватар для D1973
9713 / 6313 / 2437
Регистрация: 21.01.2014
Сообщений: 26,900
Записей в блоге: 3
10.02.2025, 19:01 13
Цитата Сообщение от SAnatoliy Посмотреть сообщение
Поиск не работает
Вот Вам видео, как это работает у меня.
RUTUBE
Цитата Сообщение от SAnatoliy Посмотреть сообщение
Не пойму где я привожу дату в текст?
Вот здесь.
Цитата Сообщение от SAnatoliy Посмотреть сообщение
DataModule1->ADOQuery->Parameters->ParamByName("datastart")->Value = FormatDateTime("dd/mm/yyyy 00:00:00",DTP1->Date);
функция FormatDateTime() преобразует значение типа TDateTime в тип String
Цитата Сообщение от SAnatoliy Посмотреть сообщение
по сути сформированный запрос для ADOQuery и есть строка...
Да, но не значения параметров, которые движок СУБД преобразует из типов Билдера в аналогичные типы СУБД.
0
40 / 32 / 6
Регистрация: 21.10.2022
Сообщений: 368
Записей в блоге: 2
10.02.2025, 19:29 14
SAnatoliy,
C++
1
2
3
4
5
6
7
8
9
10
11
12
   
 
   // тут или где то выше или сразу в дизайнере проставить минуты:
   DTP1->Time = 0;
   DTP2->Time = 0.99999;
DataModule1->ADOQuery->Close();
    DataModule1->ADOQuery->SQL->Clear();
    DataModule1->ADOQuery->SQL->Add("create_record from Log Where create_record Between :datastart and :datastop");
    DataModule1->ADOQuery->Parameters->ParamByName("datastart")->Value =DTP1->Date);
    DataModule1->ADOQuery->Parameters->ParamByName("datastop")->Value = DTP2->Date);
 
    DataModule1->ADOQuery->Open();
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
10.02.2025, 19:53  [ТС] 15
Видео не посмотрел, ссылка не доступна уже видимо. У меня нет причин не доверять и я уверен Ваш пример рабочий. Но на моих пк с билдером и офисом не работает поиск по дате без указания формата. Пробовал разные варианты.

с исправлением DTP1->Time = 0; и DTP2->Time = 0.99999; Поиск не работает.

последний вариант как код у меня стал работать нельзя использовать?
0
Модератор
 Аватар для D1973
9713 / 6313 / 2437
Регистрация: 21.01.2014
Сообщений: 26,900
Записей в блоге: 3
10.02.2025, 20:34 16
Цитата Сообщение от SAnatoliy Посмотреть сообщение
Но на моих пк с билдером и офисом
Ну, с этого, скорее всего, и надо начинать. Какой билдер и какой офис.

Добавлено через 1 минуту
Цитата Сообщение от SAnatoliy Посмотреть сообщение
DataModule1->ADOQuery->SQL->Add("create_record from Log Where create_record Between :datastart and :datastop");
У Вас тут, по моему, как минимум, SELECT пропущен...
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
10.02.2025, 21:10  [ТС] 17
RadStudio 10.2 Tokyo (C++Builder 10.2)
Microsoft.Office.2021x64.v2022.05

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
  DTP1->Date = Now();
  DTP2->Date = Now();
 
    DataModule1->ADOQuery1->Close();
    DataModule1->ADOQuery1->SQL->Clear();
    DataModule1->ADOQuery1->SQL->Add("select create_record  from JournalLog Where create_record Between :datastart and :datastop");
    DataModule1->ADOQuery1->Parameters->ParamByName("datastart")->Value = FormatDateTime("dd/mm/yyyy 00:00:00",DTP1->Date);
    DataModule1->ADOQuery1->Parameters->ParamByName("datastop")->Value = FormatDateTime("dd/mm/yyyy 23:59:59",DTP2->Date);
 
    DataModule1->ADOQuery1->Open();
0
Модератор
 Аватар для D1973
9713 / 6313 / 2437
Регистрация: 21.01.2014
Сообщений: 26,900
Записей в блоге: 3
11.02.2025, 05:03 18
Билдер нормальный, не самый свежий, но вполне себе актуальный...
Цитата Сообщение от SAnatoliy Посмотреть сообщение
Microsoft.Office.2021x64
Про это чудо вообще ничего сказать не могу - в глаза не видел. Но, если учитывать общую тенденцию, что Access становится хуже от версии к версии - боюсь даже предположить, что там.

А сама БД какого формата? MDB или ACCDB?
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 197
11.02.2025, 08:02  [ТС] 19
Более свежий билдер не находил леченный, но в принципе и не искал.

БД в формате "mdb".
Офис Microsoft Office LTSC профессиональный плюс 2021.
0
Модератор
 Аватар для D1973
9713 / 6313 / 2437
Регистрация: 21.01.2014
Сообщений: 26,900
Записей в блоге: 3
11.02.2025, 08:29 20
MDB - и формат и провайдер не меняются с 2000 года, должно работать... Что произойдет, если Вы просто запустите программу и нажмете на кнопку "Диапазон"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2025, 08:29
Помогаю со студенческими работами здесь

Выбор диапазона дат
Вообщем есть база данных с товарами внутри. каждый товар имеет дату продажи. надо реализовать такое как в аттаче. то-есть выбираем...

Выбор строк из диапазона дат
Имеется таблица dataGridView, в которой есть столбец с датами(Дата поступления), можно ли реализовать выборку строк из таблицы при вводе...

Calendar (выбор диапазона дат)
Возможно ли как-то настроить поведения Calendar, чтобы была возможность выбора диапазона дат?

Выбор значения из диапазона дат
Добрый день, форумчане! Есть исходная таблица, в которой есть наименование материала, объем поставки, и дата отправления. Время...

Выбор записей из диапазона дат
Здравствуйте, нужна ваша помощь. Есть таблица с данными. В ней есть поле типа "дата". Есть 2 компонента datatimepicker ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Простая нейросеть на КуМир: Создание и обучение
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
Исполнитель Водолей в КуМир: Решение задач
EggHead 16.03.2025
Разработка алгоритмического мышления — одна из ключевых задач для начинающих программистов, и система КуМир предлагает отличный способ погрузиться в этот процесс. Среди множества исполнителей в этой. . .
Исполнитель Чертежник в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы можете рисовать на бесконечной координатной плоскости, перемещая точку, которая оставляет след. По вашей команде она может поднять перо и двигаться, не оставляя следа, или. . .
Исполнитель Робот в КуМир: Решение задач
EggHead 16.03.2025
КуМир (Комплект Учебных МИРов) — это учебная среда программирования, разработанная специально для обучения базовым концепциям алгоритмизации. Её главная фишка — использование русскоязычного. . .
Исполнитель Черепаха в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы впервые учитесь программировать, а перед вами стоит задача заставить маленькую виртуальную черепашку рисовать на экране. Звучит забавно? Эта идея зародилась ещё в 1967 году, когда. . .
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru