Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Исключение при выполнении параметрического запроса [D6, IB6.x]


Страницы:   1 2

Жук ©   (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, но...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо