Несоответствие типа в выражении access

← →
Deedlit (2003-06-29 11:29)

Запрос базе данных MS Access возвращает сообщение «Несоответствие типов данных в выражении условия отбора». SQL запрос: SELECT * FROM MainBook WHERE (Birthday BETWEEN «01.01.2000» AND «01.01.2000») Связь с базой организована через ADO, драйвер — Microsoft Jet 4.0 OLE DB Provider.
Т.е. я пытаюсь получить поля по диапазону дат рождения людей. 🙁 Именно что пытаюсь. 🙁 Может, для ADO другой синтаксис нужен? В BDE все работало…

← →
Anatoly Podgoretsky (2003-06-29 11:31)

Оно не считает, что это даты, а как указывать литералы типа дат описано в справке по движку, у каждого свой формат. Справка есть в составе Офиса и на сайте Микрософт.

← →
Deedlit (2003-06-29 11:52)

> Anatoly Podgoretsky
Можно, если нетрудно, конкретнее — где это там искать? Я в этой области совсем начинающая… 🙁 И как вообще еще можно указать дату? Разделители другие?

← →
Anatoly Podgoretsky (2003-06-29 15:23)

А начать с того, что определить какой движок используется и искать в документации на него. Если это АДО и JET то в документации на Акцесс, справка в папке МС ОФИС, но это я уже ранее указал, там искать соответствуюзую тему.
Ты сам поищешь или как?

← →
Deedlit (2003-06-29 16:09)

> А начать с того, что определить какой движок используется
> и искать в документации на него.
> …
> Ты сам поищешь или как?
Не сердись, говорю же — не работала я с БД раньше. 🙁 Движок в данном случае — это Microsoft Jet 4.0 OLE DB Provider? В хелпе к офису про него ни слова. Есть раздел касательно типов ADO, там про DateTime написано «Date and time values for the years 100 through 9999.» Длина 8 байт. Чего ему нехватает?

← →
sniknik (2003-06-29 17:23)

для «Microsoft Jet 4.0 OLE DB Provider» есть файл справки JETSQL40.CHM поставляется с офисом, и в нем гораздо больше чем «ни слова», просто его надо было поставить (при установке офиса не убирать галочку устанавливать на хелпах).

← →
Deedlit (2003-06-29 17:44)

> sniknik ©
Я и не убирала. Ставила Word, Excel и Access, полным комплектом, MSOffice 2000. Файла НЕТ. Рискую нарваться на щелчок по носу :), но вы мне не кинете его на мыло? Очень уж хочется разобраться, что этой заразе от меня нужно. 🙁

← →
Deedlit (2003-06-29 17:45)

Уй! deedlit@land.ru Прошу прощения.

← →
Anatoly Podgoretsky (2003-06-29 18:04)

C:\Program Files\Microsoft Office\Office\1049
У меня он в этой папке

← →
Deedlit (2003-06-29 18:38) ← →
app (2003-06-29 19:52)

Попробуй сделать поиск JETSQL40.CHM по всему диску. Может не там ищешь.

← →
sniknik (2003-06-29 19:53)

у меня в этих
D:\Program Files\Common Files\Microsoft Shared\Office10\1033
D:\Program Files\Common Files\Microsoft Shared\Office10\1049
от разных установок
в старом может немного иначе называтся, вроде этого JETSQL35.CHM (возможно неточно). и потом какой офис ставиш? точно есть в 2000м/XP и главное нерезанном пиратами. (насчет 97/95 ??? хз)
в общем полный архив справки 3.1мб, только файл 262кб его и высылаю. (гарантий что чегото нехватает само по себе дать не могу, найди полную установку офиса)

← →
Anatoly Podgoretsky (2003-06-29 20:02)

Краткая выписка по датам
При указании аргумента условиеОтбора литералы даты (символы дат) должны вводиться в американском формате, даже если используется неамериканская версия ядра базы данных Jet. Например, дата 10 мая 1996 года записывается в России как 10.05.96, а в США как 5/10/96. Обязательно заключите даты в символы «решетки» (#), как показано в следующих примерах.
Для отбора записей с этой датой в российской базе данных необходимо использовать следующую инструкцию SQL:
SELECT *
FROM Заказы
WHERE ДатаИсполнения = #5/10/96#;
Кроме того, можно применять функцию DateValue, которая поддерживает международные стандарты, заданные в Microsoft Windows®. Например, для отбора записей в американской базе данных создайте текст программы:
SELECT *
FROM Заказы
WHERE ДатаИсполнения = DateValue(«5/10/96»);
Для российской базы данных текст программы будет выглядеть так:
SELECT *
FROM Заказы
WHERE ДатаИсполнения = DateValue(«10.5.96»);

← →
Deedlit (2003-06-29 20:58)

Угу, уже все нашла в JETSQL40, огромное спасибо за него sniknik»у. Правда, в качестве инструкции обнаружилось лишь упоминание, что длина поля даты составляет 8 байт и может быть от 100 до 9999 лет. В общем, успела натереть веревку мылом 🙂 , пока не наткнулась на пример программы в том же разделе.
Исходный запрос в итоге стал выглядеть вот так: (Birthday BETWEEN #01/01/00# AND #01/01/00#)».
Еще раз спасибо уважаемым Анатолию и sniknik»у за потраченное на мою скромную персону время. (делает почтительный книксен)
🙂