Формат представления даты в АДО

Jarad
Дата: 16.05.2005 18:05:59
Подключаюсь к дбф базе через АДО, ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\base\;Extended Properties=dBase IV;";
В дбф файле дата лежит в виде 01.01.2005, подлючение работает, но необходимо на поле даты наложить фильтр, по типу
WHERE DATE = '01.01.2005', и вот тут начинают вылазить ошибки. Форматы '01.01.2005', {^2005-01-01}, не подходят. В каком виде можно записать дату, чтобы наложить фильтр?
profil
Дата: 16.05.2005 18:43:38
odbc формат даты: yyyy-mm-dd hh:mi:ss.mmm
временную составляющую можно отбросить
Jarad
Дата: 16.05.2005 18:52:00
SELECT Jour.DATE AS DateDoc,
Jour.IDDOC, Doc.SP7998
FROM 1SJOURN Jour
INNER JOIN DH8012 Doc ON (Doc.IDDOC = Jour.IDDOC)
WHERE (Jour.IDDOCDEF LIKE '%66K%')
AND (Jour.DATE >= '2005-04-01')
ORDER BY Jour.DATE
Такой запрос. При записи даты в таком виде, ругается на несоответствие типов, чем их можно привести, или я пропускаю какие-то маркерные символы, типа {}...
Еще заметил трабл, при добавлении еще одного INNER JOIN "под" первым, тоже ругается на "что-то пропущенное".
АДО использует отличный синтаксис SQL? Или просто ограничивает к-во соединений...
Jarad
Дата: 16.05.2005 19:00:54
Нашел, дата пишеться в формате #2005-12-01#...
Проблема с джойнами не исчезла...
кузя
Дата: 16.05.2005 22:45:10
Еще заметил трабл, при добавлении еще одного INNER JOIN "под" первым, тоже ругается на "что-то пропущенное".
приведи полный текст SELECT'а и полный stack-trace ошибки (не надо пересказывать сообщение своими словами, нужно оригинальное сообщение)
Jarad
Дата: 17.05.2005 11:10:19
Запрос:
SELECT DATE AS DateDoc,
IDDOC, Doc.SP7998,Tab.SP8009
FROM 1SJOURN
INNER JOIN DH8012 Doc ON Doc.IDDOC = 1SJOURN.IDDOC
INNER JOIN DT8012 Tab ON (Tab.IDDOC = 1SJOURN.IDDOC) AND (1SJOURN.LINENO = Tab.LINENO)
WHERE (1SJOURN.IDDOCDEF LIKE '%66K%')
AND (1SJOURN.DATE >= #2005-04-01#)
ORDER BY DATE
Ошибка:
Microsoft JET Database Engine: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Doc.IDDOC = 1SJOURN.IDDOC
INNER JOIN DT8012 Tab ON (Tab.IDDOC = 1SJOURN.IDDOC)'.
Если комментирую строку со вторым джойном - все ок.
Cobalt
Дата: 17.05.2005 11:29:38
2 Jarad
может просто условие 2-го Join'а в скобки взять?
qu-qu
Дата: 17.05.2005 11:30:29
Jarad
...
Ошибка:
Microsoft JET Database Engine: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Doc.IDDOC = 1SJOURN.IDDOC
INNER JOIN DT8012 Tab ON (Tab.IDDOC = 1SJOURN.IDDOC)'.
Если комментирую строку со вторым джойном - все ок.


Могу ошибаться с оценкой, но недавно мне самому показали, что новый "джет" воспринимает двойные INNER JOIN только тогда, когда первый обернут скобками... , типа так:
SELECT DATE AS DateDoc,
IDDOC, Doc.SP7998,Tab.SP8009
FROM (1SJOURN
INNER JOIN DH8012 Doc ON Doc.IDDOC = 1SJOURN.IDDOC )
INNER JOIN DT8012 Tab ON (Tab.IDDOC = 1SJOURN.IDDOC) AND (1SJOURN.LINENO = Tab.LINENO)
WHERE (1SJOURN.IDDOCDEF LIKE '%66K%')
AND (1SJOURN.DATE >= #2005-04-01#)
ORDER BY DATE

З.Ы. моему удивлению и огорчению не было предела, ну зачем же так уродовать SQL-диалект, что до этого никто самостоятельно не в состоянии додуматься?
Jarad
Дата: 17.05.2005 11:43:59
Ошибка осталась почти такая-же...
SELECT DATE AS DateDoc,
IDDOC, Doc.SP7998,Tab.SP8009
FROM (1SJOURN
INNER JOIN DH8012 Doc ON Doc.IDDOC = 1SJOURN.IDDOC )
INNER JOIN DT8012 Tab ON (Tab.IDDOC = 1SJOURN.IDDOC) AND (1SJOURN.LINENO = Tab.LINENO)
WHERE (1SJOURN.IDDOCDEF LIKE '%66K%')
AND (1SJOURN.DATE >= #2005-04-01#)
ORDER BY DATE
Ошибка: Microsoft JET Database Engine: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Doc.IDDOC = 1SJOURN.IDDOC'.
З.Ы. скобки вокруг 2-го джойна тоже не помогают:
Ошибка: Microsoft JET Database Engine: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Doc.IDDOC = 1SJOURN.IDDOC
(INNER JOIN DT8012 Tab ON (Tab.IDDOC = 1SJOURN.IDDOC) AND (1SJOURN.LINENO = Tab.LINENO))'.
ooops
Дата: 17.05.2005 12:56:16
Попробуй так:
SELECT Jor.Date, Jor.IDDOC, Doc.SP7998, Tab.SP8009
FROM (1SJOURN AS Jor INNER JOIN DH8012 AS Doc ON Jor.IDDOC = Doc.IDDOC)
INNER JOIN DT8012 AS Tab ON (Jor.IDDOC = Tab.IDDOC) AND (Jor.LINENO = Tab.LINENO)
WHERE (((Jor.Date)>=#2005-04-01#) AND ((Jor.IDDOCDEF) Like '%66K%'))
ORDER BY Jor.Date