Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запрос SQL lдля выбора по датам в VB.Net / 25 сообщений из 25, страница 1 из 1
27.03.2015, 10:06
    #38918493
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Помогите, пожалуйста!

Не удается сделать SQL запрос по выборке из таблицы Acscess по датам. В таблице [Подтемы] поле [Дата] имеет краткий формат, т.е. дд.мм.гггг.
Вот код:

Dim d_beg, d_end As Date
Dim sSQL String

Conn = New OleDb.OleDbConnection()
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Учет трудоемкости\sql.mdb"
Conn.Open()
d_beg = DateTimePicker1.Value
d_end = DateTimePicker2.Value
sSQL = "SELECT * FROM Подтемы WHERE Дата BETWEEN>" & d_beg & " AND " & d_end

Выдается сообщение об ошибке!!!

Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Дата BETWEEN 25.03.2015 9:49:26 AND 28.03.2015 9:49:26'.
...
Рейтинг: 0 / 0
27.03.2015, 10:17
    #38918515
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
нужно отформатировать дату в следующий вид:
#2015/25/03 09:49:26#

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

и учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
27.03.2015, 11:21
    #38918668
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Dim tmp1,tmp2 as String

tmp1 = "'" & "2015/25/03 09:49:26" & "'"
tmp2 = "'" & "2015/27/03 09:49:26" & "'"

sSQL = "SELECT * FROM Подтемы WHERE Дата BETWEEN " & tmp1 & " AND " & tmp2

Если так, то выдается:

"Несоответствие типов данных в выражении условия отбора."

Вы не могли бы помочь и написать Sql-запрос?
...
Рейтинг: 0 / 0
27.03.2015, 11:24
    #38918679
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Вы кавычку от решетки отличит не можете?
...
Рейтинг: 0 / 0
27.03.2015, 11:29
    #38918701
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
За конкатенацию параметров с текстом запроса нужно отправлять на принудительные работы по чистке канализации. Нормальные люди используют параметры запроса. В этом случае заодно не нужно будет думать о строковом формате даты.
...
Рейтинг: 0 / 0
27.03.2015, 11:32
    #38918708
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Сон Веры ПавловныЗа конкатенацию параметров с текстом запроса нужно отправлять на принудительные работы по чистке канализации. Нормальные люди используют параметры запроса. В этом случае заодно не нужно будет думать о строковом формате даты.За параметры запроса нужно ... далее по тексту ..., нормальные люди используют ORM

Пусть сначала так научится, рано еще параметры, пока даже нет понимания преобразования типов
...
Рейтинг: 0 / 0
27.03.2015, 11:34
    #38918719
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Отличить могу, "отличит" нет. Не очень ориентируюсь в этом синтаксисе, поэтому и прошу помочь. Вежливо же спрашиваю.
...
Рейтинг: 0 / 0
27.03.2015, 11:36
    #38918727
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Slava_PskОтличить могу, "отличит" нет. Не очень ориентируюсь в этом синтаксисе, поэтому и прошу помочь. Вежливо же спрашиваю.я же вам дал ответ:
Shocker.Proнужно отформатировать дату в следующий вид:
#2015/25/03 09:49:26#вы его проигнорировали и спрашиваете, почему не работает
...
Рейтинг: 0 / 0
27.03.2015, 11:48
    #38918765
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Shocker.ProЗа параметры запроса нужно ... далее по тексту ..., нормальные люди используют ORM

Пусть сначала так научится, рано еще параметры, пока даже нет понимания преобразования типов
Не надо путать теплое с мягким. И ADO.Net, и ORM - штатные возможности фреймворка, и использовать их нужно сообразно ситации и задаче. Для выборки из базы 1 поля из одной записи одной таблицы возиться с ORM - нафиг. Но и то, и другое можно использовать правильно. А неправильному не нужно учиться с самого начала. Лучше даже вообще о таких вариантах не знать.
...
Рейтинг: 0 / 0
27.03.2015, 11:50
    #38918774
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Сон Веры Павловны,

Дык напиши человеку пример, что воздух-то сотрясать.
...
Рейтинг: 0 / 0
27.03.2015, 12:05
    #38918815
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Shocker.ProSlava_PskОтличить могу, "отличит" нет. Не очень ориентируюсь в этом синтаксисе, поэтому и прошу помочь. Вежливо же спрашиваю.я же вам дал ответ:
Shocker.Proнужно отформатировать дату в следующий вид:
#2015/25/03 09:49:26#вы его проигнорировали и спрашиваете, почему не работает

Хорошо, но я это уже пробовал. У меня в базе короткий формат даты без времени. Если такая строчка:

sSQL = "SELECT * FROM Подтемы WHERE Дата BETWEEN " & Format(CDate("01.01.2015"), "yyyy/MM/dd") & " AND " & Format(CDate("31.01.2015"), "yyyy/MM/dd") & " ORDER BY Дата"

то выдается

Число содержит синтаксическую ошибку в выражении запроса 'Дата BETWEEN 2015.01.01 AND 2015.01.31'.
...
Рейтинг: 0 / 0
27.03.2015, 12:11
    #38918830
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Slava_PskЧисло содержит синтаксическую ошибку в выражении запроса 'Дата BETWEEN 2015.01.01 AND 2015.01.31'.Попытаюсь в третий раз объяснить

СИНТАКСИС ДОЛЖЕН СОДЕРЖАТЬ РЕШЕТКУ!!!!! # как в моем примере

А также:
разделитель должен быть слеш! /

должен идти сначала год, потом день, потом месяц
...
Рейтинг: 0 / 0
27.03.2015, 12:13
    #38918835
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Код: c#
1.
sSQL = "SELECT * FROM Подтемы WHERE Дата BETWEEN #" & Format(CDate("01.01.2015"), "yyyy\/dd\/MM") & "# AND #" & Format(CDate("31.01.2015"), "yyyy\/dd\/MM") & "# ORDER BY Дата"
...
Рейтинг: 0 / 0
27.03.2015, 12:19
    #38918847
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Устал я заниматься разгадыванием ребусов. Если не хотите помочь, это ваше дело. Тогда пойду к другим.
...
Рейтинг: 0 / 0
27.03.2015, 12:20
    #38918848
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Извините, поспешил с ответом.
...
Рейтинг: 0 / 0
27.03.2015, 12:21
    #38918856
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Slava_PskЕсли не хотите помочьто есть я еще и виноват остался.
...
Рейтинг: 0 / 0
27.03.2015, 12:22
    #38918857
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Shocker.Pro
Код: c#
1.
sSQL = "SELECT * FROM Подтемы WHERE Дата BETWEEN #" & Format(CDate("01.01.2015"), "yyyy\/dd\/MM") & "# AND #" & Format(CDate("31.01.2015"), "yyyy\/dd\/MM") & "# ORDER BY Дата"



Попробовал, выдается
Дата содержит синтаксическую ошибку в выражении запроса 'Дата BETWEEN #2015/01/01# AND #2015/31/01#'.

???
...
Рейтинг: 0 / 0
27.03.2015, 12:23
    #38918860
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Shocker.ProSlava_PskЕсли не хотите помочьто есть я еще и виноват остался.

Я же извинился.
...
Рейтинг: 0 / 0
27.03.2015, 12:25
    #38918863
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
сорри, вот так "MM\/dd\/yyyy"
сам давно не работал с jet-ом.
...
Рейтинг: 0 / 0
27.03.2015, 12:26
    #38918864
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Но, по-хорошему Сон Веры Павловны прав, лучше использовать параметры в запросах, чтобы не париться с форматированием.
Я просто с параметрами не работал, сразу перескочил на хранимки, поэтому не рискую давать синтаксис.
...
Рейтинг: 0 / 0
27.03.2015, 12:29
    #38918874
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Благодарю, работает. Однако, насколько мы бы сэкономили время, если бы начали с сообщения 17439622.
Удачи!
...
Рейтинг: 0 / 0
27.03.2015, 12:48
    #38918913
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Slava_Psk, нельзя быть таким упертым... Вам сказали какой формат должен быть...
https://support.office.com/en-ie/article/Examples-of-query-criteria-3197228c-8684-4552-ac03-aba746fb29d8
авторRemember to surround date values with the # character so that Access can distinguish between date values and text strings.

Попробуйте:

Код: vbnet
1.
2.
Dim sSQL as String = "SELECT * FROM Подтемы WHERE Дата BETWEEN {0:#MM/dd/yyyy#} AND {1:#MM/dd/yyyy#} ORDER BY Дата "
Console.WriteLine(String.Format(sSQL, CDate("01.01.2015"), CDate("01.01.2016")))



Параметры используйте:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim con As OleDbConnection = New OleDbConnection( _
                        "Provider=Microsoft.jet.oledb.4.0;data source=C:\Учет трудоемкости\sql.mdb")
        con.Open()
        Dim cmdText As String = "SELECT * FROM Подтемы WHERE Дата BETWEEN ? AND ? ORDER BY Дата"
        Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
        cmd.CommandType = CommandType.Text 
        With cmd.Parameters
            .Add("@d_beg", OleDbType.Date).Value = DateTimePicker1.Value
            .Add("@d_end", OleDbType.Date).Value = DateTimePicker2.Value
        End With
        Dim reader As OleDbDataReader = cmd.ExecuteReader()
        While reader.Read()
            Console.WriteLine("--")
        End While
        reader.Close()
        con.Close()
        con = Nothing

...
Рейтинг: 0 / 0
27.03.2015, 13:00
    #38918932
Slava_Psk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
Спасибо, buser, возьму на заметку.
...
Рейтинг: 0 / 0
27.03.2015, 13:09
    #38918942
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
buserПопробуйте:

Код: vbnet
1.
Dim sSQL as String = "SELECT * FROM Подтемы WHERE Дата BETWEEN {0:#MM/dd/yyyy#} AND {1:#MM/dd/yyyy#} ORDER BY Дата "

перед слешом только обязательно обратный слеш, прямой слеш является спецсимволом
...
Рейтинг: 0 / 0
27.03.2015, 13:11
    #38918946
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос SQL lдля выбора по датам в VB.Net
да... забыл подставит системный разделитель... сорри... и вообще я протупил... чтой-то в превью не заметил, что вы уже разобрались... :)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запрос SQL lдля выбора по датам в VB.Net / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]