Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
MS Access

Запрос на выборку диапазона дат (данные DateTime) из БД

09.10.2018, 21:58. Показов 4461. Ответов 14

Студворк — интернет-сервис помощи студентам
Доброе время суток всем!
Подскажите, пожалуйста, синтаксис строки запроса на выборку диапазона дат из БД Access через Between.
Все мои манипуляции со строкой запроса приводят к ошибке "Несоответствие типов данных в выражении условия отбора"
Пробовала делать через разные элементы: dateTimePicker, textBox, maskedTextBox, а также через параметры, пробовала форматировать в виде "dd.MM.yyyy", "MM.dd.yyyy", результат нулевой.
В БД с псевдонимом PL поле DATA типа Дата/время, формат поля "Краткий формат даты".
Варианты попыток:
C#
1
2
3
4
... WHERE PL.DATA BETWEEN ? AND ?
OleDbCommand command = new OleDbCommand(str_sql, connection);
command.Parameters.AddWithValue("dt_begin", maskedTextBox1.Text);
command.Parameters.AddWithValue("dt_end", maskedTextBox1.Text);
2)
C#
1
command.Parameters.AddWithValue("dt_end", maskedTextBox2.Text.ToString();
3)
C#
1
2
3
4
... WHERE(PL.DATA BETWEEN @dt_begin AND @dt_end)
OleDbCommand command = new OleDbCommand(str_sql, connection);
command.Parameters.Add("@dt_begin", OleDbType.Date).Value =maskedTextBox1.Text
command.Parameters.Add("@dt_end", OleDbType.Date).Value =maskedTextBox2.Text
4) даже если брать не диапазон, а просто дату:
C#
1
...WHERE PL.DATA ='" + dateTimePicker1.Value.ToString("dd.MM.yyyy") +"'"
все равно выдает ошибку несоответствия типов.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2018, 21:58
Ответы с готовыми решениями:

Запрос выборки данных из диапазона дат datetime
Мой запрос @"SELECT * FROM " + aNameTable + " WHERE Date BETWEEN #" + value1 + " AND " + value2 + "#"; где DateTime gValue1, gValue2;...

Запрос на выборку записей из БД по диапазону дат
Выполняю следующий запрос: DM.ADOQuery1.Close; DM.ADOQuery1.Active := false; DM.ADOQuery1.SQL.Clear; ...

Подскажите, запрос на выборку в интервале дат
Добрый вечер подскажите пожалуйста,как в Access написать в запросе ,например, с 15.01.81 по 15.06.81,с 15.01.82 по 15.03.82

14
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,285
10.10.2018, 06:37
Elist, в первом и втором случаях вы передаёте строку с датой, а не дату. В третьем случае вы указываете, что передадите дату, но опять же предаёте строку, в четвёртом - тоже передаёте строку.

Либо явно передавайте объект даты, а не строку с датой. Используйте метод DateTime.TryParse или DateTime.ParseExact для перевода строки с датой в объект даты. И передавайте способом №3.

Либо передавайте строку в формате YYYY-MM-DD.
0
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
10.10.2018, 12:08  [ТС]
Usaga, спасибо за ответ. Но все равно не получается.(((
Попытка передать объект даты с использованием метода DateTime.ParseExact приводит к ошибке "Строка не распознана как действительное значение DateTime." Пробовала так:
C#
1
2
3
4
5
CultureInfo provider = CultureInfo.InvariantCulture;
...
str_sql="Select * from PL Where PL.DATA>@dt_begin";
OleDbCommand command = new OleDbCommand(str_sql, connection);
command.Parameters.Add("@dt_begin", OleDbType.Date).Value = DateTime.ParseExact(dateTimePicker1.Value.ToString(),"yyyy-MM-dd", provider);
и так:
C#
1
2
...
command.Parameters.Add("@dt_begin", OleDbType.Date).Value =DateTime.ParseExact(maskedTextBox2.Text.ToString(),"yyyy-MM-dd", provider);
Вариант передать строку в формате "yyyy-MM-dd" я уже пробовала до обращения на форум. Выходит ошибка несоответствия типов данных. Пробовала так:
C#
1
str_sql="Select * from PL Where PL.DATA>'" + dateTimePicker1.Value.ToString("yyyy-MM-dd") +"'"
1
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,285
10.10.2018, 12:16
Elist, парсить строку нужно из того формата, в котором там дата записана. Т.е. не надо в ParseExact указывать "yyyy-MM-dd", если у вас там "01.03.2019".
0
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
10.10.2018, 12:51  [ТС]
Usaga, а как нужно правильно написать?
Можете привести конкретный синтаксис строки?
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,285
10.10.2018, 12:58
Elist, я не знаю в каком формате у вас строка с датой. Но всё, что вам нужно сделать - распарсить эту строку и получить на руки объект DateTime.

Кстати, dateTimePicker1.Value не сразу ли DateTime возвращает?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
10.10.2018, 13:03
Elist,
C#
1
2
3
4
... WHERE PL.DATA BETWEEN ? AND ?
OleDbCommand command = new OleDbCommand(str_sql, connection);
command.Parameters.AddWithValue("dt_begin", dateTimePicker1.Value);
command.Parameters.AddWithValue("dt_end", dateTimePicker1.Value);
0
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
10.10.2018, 13:21  [ТС]
Usaga, поле Data в таблице БД Access у меня типа Дата/время в формате "Краткий формат даты", т.е. 20.10.2018
В запрос на выборку я ввожу дату в элемент dateTimePicker, если передавать dateTimePicker1.Value, то получается дата в формате 20.10.2018 14:06:52, это приводит к ошибке несоответствия типов данных.
Если я пытаюсь привести ее к формату 20.10.2018 через DateTime.ParseExact, то она превращается в строку, если указать так:
C#
1
...DateTime.ParseExact(dateTimePicker1.Value.ToString(),"yyyy-MM-dd", provider)
либо пишет, что нельзя объект типа Дата преобразовать в строку, если указать так:
C#
1
...DateTime.ParseExact(dateTimePicker1.Value,"yyyy-MM-dd", provider)
Попытка передать дату в виде dateTimePicker1.Value.ToShortDateString( ) тоже не дает результата. (((((
Как же правильно сделать?

Добавлено через 4 минуты

Добавлено через 2 минуты
Igr_ok
Спасибо, что откликнулись.
Я уже пробовала предложенный Вами вариант. Проблема в том, что в строку запроса не подставляется параметр, т.е. остается ? вместо параметра dt_begin
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,285
10.10.2018, 13:32
Elist, сделайте, как показал Igr_ok, только взамен вопросительного знака укажите имя параметра с собачкой в начале.

Цитата Сообщение от Elist Посмотреть сообщение
если передавать dateTimePicker1.Value, то получается
Вам нужно передать объект даты. Если у вас на руках строка, то её нужно распарсить, если у вас на руках уже есть объект даты, то просто передайте в запрос.
0
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
10.10.2018, 13:48  [ТС]
Usaga, я уже делала, как подсказал Igr_ok с заменой вопросительного знака на имя параметра с собачкой. В этом случае пишет ошибку, что не хватает одного параметра.
Я пытаюсь передать объект даты dateTimePicker1.Value просто в запрос, но у меня не получается из-за того, что формат даты полный, вместе со временем.
Как правильно распарсить строку??
Можете мне конкретно написать, что нужно указать в ParseExact, если у меня дата указана как "01.03.2019"?
Я понимаю, что нужно сделать, но не понимаю, как.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
10.10.2018, 14:11
Лучший ответ Сообщение было отмечено Elist как решение

Решение

Elist, попробуйте передавать dateTimePicker1.Value.Date в качестве параметра.
1
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
10.10.2018, 14:58  [ТС]
Igr_ok, СПАСИБО Вам просто преогромнейшее!!!
Перепробовала массу вариантов.
0
0 / 0 / 0
Регистрация: 14.04.2020
Сообщений: 14
15.04.2020, 17:21
Elist, может подскажете как решили проблему? я уже все облазила, руки опускаются
0
1 / 1 / 0
Регистрация: 13.01.2016
Сообщений: 14
15.04.2020, 18:10  [ТС]
lizzza3294, помог совет от Igr_ok :
попробуйте передавать dateTimePicker1.Value.Date в качестве параметра.
Я его отметила, как решение
0
0 / 0 / 0
Регистрация: 14.04.2020
Сообщений: 14
15.04.2020, 18:22
Elist, спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2020, 18:22
Помогаю со студенческими работами здесь

Запрос на выборку между двух дат к БД Access
Никак не пойму в чем секрет. Есть БД в Access. В таблице одно из полей имеет тип данных: "Дата и время". В этом поле хранятся...

Запрос на выборку из диапозона дат по номеру сотрудника
Народ такая проблема нужен Запрос на выборку из диапозона дат по номеру сотрудника Я осуществляю его таким образом SELECT IdСотрудника...

Запрос на выборку даты из диапазона
Ночи доброй! Подскажите пожалуйста,как сделать выборку из диапазона дат? Имеется таблица с "Дата начала хранения" и...

Не получается выполнить запрос на выбор диапазона дат. BETWEEN
Всем доброго времени суток. Не получается выполнить SQL запрос на выборку диапазона дат. Вот исходный вид таблицы Хочу я например...

Фильтр дат в таблице между DateTimePicker1.DateTime и DateTimePicker2.DateTime
Не пинайте сильно. Начинающий. Не срабатывает выбор дат из таблицы. База GDB Firebird. Поле таблицы DATAV в базе тип поля Date. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru