Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Проблемы с датами при поиске


Автор: nicka 19.5.2004, 14:10
Работаю в Access
Код пишу на Visual Basic

В данном случае пишу процедуру поиска записей из таблицы по дате. Формат даты в таблице 15.05.2004, использую рекордсет(ADO), для которого составляю строку запроса
Код
strsql = "SELECT * FROM table1 WHERE date_field >= #" & Format(me.date_field.Value, "mm/dd/yyyy") & "# "


где me.date_field.Value - поле ввода на форме, в которое я ввожу значение 15.05.2004,
на данном поле у меня стоит маска 99.99.9999;0;_

Таким образом получаю строку
Код
SELECT * FROM table1 WHERE date_field >= #05.15.2004#


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

Пробовала много разных вещей - ничего не помогает,

когда у меня на машине в установках даты прописан формат 15/05/2004 , т.е. со слешами,
то никаких проблем не возникало, хотя там тоже есть хитрости, но их хоть нашла...
а тут никак не могу сообразить в чем дело,
А на машине у клинта , как раз формат даты с точками, так что надо мне решить этц проблему ,
а то кранты... baaa.gif

Автор: nicka 19.5.2004, 14:27
НАпример, почему
Код
Format('15/05/2004', "mm/dd/yyyy")

выдает 05.15.2004 ???

Ведь все из-за слешей здесь, рекордсет не не выдает записей, а выдает ошибку , говоря, что
Цитата
Syntax error in date in query expression 'date_field >= 05.15.2004'
!!!

Значит, мне нужен формат со слешами! а как его получить?

Автор: bankuss 20.5.2004, 06:57
замени точки на слэши через replace()

Автор: Akina 20.5.2004, 09:29
Я в таких случаях поступаю наоборот - форматирую не условие к виду поля, а содержимое поля к виду проверяемой даты. Запрос исполняется, есссно, медленнее, но зато на 100% переносим с машины на машину вне зависимости от версии офиса и региональных установок...

Автор: nicka 20.5.2004, 12:50
Цитата
Я в таких случаях поступаю наоборот - форматирую не условие к виду поля, а содержимое поля к виду проверяемой даты
не совсем поняла,
нельзя ли пример, с моего примера?

Автор: Akina 20.5.2004, 15:26
Вот тупой пример SQL-формы запроса с отбором по диапазону дат с 15 января по 31 января 2004 г. в поле Filed3:

Код
SELECT Таблица1.Field1, Таблица1.Field2, Format([Таблица1]![Field3],"yyyymmdd") AS ВыражениеДляОтбора
FROM Таблица1
WHERE (((Format([Таблица1]![Field3],"yyyymmdd")) Between "20040115" And "20040131"));

Автор: nicka 20.5.2004, 16:49
Akina , понятно вообщем, насчет универсальности , действительно удобно,
а насколько оправдано с точки зрения производительности?


А Я вот так сделал и пошло как надо

Код
Format('15/05/2004', "mm\/dd\/yyyy")

Автор: Akina 20.5.2004, 18:35
Цитата
насколько оправдано с точки зрения производительности

совершенно неоправдано

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)