Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > MS Access, Дня между датами


Автор: Cyclone 25.6.2009, 11:12
Привет.
Необходимо посчитать количество дней между датой в базе данных и введённой пользователем.
Используется Delphi7, MS Access 2003, ODBC, ADOQuery.

Проверяю запрос MS Access:
Код

SELECT р.id_работы, DateDiff("d", #01/01/2001#, [р.Дата_начала]) FROM Работа р


Всё работает нормально.
Тот же самый запрос в Delphi даёт EOleException.

Код

DataModule2.ADOQuery_Work_Details.Active := false;
DataModule2.ADOQuery_Work_Details.SQL.Clear;

DataModule2.ADOQuery_Work_Details.SQL.Append('SELECT р.id_работы, DateDiff("d", #01/01/2001#, [р.Дата_начала]) FROM Работа р');

DataModule2.ADOQuery_Work_Details.Active := true;
DataModule2.ADOQuery_Work_Details.Refresh;


Project xxx raised exception class EOleException with message '[Microsoft][Драйвер ODBC Microsoft Access] Слишком мало параметров. Требуется 1'. ...

Сами компоненты и подключние работают нормально.
Подскажите, в чём может быть причина? Возможно, дело в ODBC?

Спасибо.

Автор: pseud 25.6.2009, 12:25
ох уж эти русские названия полей...

Добавлено через 39 секунд
а так: 01.01.2001
?

Добавлено через 1 минуту и 5 секунд
ох уж эти русские названия таблиц...

Автор: Данкинг 25.6.2009, 23:15
Цитата(pseud @  25.6.2009,  13:25 Найти цитируемый пост)
ох уж эти русские названия таблиц... 

Ну, ошибка точно не из-за них. smile 

Автор: Frees 26.6.2009, 08:26
а так?
Код

DataModule2.ADOQuery_Work_Details.Active := false;
DataModule2.ADOQuery_Work_Details.SQL.Clear;
DataModule2.ADOQuery_Work_Details.SQL.Add('SELECT р.id_работы, DateDiff("d", :Date_from, [р.Дата_начала]) FROM Работа р');
DataModule2.ADOQuery_Work_Details.ParamByName('Date_from').asDate := Date;
DataModule2.ADOQuery_Work_Details.Active := true;


а запрос типа 
Код

SELECT * FROM  Работа p

Работает?

Автор: dvamaster 26.6.2009, 10:42
ИМХО
русские буквы работают корректно только под MSAccess, через ADO частенько глючит
не единственный факт!!!  smile стоит только поискать на форуме про ADO там в большенстве случаев виноват русский язык

ЛЮДИ ЗАБЕЙТЕ НА РУССКИЕ БУКВЫ, ВЫ ПРОГРАММИСТЫ (извините крик души, короче учите англицкий, даже вся добрая инфа на нем)

Автор: Данкинг 26.6.2009, 11:04
Цитата(dvamaster @  26.6.2009,  11:42 Найти цитируемый пост)
русские буквы работают корректно только под MSAccess, через ADO частенько глючит

Ни разу не видел глюков, связанных с кириллицей. Да, я сам противник русских названий полей и никогда не называю поля по-русски, но так уж утверждать, что из-за кириллицы какие-то там глюки - тоже глупо. Что же это за СУБД такая "хорошая", если не понимает кириллицы? smile 

Автор: dvamaster 26.6.2009, 11:30
она прекрасно понимает криллицу в содержимом полей

Цитата(dvamaster @  26.6.2009,  13:42 Найти цитируемый пост)
русские буквы работают корректно только под MSAccess, через ADO частенько глючит


поправлюсь: неправильно расставленные квадратные скобочки и другой геморой ограничивающий русские названия

вопрос: не проще ли сразу писать на латинице???

дальше о спрашивал параметр, тобишь что-то из р.id_работы, [р.Дата_начала] не смог опрелелить как поле

Код

SELECT [р.id_работы], DateDiff("d", "#01/01/2001#", [р.Дата_начала]) FROM [Работа] AS [р]


или так
Код

SELECT [р].[id_работы], DateDiff("d", "#01/01/2001#", [р].[Дата_начала]) FROM [Работа] AS [р]


в общем извини, что нагрубил, у тебя тоже есть све мнение

Автор: Cyclone 1.7.2009, 18:19
В общем, дело было именно в ODBC и форматах даты...
Разбираться до конца не стал, благо, была возможность переехать на Jet - проблема отпала.

Автор: Sinneren 18.8.2009, 10:27
Цитата(Cyclone @ 1.7.2009,  18:19)
В общем, дело было именно в ODBC и форматах даты...
Разбираться до конца не стал, благо, была возможность переехать на Jet - проблема отпала.

я итак на Jet 4.0
проблема есть.

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