6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 182

Запрос к базе данных Access с выборкой по дате

17.07.2017, 17:03. Показов 5737. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, никак не получается сделать запрос к БД ACCESS с выборкой по дате, мучаюсь уже не первый день, прошу помощи у Вас.
В таблице "Клиент" есть 2 поля формата "Дата и время", поле "Дата_С" и "Дата_По".
"Дата_С" - дата начала действия абонемента.
"Дата_По" - дата окончания действия абонемента.
Мне необходимо сделать запрос из приложения vb.net такого плана:
переменная в программе
VB.NET
1
Dim FindData As Date=Now.Date
' дата для поиска
запрос
VB.NET
1
select * from Клиент where Дата_С >='" & FindData & "' And  Дата_По <= '" & FindData & "'
надо вывести в грид все записи где действующие абонементы на дату поиска (FindData), в БД даты в формате дд.мм.гггг
Миниатюры
Запрос к базе данных Access с выборкой по дате   Запрос к базе данных Access с выборкой по дате  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2017, 17:03
Ответы с готовыми решениями:

Запрос к access на выборку данных по дате
Народ, мучаюсь пол дня, при выборке по поле DateTime получаю ошибку несоответствие типов данных в выражении условия и т.д. Поля в базе...

Запрос к базе Access с разделением строки
В безе Access имеется поле содержащее текст с разделителем &quot;;&quot; Как составить запрос с разделением текста данного поля и выводом...

Запрос к БД по дате к базе ACCESS ( mdb )
Всем привет! Подскажите, пожалуйста, как производиться запрос к БД по дате.. точнее какой формат должен использоваться при этом?? ...

12
 Аватар для Pe4eNEG
123 / 123 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
17.07.2017, 19:42
Возможно, что-то типо такого:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    ''' <summary>
    ''' Выборка по дате
    ''' </summary>
    ''' <param name="_finddate">Дата</param>
    ''' <remarks></remarks>
    Shared Function GetDataByDate(ByVal _finddate As DateTime) As DataTable
        Dim _Adapter As OleDbDataAdapter = New OleDbDataAdapter(String.Format("SELECT * FROM [Клиент] WHERE [Дата_С]>=#{0}# AND [Дата_ПО] <= #{0}#", _finddate.ToShortDateString), _connect)
        Dim _DataSet As DataSet = New DataSet
        _Adapter.Fill(_DataSet)
        If _DataSet.Tables(0).Rows.Count = 0 Then
            _DataSet.Tables.Add()
        End If
        Return _DataSet.Tables(0)
    End Function
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,508
Записей в блоге: 2
17.07.2017, 20:23
Можно так
VB.NET
1
2
Dim nw As DateTime = Now
Dim cmdText As String = "SELECT * FROM testTB WHERE fromDate<" & nw.ToOADate & " AND toDate>" & nw.ToOADate
или так
VB.NET
1
2
3
Dim cmd As New System.Data.OleDb.OleDbCommand("SELECT * FROM testTB WHERE fromDate<@nw AND toDate>@nw", conn)
cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@nw", System.Data.OleDb.OleDbType.DBDate))
cmd.Parameters(0).Value = Now
1
6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 182
18.07.2017, 16:24  [ТС]
VB.NET
1
2
Dim nw As DateTime = Now
Dim cmdText As String = "SELECT * FROM testTB WHERE fromDate<" & nw.ToOADate & " AND toDate>" & nw.ToOADate
Ошибка - В экземпляре объекта не задана ссылка на объект.

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

по поводу функции:
VB.NET
1
2
3
4
5
6
7
8
9
Shared Function GetDataByDate(ByVal _finddate As DateTime) As DataTable
        Dim _Adapter As OleDbDataAdapter = New OleDbDataAdapter(String.Format("SELECT * FROM [Клиент] WHERE [Дата_С]>=#{0}# AND [Дата_ПО] <= #{0}#", _finddate.ToShortDateString), _connect)
        Dim _DataSet As DataSet = New DataSet
        _Adapter.Fill(_DataSet)
        If _DataSet.Tables(0).Rows.Count = 0 Then
            _DataSet.Tables.Add()
        End If
        Return _DataSet.Tables(0)
    End Function
Я конечно извиняюсь, но не совсем понял куда прикрутить эту функцию.
У меня таблица Grid2 заполняется подобным образом:

VB.NET
1
2
3
4
5
6
7
8
9
Dim c As New OleDbCommand
                c.Connection = conn
                c.CommandText =" select * from Клиент where Дата_С >='" & FindData & "' And  Дата_По <= '" & FindData & "' "
                Dim ds As New DataSet
                Dim da As New OleDbDataAdapter(c)
                da.Fill(ds, "Клиент")
                Grid2.DataSource = ds
                Grid2.DataMember = "Клиент"
                Grid2.Columns("Код").Visible = False
0
 Аватар для l34ddx
69 / 66 / 23
Регистрация: 23.07.2014
Сообщений: 121
18.07.2017, 16:36
VB.NET
1
2
3
Dim dv As DataView
            dv1 = New DataView(ds.Tables("Клиент"), "Дата_С >='" & FindData & "' And  Дата_По <= '" & FindData & "' ", "Столбец для сортировки", DataViewRowState.CurrentRows)
            Grid2.DataSource = dv
0
6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 182
18.07.2017, 17:21  [ТС]
VB.NET
1
2
3
Dim dv As DataView
            dv1 = New DataView(ds.Tables("Клиент"), "Дата_С >='" & FindData & "' And  Дата_По <= '" & FindData & "' ", "Столбец для сортировки", DataViewRowState.CurrentRows)
            Grid2.DataSource = dv
ds - имя не объявлено
dv1 - имя не объявлено
0
 Аватар для l34ddx
69 / 66 / 23
Регистрация: 23.07.2014
Сообщений: 121
18.07.2017, 17:55
ds - это Ваш датасет
вынесите его объявление за процедуры или в модуль(
VB.NET
1
Dim ds as DataSet
)
единицу уберите - остfвmте просто dv (это я случайно dv1 пасисал)
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,508
Записей в блоге: 2
18.07.2017, 18:25
Цитата Сообщение от NikolayUh Посмотреть сообщение
Ошибка - В экземпляре объекта не задана ссылка на объект.
Вы бы дали полный код как вы этот пример используете. Тогда можно что-то обсуждать, а так просто ни о чем.
0
6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 182
18.07.2017, 19:39  [ТС]
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 Dim ds As DataSet
   
 Private Sub RezFindPosD()
        Try
            Dim findDate, firstDate, secondDate As Date
            Dim s As String = MaskedTextBox1.Text 'задаваемая пользователем дата для поиска
            If s = "  ,  ," Then s = ""
            If s <> "" Then
                s = Replace(s, ",", ".")
                findDate = CDate(s)
 
                Dim dv As DataView
                dv = New DataView(ds.Tables("Клиент"), "Дата_С >='" & findDate & "' And  Дата_По <= '" & findDate & "' ", "Столбец для сортировки", DataViewRowState.CurrentRows)
                Grid2.DataSource = dv
            End If
 
 
        Catch ex As Exception
            My.Computer.Clipboard.SetText(ex.Message)
            MsgBox(ex.Message)
        End Try
    End Sub
Ошибка - "В экземпляре объекта не задана ссылка на объект."
Полный вынос мозга эти запросы к базе данных по дате .. сил больше нет.
Проще обработать таблицу с полученными данными чем пытаться получать готовые данные.
0
 Аватар для l34ddx
69 / 66 / 23
Регистрация: 23.07.2014
Сообщений: 121
18.07.2017, 19:51
Вместо "Столбец для сортировки" напишите название своего столбца из таблицы!!!
Например "Код" или "Дата_С" или "Дата_По"
По этому и ошибка - у Вас в таблице нет столбца с названием "Столбец для сортировки"
0
6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 182
18.07.2017, 20:05  [ТС]
Ошибка - "В экземпляре объекта не задана ссылка на объект."
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,508
Записей в блоге: 2
18.07.2017, 20:07
Лучший ответ Сообщение было отмечено NikolayUh как решение

Решение

Не понял, какое отношение имеет приведенный код к предложенному мной варианту. Вот более развернутый код (естественно имена базы, таблицы, полей д.б. ваши).
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    getData(Now)
End Sub
Public Sub getData(ByVal nw As DateTime)
    Using conn = New OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & IO.Path.Combine(Application.StartupPath, "myDb.mdb") & "; Password=;")
        conn.Open()
        Dim cmdText As String = "SELECT * FROM testTB WHERE fromDate<" & nw.ToOADate & " AND toDate>" & nw.ToOADate
        Dim cmd As OleDbCommand = New OleDbCommand(cmdText, conn)
        Try
            Dim ad = New OleDb.OleDbDataAdapter(cmd)
            Dim dt = New DataTable()
            ad.Fill(dt)
            DataGridView1.DataSource = dt
        Catch ex As OleDbException
            MsgBox(ex.Message)
        End Try
    End Using
End Sub
PS. Для установки даты логичнее использовать DateTimePicker.
1
6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 182
18.07.2017, 21:17  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Не понял, какое отношение имеет приведенный код к предложенному мной варианту. Вот более развернутый код (естественно имена базы, таблицы, полей д.б. ваши).
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    getData(Now)
End Sub
Public Sub getData(ByVal nw As DateTime)
    Using conn = New OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & IO.Path.Combine(Application.StartupPath, "myDb.mdb") & "; Password=;")
        conn.Open()
        Dim cmdText As String = "SELECT * FROM testTB WHERE fromDate<" & nw.ToOADate & " AND toDate>" & nw.ToOADate
        Dim cmd As OleDbCommand = New OleDbCommand(cmdText, conn)
        Try
            Dim ad = New OleDb.OleDbDataAdapter(cmd)
            Dim dt = New DataTable()
            ad.Fill(dt)
            DataGridView1.DataSource = dt
        Catch ex As OleDbException
            MsgBox(ex.Message)
        End Try
    End Using
End Sub
PS. Для установки даты логичнее использовать DateTimePicker.
Алилуя! Неужели заработало ..
Спасибо огромное за помощь я уже и не надеялся разобраться с этой проблемой
Вот только при вызове процедуры надо использовать на просто Now а Now.Date , иначе возникает ошибка, возможно появляющееся время вместе с датой парит мозг.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2017, 21:17
Помогаю со студенческими работами здесь

SQL запрос к базе данных Access
Доброго дня! Нужна помощь - запрос не выбирает данные из базы. Смысл запроса. Есть таблица в которой внесены статьи расходов и...

Запрос по дате к базе MySQL
Всем здравствуйте. Проблема заключается в запросе к базе данных, необходимо найти книгу с определенной датой издания. Перепробовал...

БД Access запрос по дате
Здравствуйте, нужна помощь в создании запроса к бд Access по текущей и по заданной дате, ищу в нете уже третий день ни фига толком нету, у...

Запрос по дате Access 2010
Есть таблица Table (3 поля: Field,Number, Data), в которой данные поступают нарастающим итогом, т.е. по полю Field каждое новое значение и...

Delphi+Access+SQL запрос по дате
Добрый день. Подскажите пожалуйста. У меня есть следующий код. Form28.DateTimePicker4.Date := Date; Form28.DateTimePicker4.Time :=...


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

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

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru