Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизИсключение при выполнении параметрического запроса Найти похожие ветки
← →
Жук (2003-08-12 09:45) [0]
MyIBSQL.SQL.Add("select firstdayofmonth(:ondate) from rdb$database");
MyIBSQL.ParamByName("ondate").AsDate:=StrToDate(MaskEdit1.Text);
MyIBSQL.ExecQuery;
Вызывает исключение "-804 Неизвестный тип данных", если IBServer стоит под Виндой 2000/ХР, а если под Линухом, то всё ОК. Куда копать ?
← →
Nikolay M. (2003-08-12 09:50) [1]MyIBSQL.ParamByName("ondate").DataType = ftDate;
?
← →
Жук (2003-08-12 09:52) [2]Даже если :
MyIBSQL.SQL.Add("select firstdayofmonth(:ondate) from rdb$database");
MyIBSQL.Prepare;
Всё равно лается :-(
← →
Johnmen (2003-08-12 09:56) [3]MyIBSQL.ParamByName("ondate").AsDateTime:=...
Ну и тип параметра д.б. определен...
← →
Жук (2003-08-12 10:01) [4]Nikolay M. © (12.08.03 09:50)
Johnmen © (12.08.03 09:56)
А-а ! Понял, ща попробую.
← →
Соловьев (2003-08-12 10:06) [5]А если
MyIBSQL.SQL.Add("select firstdayofmonth(cast(:ondate as date)) from rdb$database");
MyIBSQL.ParamByName("ondate").AsString:=MaskEdit1.Text;
← →
Жук (2003-08-12 10:16) [6]
> Соловьев © (12.08.03 10:06)
Ругается также, да ещё добавил "SQL warning code = 301. DATE data type is now called TIMESTAMP."
← →
Соловьев (2003-08-12 10:19) [7]MyIBSQL.SQL.Add("select firstdayofmonth(cast(:ondate as timestamp)) from rdb$database");
← →
Жук (2003-08-12 10:26) [8]
> Соловьев © (12.08.03 10:19)
Это-то понятно.:-)
Я говорю, что -804 никуда не делось.
> Nikolay M. © (12.08.03 09:50)
> Johnmen © (12.08.03 09:56)
Даже при явном задании типа параметра ругается также. :-(
Может есть какие-то нюансы в "Win vs. Linux" ?
← →
Zacho (2003-08-12 10:27) [9]На всякий случай, приведи текст процедуры firstdayofmonth и укажи, в каком диалекте работаешь.
← →
Zacho (2003-08-12 10:28) [10]И еще: а если вместо параметра конкретное значение подставить ? И так же работает этот запрос из IBExpert, например ?
← →
roottim (2003-08-12 10:30) [11]MyIBSQL.SQL.Add("select firstdayofmonth(:ondate) from rdb$database");
MyIBSQL.ParamByName("ondate").AsDate Time:=StrToDate(MaskEdit1.T ext);
MyIBSQL.ExecQuery;
← →
Vlad (2003-08-12 10:37) [12]Попробуй присвоить параметру StrToDate(MaskEdit1.EditText)
← →
Жук (2003-08-12 10:39) [13]
> roottim (12.08.03 10:30)
Нет.
> Zacho © (12.08.03 10:27)
1) Не процедура, функция(УДФ). Была написана под винду, потом переписана под линух.
2) Диалект 1
3) Если конкретное значение подставить, то работает
4) Из IBExpert точно такие же глюки.
← →
Жук (2003-08-12 10:49) [14]
> Vlad (12.08.03 10:37) [12]
> Попробуй присвоить параметру StrToDate(MaskEdit1.EditText)
Не понял.
← →
Vlad (2003-08-12 10:52) [15]Если у тебя MaskEdit в котором задана маска, то проперть Text вернет тебе значение БЕЗ маски, а проперть EditText вернет значение с учетом маски
← →
Жук (2003-08-12 10:57) [16]
> Vlad (12.08.03 10:52)
Понятно. Нет, это не в той стороне :-(
← →
Соловьев (2003-08-12 10:59) [17]
> 3) Если конкретное значение подставить, то работает
тогда не понятно... все таки в той стороне.
← →
Zacho (2003-08-12 11:01) [18]Дурацкая идея: а декларация UDF в базах под win и linux одинаковая ? Версии сервера одинаковые ?
← →
Соловьев (2003-08-12 11:01) [19]используй DateTimePicker - от многих траблов уйдешь.
← →
Sergey13 (2003-08-12 11:08) [20]А я вот чего не понимаю. Зачем из делфы запрашивать у базы первый день месяца, про которую база знает от УДФ написаной на делфе? Прямо в делфе, что, никак не получить это значение? Что то похоже на из Москвы в Питер, но через Париж. 8-)
← →
Жук (2003-08-12 11:08) [21]
> Zacho © (12.08.03 11:01) [18]
> Дурацкая идея: а декларация UDF в базах под win и linux
> одинаковая ? Версии сервера одинаковые ?
Дурацкие они самые правильные :-) Я тоже на это грешу.
1) Что значит декларация УДФ ?
2) Я не знаю, можно ли тут говорить об "одинаковости". И там и там 600, но...
← →
Жук (2003-08-12 11:11) [22]
> 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
Собственно, для битвина и надо.
← →
Zacho (2003-08-12 11:21) [23]
> Жук © (12.08.03 11:08) [21]
>
> 1) Что значит декларация УДФ ?
Т.е. DECLARE EXTERNAL FUNCTION FIRSTDAYOFMONTH ...
Можешь посмотреть в IBExpert"е
А вообще посоветовал бы перейти с древнего глючного IB6.0 (баги которого уже никто никогда не будет править) на FB. Вполне возможно, что это именно баг IB6.0
← →
Sergey13 (2003-08-12 11:22) [24]2Жук © (12.08.03 11:11) [22]
Ну дык :ondate ты из программы передаешь. И передавай сразу нужные даты, а не через ф-ю. Если бы параметр брался из БД, тогда да, а так...
← →
Жук (2003-08-12 11:25) [25]
> Zacho © (12.08.03 11:21)
1) Понял. Нет, там всё одинаково.
2) Мы не ищём лёгких путей :-(
Может Johnman ещё что-нить придумает ? :-)
← →
Vlad (2003-08-12 11:26) [26]А если параметру конкретное значение присвоить ?
Напр.
MyIBSQL.ParamByName("ondate").AsDate:=StrToDate("12.08.03") ?
Сработает ?
← →
Жук (2003-08-12 11:27) [27]
> Sergey13 © (12.08.03 11:22)
В смысле; "динамически формировать запрос" ? Если не будет другого выхода, то придётся так :-(
← →
Жук (2003-08-12 11:29) [28]
> Vlad (12.08.03 11:26) [26]
> А если параметру конкретное значение присвоить ?
MaskEdit1.Text - вполне конкретное значение.
← →
Соловьев (2003-08-12 11:35) [29]а ты случайно не 29.02.2003 подставляешь? :)
← →
Zacho (2003-08-12 11:36) [30]2 Жук ©
Если хочешь - вышли мне dll с этой UDF (и декларацию ф-ции естественно тоже напиши) - посмотрю у себя. Если будет работать - значит точно баг IB6.0
← →
Desdechado (2003-08-12 11:36) [31]нет, просто вместо вызова firstdayofmonth поставь другой параметр, значение которого вычисляй в дельфи, а не в БД
← →
Sergey13 (2003-08-12 11:36) [32]2Жук © (12.08.03 11:27) [27]
>В смысле; "динамически формировать запрос" ? Если не будет другого выхода, то придётся так :-(
Зачем динамически? Достаточно 2 параметров на начало и конец периода. 8-)
← →
Жук (2003-08-12 11:42) [33]
> Desdechado © (12.08.03 11:36)
> Sergey13 © (12.08.03 11:36)
Сорри, стормозил :-)
← →
Johnmen (2003-08-12 11:43) [34]Жук © (12.08.03 11:25) [25]
:))
Все дело в том, что хотя у тебя вроде бы один параметр, но на самом деле он интерпретируется как два разных. Т.е. сколько в тексте запроса :, столько и параметров. Попробуй обращаться к ним по индексу...
← →
Жук (2003-08-12 11:53) [35]
> Johnmen © (12.08.03 11:43)
Вряд ли поможет он же ещё на препаре ругается :-(
> Zacho © (12.08.03 11:36)
Ушло.
← →
Zacho (2003-08-12 12:12) [36]Получил, проверил. Простейший запрос SELECT FIRSTDAYOFMONTH(:ON_DATE) FROM RDB$DATABASE отрабатывает нормально. И в диалекте 1, и в диалекте 3. Хоть с параметром, хоть с конкретным значением. А у тебя именно такой простой запрос тоже не работает ?
Еще одна дурацкая идея: в декларации UDF измени DATE на TIMESTAMP.
← →
Жук (2003-08-12 13:15) [37]
> Zacho © (12.08.03 12:12)
1) Ты тестил в ИБ или в ФБ ?
2) У меня любой запрос, если там эта функция с параметром, то -804.
3) Как ? Если просто входной параметр изменить, то она компилится, всё нормально, но почему-то опять выставляет DATE.
← →
Zacho (2003-08-12 13:30) [38]
> Жук © (12.08.03 13:15) [37]
>
> 1) Ты тестил в ИБ или в ФБ ?
В Yaffil. Могу и в FB, но ставить его на свой комп сейчас ломы, а с запуском сервака с FB некоторые проблемы :(
> 3) Как ? Если просто входной параметр изменить, то она компилится,
> всё нормально, но почему-то опять выставляет DATE
Черт знает, сейчас посмотрел - такая же фигня. Так что идея действительно была дурацкая.
Только что попробовал на IB 5.6 - такая же ошибка, как и у тебя.
Видать, какая-то багофича IB :(
← →
Жук (2003-08-12 13:40) [39]Ладно, закроем тему, разве только кого озарит :-)))
Всем спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.01 c