Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
prokudinsk
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 8
#1

DataGridView — фильтрация по датам - Visual Basic .NET

13.02.2017, 02:34. Просмотров 834. Ответов 15

Доброго времени суток всем. Товарищи, прошу помощи, мозг кипит и прочее...

Есть база в access. Там некоторые события по датам. отображается так:
DataGridView — фильтрация по датам

Есть форма, в которую происходит выгрузка из базы в dataviewgrid
DataGridView — фильтрация по датам

На форме есть 2 DateTimePicker (Date_From и Date_To)
Название: 2.JPG
Просмотров: 133

Размер: 10.1 Кб

в коде пишу:
vb.net
1
2
3
4
Dim str_date_from As String = Date_From.Value.Date
Dim str_date_to As String = Date_To.Value.Date
 
tmpStr = "SELECT * FROM [main_base] WHERE [Дата] BETWEEN ('" & str_date_from & "') AND ('" & str_date_to & "')"
и далее запрос к базе...

не дает, не делает, не запускает.
Наверно, где-то на форуме есть похожая тема, но схожие посмотрел, опробовал, не помогает.
Хелп!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2017, 02:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос DataGridView — фильтрация по датам (Visual Basic .NET):

Фильтрация данных в DatagridView
Нужно реализовать в Datagridview возможность, по необходимости фильтровать в...

Фильтрация в DataGridView не срабатывает
ass = textbox.text .... ...

Фильтрация в datagridview по нескольким критериям
Кто-нибудь знает как осуществить фильтрацию не по одному критерию а по...

Фильтрация данных в DataGridView по дате
Необходимо, что бы при нажатии на btn происходила фильтрация данных по дате...

Сортировка в виртуальном ListView (по алфавиту, числам и датам)
Нужен пример сортировки в виртуальном ListView, в нете смог найти только на C#,...

Какое использовать события в datagridview, чтобы значения из combobox обновлялись в datagridview
Всем привет.Нужна помощь по следующему вопросу.В datagridview загружаются...

15
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
13.02.2017, 07:32 #2
Цитата Сообщение от prokudinsk Посмотреть сообщение
не дает, не делает, не запускает.
Для начала уберите скобки в запросе - значения диапазона BETWEEN в скобки не ставят.
BETWEEN MSDN
Можете весь фильтр в скобки поместить , но в данном контексте это лишнее.
Далее : проверьте все сравниваемые типы данных - они должны быть одинаковые.
Есть у меня подозрение , что [Дата] в запросе имеет типе date ( во всяком случае приведение
этого поля к строке не вижу) , а диапазон , с которым сравниваете , задаёте в строковом формате.
Так же проверьте , что возвращаемые форматы дат совпадают (день-месяц-год).
Так же для тестирования диапазон можно прописать по другому и , при необходимости,проверять,
разложив запрос на составляющие :
SQL
1
"SELECT * FROM [main_base] WHERE [Дата] >= '" & str_date_from & "' AND [Дата]<= '" & str_date_to & "'"
0
Navthe
49 / 49 / 17
Регистрация: 12.02.2017
Сообщений: 260
Завершенные тесты: 1
13.02.2017, 08:02 #3
Цитата Сообщение от prokudinsk Посмотреть сообщение
На форме есть 2 DateTimePicker (Date_From и Date_To)
попробуйте DataView
0
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
13.02.2017, 08:30 #4
Цитата Сообщение от Navthe Посмотреть сообщение
попробуйте DataView
Зачем ? Что принципиально изменится, если фильтр по диапазону не работает ?
DataView ровно так же не будет заполняться... или вы предлагаете "тащить" весь массив данных ,
чтобы потом его уже фильтровать во вьюшке ? А если этих данных гигабайты ? Никаких ресурсов не хватит ))
Вопрос то не в форме предоставления , а в содержании - заставить фильтр работать.
0
Navthe
49 / 49 / 17
Регистрация: 12.02.2017
Сообщений: 260
Завершенные тесты: 1
13.02.2017, 09:30 #5
тогда BindingSource для сортировки таблицы, без перебора данных, вот пример

Создаешь объект BindingSource с его помощью можно сортировать таблицу по любым значениям , потом создаешь DateTimePicker и задаешь дату фильрации.

vb.net
1
2
3
Private Sub DateTimePicker2_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DateTimePicker2.ValueChanged
        BindingSource.Filter = "Date >= '" & DateTimePicker1.Text & "' AND Date <= '" & DateTimePicker2.Text & "'"
End Sub
0
Winney
301 / 242 / 40
Регистрация: 28.09.2013
Сообщений: 573
Завершенные тесты: 1
13.02.2017, 19:24 #6
Цитата Сообщение от Kulma Посмотреть сообщение
разложив запрос на составляющие
Из своей практики хочу заметить, что разложение запросов, равно как и использование запросов в формате, приведенным автором топика, в большинстве случаев является небезопасным и иногда совершенно (на первый взгляд) непредсказуемым.

Рекомендую вам использовать строго типизованные запросы (с параметром/параметрами). А еще лучше использовать хранимую процедуру с параметрами, также с проверкой типов. В моем случае все вопросы касаемо чудесного преобразования дат операционной системой были решены.

Добавлено через 2 минуты
Вот пример из MSDN
0
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
13.02.2017, 20:00 #7
"Папа , а ты сейчас с кем разговаривал ?" (с)

А если серьёзно :
Цитата Сообщение от Winney Посмотреть сообщение
Из своей практики хочу заметить, что разложение запросов, равно как и использование запросов в формате, приведенным автором топика, в большинстве случаев является небезопасным и иногда совершенно (на первый взгляд) непредсказуемым.
во-первых , вопрос ТС прозвучал по совершенно конкретной теме - неработающий фильтр
во-вторых, если вы внимательно прочтёте мой ответ , то там есть ключевые слова , которые вы пропустили
Цитата Сообщение от Kulma Посмотреть сообщение
Так же для тестирования диапазон можно прописать по другому и , при необходимости,проверять,
.
в-третьих, я знаю десятки проектов , которые себя отлично чувствуют без параметров и процедур и аргументы
в их пользу ничуть не менее веские , чем ваши , начиная от переносимости проекта между платформами и
заканчивая целесообразностью и уязвимостями.
По сему ,мне думается , холивар на эту тему - занятие достаточно бессмысленное и бестолковое .
Каждый использует те инструменты , которые ему ближе.

Цитата Сообщение от Winney Посмотреть сообщение
В моем случае все вопросы касаемо чудесного преобразования дат операционной системой были решены.
Ну так прекрасно , продемонстрировали бы ТС правильный код . )))
0
Winney
301 / 242 / 40
Регистрация: 28.09.2013
Сообщений: 573
Завершенные тесты: 1
13.02.2017, 20:08 #8
Kulma, я не подвергал сомнениям ваше решение) Просто добавил свои мысли на этот счет, что не отменяет изложенного вами)

Цитата Сообщение от Kulma Посмотреть сообщение
Ну так прекрасно , продемонстрировали бы ТС правильный код . )))
Не даю рыбу, даю удочку и объясняю как ловить)

За
Цитата Сообщение от Kulma Посмотреть сообщение
"Папа , а ты сейчас с кем разговаривал ?" (с)
+100500)))
0
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
13.02.2017, 20:25 #9
Цитата Сообщение от Winney Посмотреть сообщение
Не даю рыбу, даю удочку и объясняю как ловить)
Ну и напрасно, кстати.
Зачастую полезней дать рыбку , чтобы у перекусившего были силы , а главное желание,
брать в руки удочку . Глядишь через непродолжительное время не только себя,
но и окружающих накормит
Это ж форум , а не ярмарка тщеславия )))
1
Winney
301 / 242 / 40
Регистрация: 28.09.2013
Сообщений: 573
Завершенные тесты: 1
13.02.2017, 20:33 #10
Цитата Сообщение от Kulma Посмотреть сообщение
Зачастую полезней дать рыбку
И такое бывает, но после того как удочка не помогла)
0
prokudinsk
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 8
05.03.2017, 00:03  [ТС] #11
KULMA, Переделал немного.
vb.net
1
2
3
 Dim str_date_from As Date = Date_From.Value.ToString("MM/dd/yyyy")
 Dim str_date_to As Date = Date_To.Value.ToString("MM/dd/yyyy")
 tmpStr = "SELECT * FROM [main_base] WHERE [Дата] >= '" & str_date_from & "' AND [Дата]<= '" & str_date_to & "'"
далее запрос...
скрины значений...
0
Миниатюры
DataGridView — фильтрация по датам   DataGridView — фильтрация по датам   DataGridView — фильтрация по датам  

Jungl
71 / 63 / 20
Регистрация: 18.12.2015
Сообщений: 138
05.03.2017, 11:47 #12
prokudinsk, что-то я не понимаю, изначально у вас видно, что дата в базе используется dd.mm.yyyy, теперь вы ее преобразовываете в формат en-US. Второй момент, в столбце "Дата" формат даты?
А по сути - SQL запрос в сообщении #2 рабочий, если текстовый формат.
Преобразуйте в строковые переменные, посмотрите что на выходе:
vb.net
1
Dim str_date_to As String = Date_From.Value.ToString("dd/MM/yyyy")
0
Winney
301 / 242 / 40
Регистрация: 28.09.2013
Сообщений: 573
Завершенные тесты: 1
06.03.2017, 21:50 #13
vb.net
1
2
3
4
5
6
7
8
9
Dim _date_from As Date = Date_From.Value
 Dim _date_to As Date = Date_To.Value
 
 commandText= "SELECT * FROM [main_base] WHERE [Дата] between @date_from AND @date_to"
 
Dim command As New SqlCommand(commandText, connection)
command.Parameters.Add("@date_from ", SqlDbType.Date) ' Не могу проверить
command.Parameters("@date_from ").Value = _date_from 
' аналогично для @date_to
Столбец [ДАТА] в БД должен быть типа Date.
Дата - как сущность - не зависит от языка. а все mmddyy и прочие - всего лишь обличение этой сущности в удобоваримый пользователям вид.

Добавлено через 1 час 33 минуты
однако есть и такая тема
0
prokudinsk
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 8
11.03.2017, 13:04  [ТС] #14
Проблема решена! все работает, вот решение, если кому надо:

vb.net
1
2
3
4
 Dim str_date_from As String = Date_From.Value.ToString("MM\/dd\/yyyy")
 Dim str_date_to As String = Date_To.Value.ToString("MM\/dd\/yyyy")
 
tmpStr = "SELECT * FROM main_base WHERE ([Дата] BETWEEN #" & str_date_from & "# AND #" & str_date_to & "#)"
Всем спасибо за участие.
1
anapa47
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 18
16.03.2017, 20:13 #15
Я проверил этот код, однако он некорректно фильтрует по диапазону дат. Проставьте в поле "ДАТА" записи с разными месяцами и при диапазоне от 01.03 по сегодняшнюю дату высвечиваются все записи за 2 месяца. Если же в Access поле "ДАТА" тип Дата и время, то выдает ошибку. Я перепробовал все варианты, не получается ничего.
0
prokudinsk
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 8
21.03.2017, 01:37  [ТС] #16
Работает по разным диапазонам имеющихся в базе записей по датам.
0
21.03.2017, 01:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2017, 01:37
Привет! Вот еще темы с решениями:

Перенос данных из одного DataGridView в другой DatagridView
Доброго времени суток! Имеется DataGridView из которого нужно перенести...

Свести количество найденных значений из DataGridView 1 в DataGridView 2
Необходимо посчитать количество значений по всем столбцам. В столбцах таблицы 1...

Копирование данных из одной DataGridView в другую DataGridView ?
Данные в первой таблице заполняются пользователем а во вторую таблицу(в другой...

Фильтр по датам в datagridview
В данный момент пишу программу на С#, имеется datagridview в котором есть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru