Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-10886
HermitAlex
2003-08-14 15:42
2003.09.04
Ресурсы по мобильным телефонам


1-10838
olookin
2003-08-21 12:01
2003.09.04
Опция поиска необходимых файлов


14-10899
Феликс
2003-08-15 21:26
2003.09.04
Почему мы не живем своей жизнью?


14-10918
SergP
2003-08-17 20:32
2003.09.04
Как увеличить макс. кол-во соединений Эксплорера.


1-10821
Mazer
2003-08-21 19:01
2003.09.04
Перенос процедур главного модуля в несколько других...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский