|
|
|
| Из модуля формы отправляю в качестве параметра к запросу дату 06.09.2007 в формате дд.мм.гггг
В запрос приходит дата 09.06.2007 но в том же самом формате дд.мм.гггг!
Что делать (Access 2003) ?
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Запрос2"
Set rst = cmd.Execute(, Array(CDate(Дата1), CDate(Дата2)))
Set cmd = Nothing | |
|
| |
|
|
|
| Format(Дата1, "\#mm\/dd\/yyyy\#") | |
|
| |
|
|
|
| А в таком виде запрос не принимает дату вообще. Если убрать ##, то значение параметра принимается, но месяц все-равно 6-ой, а не 9-ый.
Запрос2
PARAMETERS [Дата1] DateTime, [Дата2] DateTime;
SELECT [Дата1] AS Выражение1, [Дата2] AS Выражение2;
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Запрос2"
Set rst = cmd.Execute(, Array(Format(Дата1, "\#mm\/dd\/yyyy#"), Format(Дата2, "\#mm\/dd\/yyyy#")))
Set cmd = Nothing
В итоге в параметре вместо #9/6/2007# стоит "#9/6/2007#"(!), что как дата не распознается | |
|
| |
|
|
|
| Почувствуйте разницу
ваше
Format(Дата1, "\#mm\/dd\/yyyy#"),
|
и как надо
Format(Дата1, "\#mm\/dd\/yyyy\#"),
|
| |
|
| |
|
|
|
| Все равно не работает даже на уровне
CDate(Format(Дата1, "\#mm\/dd\/yyyy\#"))
|
Выдает <Type mismatch> при том, что
Format(Дата1, "\#mm\/dd\/yyyy\#")
| дает "#09/06/2007#" | |
|
| |
|
|
|
| ну и нормально выдает! так и надо!
?Format(Date(), "\#mm\/dd\/yyyy\#")
#10/24/2007#
месяц. ден. год. все как омериканца прописали!
специально для выборки из запросов.
а вам че надо?! для чего?
попробуйте так
?Format(Date(), "mm\/dd\/yyyy")
10/24/2007
или так
?Format(Date(), "dd\/mm\/yyyy")
24/10/2007
можете вообще так
?Format(Date(), "dd-mm-yyyy")
24-10-2007
я бы еще хелп почитал про формат и про даты вообще | |
|
| |
|
|
|
| Ну простая задача - передать две даты в запрос, чтобы отобрать данные между ними.
Простой пример: первая дата 23/8/2007, вторая 6/9/2007.
Запрос в качестве второго параметра получает 9/6/2007 и ясное дело ничего не выдает.
Если вводить значение параметров вручную, все нормально. Если из кода - переворачивает каналья и все тут.
Если ссылаться из запроса на поля формы - тоже работает. Но я хочу работать с параметрами запроса, чтобы потом с минимальными усилиями перекинуть все в SQL Server и клиента не переписывать. | |
|
| |
|
|
|
| а так если попробовать передать параметры?
?cdate("6/9/2007")
06.09.2007
или так :)
a)Format(cdate("6/9/2007"),"\#dd\/mm\/yyyy\#")
b)Format(cdate("6/9/2007"),"\#mm\/dd\/yyyy\#") | |
|
| |
|
|
|
| С первого варианта мы начали
Второй не прокатывает и еще раз тестовый пример:
Запрос
PARAMETERS [Начало плейлиста] DateTime, [Окончание плейлиста] DateTime;
SELECT [Начало плейлиста] AS Выражение1, [Окончание плейлиста] AS Выражение2;
|
Код
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Запрос1"
Set rst = cmd.Execute(, Array(CDate(НачалоПлейлиста), Format(CDate(ОкончаниеПлейлиста), "\#mm\/dd\/yyyy\#")))
Set cmd = Nothing
|
Результаты
cmd.parameters(1).Value - "#09/06/2007#"
rst(1).Value - Empty
|
| |
|
| |
|
|
|
| лично я теперь передаю как Long. (т.е. преобразовываю и передаю, ну чтоб больше не мучится) | |
|
| |
|
|
|
| Хорошая идея.
А знаете, что сработало в конечном счете ?
Format(ОкончаниеПлейлиста, "dd mmm yyyy")
|
То есть передача в виде текста | |
|
| |
|
|
|
| бред :)
аа у вас региональныйе установки даты какие? | |
|
| |
|
|
|
| Ну наши, советские | |
|
| |
|
|
|
| Попробуйте так: Format(Date,"'yyyy\-mm\-dd'")
Jet и SQL Server принимают дату по разному. Вам давали советы для Jet, пока вы не признались... :-) | |
|
| |
|
|
|
| я тоже везде использую YYYYMMDD | |
|
| |