Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Исключение при выполнении параметрического запроса   Найти похожие ветки 

 
Жук ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.025 c
3-10601
Relaxxx
2003-08-13 12:29
2003.09.04
Обязательно ли нужно инсталировать кл. часть Oracle для программы


1-10718
andruxa
2003-08-20 14:35
2003.09.04
Помогите оптимизировать код.


14-10873
copyr25
2003-08-14 16:41
2003.09.04
HELP ME ПЛИИЗ!


1-10717
Yakudza
2003-08-17 22:19
2003.09.04
TXMLDocument


14-10949
ehri
2003-08-16 12:45
2003.09.04
Gif Animated