![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Исключение при выполнении параметрического запроса [D6, IB6.x]
Жук © (2003-08-12 09:45:00)
MyIBSQL.SQL.Add("select firstdayofmonth(:ondate) from rdb$database");
MyIBSQL.ParamByName("ondate").AsDate:=StrToDate(MaskEdit1.Text);
MyIBSQL.ExecQuery;
Вызывает исключение "-804 Неизвестный тип данных", если IBServer стоит под Виндой 2000/ХР, а если под Линухом, то всё ОК. Куда копать ?
Жук (2003-08-12 13:40:00) [1]
Ладно, закроем тему, разве только кого озарит :-)))
Всем спасибо.
Zacho (2003-08-12 13:30:00) [2]
> Жук © (12.08.03 13:15) [37]
>
> 1) Ты тестил в ИБ или в ФБ ?
В Yaffil. Могу и в FB, но ставить его на свой комп сейчас ломы, а с запуском сервака с FB некоторые проблемы :(
> 3) Как ? Если просто входной параметр изменить, то она компилится,
> всё нормально, но почему-то опять выставляет DATE
Черт знает, сейчас посмотрел - такая же фигня. Так что идея действительно была дурацкая.
Только что попробовал на IB 5.6 - такая же ошибка, как и у тебя.
Видать, какая-то багофича IB :(
Жук (2003-08-12 13:15:00) [3]
> Zacho © (12.08.03 12:12)
1) Ты тестил в ИБ или в ФБ ?
2) У меня любой запрос, если там эта функция с параметром, то -804.
3) Как ? Если просто входной параметр изменить, то она компилится, всё нормально, но почему-то опять выставляет DATE.
Zacho (2003-08-12 12:12:00) [4]
Получил, проверил. Простейший запрос SELECT FIRSTDAYOFMONTH(:ON_DATE) FROM RDB$DATABASE отрабатывает нормально. И в диалекте 1, и в диалекте 3. Хоть с параметром, хоть с конкретным значением. А у тебя именно такой простой запрос тоже не работает ?
Еще одна дурацкая идея: в декларации UDF измени DATE на TIMESTAMP.
Жук (2003-08-12 11:53:00) [5]
> Johnmen © (12.08.03 11:43)
Вряд ли поможет он же ещё на препаре ругается :-(
> Zacho © (12.08.03 11:36)
Ушло.
Johnmen (2003-08-12 11:43:00) [6]
Жук © (12.08.03 11:25) [25]
:))
Все дело в том, что хотя у тебя вроде бы один параметр, но на самом деле он интерпретируется как два разных. Т.е. сколько в тексте запроса :, столько и параметров. Попробуй обращаться к ним по индексу...
Жук (2003-08-12 11:42:00) [7]
> Desdechado © (12.08.03 11:36)
> Sergey13 © (12.08.03 11:36)
Сорри, стормозил :-)
Zacho (2003-08-12 11:36:00) [8]
2 Жук ©
Если хочешь - вышли мне dll с этой UDF (и декларацию ф-ции естественно тоже напиши) - посмотрю у себя. Если будет работать - значит точно баг IB6.0
Desdechado (2003-08-12 11:36:00) [9]
нет, просто вместо вызова firstdayofmonth поставь другой параметр, значение которого вычисляй в дельфи, а не в БД
Sergey13 (2003-08-12 11:36:00) [10]
2Жук © (12.08.03 11:27) [27]
>В смысле; "динамически формировать запрос" ? Если не будет другого выхода, то придётся так :-(
Зачем динамически? Достаточно 2 параметров на начало и конец периода. 8-)
Соловьев (2003-08-12 11:35:00) [11]
а ты случайно не 29.02.2003 подставляешь? :)
Жук (2003-08-12 11:29:00) [12]
> Vlad (12.08.03 11:26) [26]
> А если параметру конкретное значение присвоить ?
MaskEdit1.Text - вполне конкретное значение.
Жук (2003-08-12 11:27:00) [13]
> Sergey13 © (12.08.03 11:22)
В смысле; "динамически формировать запрос" ? Если не будет другого выхода, то придётся так :-(
Vlad (2003-08-12 11:26:00) [14]
А если параметру конкретное значение присвоить ?
Напр.
MyIBSQL.ParamByName("ondate").AsDate:=StrToDate("12.08.03") ?
Сработает ?
Жук (2003-08-12 11:25:00) [15]
> Zacho © (12.08.03 11:21)
1) Понял. Нет, там всё одинаково.
2) Мы не ищём лёгких путей :-(
Может Johnman ещё что-нить придумает ? :-)
Sergey13 (2003-08-12 11:22:00) [16]
2Жук © (12.08.03 11:11) [22]
Ну дык :ondate ты из программы передаешь. И передавай сразу нужные даты, а не через ф-ю. Если бы параметр брался из БД, тогда да, а так...
Zacho (2003-08-12 11:21:00) [17]
> Жук © (12.08.03 11:08) [21]
>
> 1) Что значит декларация УДФ ?
Т.е. DECLARE EXTERNAL FUNCTION FIRSTDAYOFMONTH ...
Можешь посмотреть в IBExpert"е
А вообще посоветовал бы перейти с древнего глючного IB6.0 (баги которого уже никто никогда не будет править) на FB. Вполне возможно, что это именно баг IB6.0
Жук (2003-08-12 11:11:00) [18]
> Sergey13 © (12.08.03 11:08)
:-)))
Реальный запрос :
select a.name as art,p.name,v.ondate,
sum((select s.metrag from strigmetrag(vo.numer) s)) as metr
from virabotka v,vir_obr vo,spr_articul a,spr_obr_param p,
spr_obr_spr_obr_param op,vir_obr_spr_recept vr
where v.id=vo.id_vir and v.id_mach=12610 and vo.id_obr=12441 and
p.id=op.id_obr_param and op.id_obr=vr.id_recept and vr.id_vir_obr=vo.id and
(select max(vo1.id_art) from vir_obr vo1
where not vo1.id_art is null and vo.numer=vo1.numer)=a.id and
v.ondate between firstdayofmonth(:ondate) and :ondate
group by a.name,p.name,v.ondate
order by a.name,p.name,v.ondate
Собственно, для битвина и надо.
Sergey13 (2003-08-12 11:08:00) [19]
А я вот чего не понимаю. Зачем из делфы запрашивать у базы первый день месяца, про которую база знает от УДФ написаной на делфе? Прямо в делфе, что, никак не получить это значение? Что то похоже на из Москвы в Питер, но через Париж. 8-)
Жук (2003-08-12 11:08:00) [20]
> Zacho © (12.08.03 11:01) [18]
> Дурацкая идея: а декларация UDF в базах под win и linux
> одинаковая ? Версии сервера одинаковые ?
Дурацкие они самые правильные :-) Я тоже на это грешу.
1) Что значит декларация УДФ ?
2) Я не знаю, можно ли тут говорить об "одинаковости". И там и там 600, но...