![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов хранимых процедур из Делфи! ПРОБЛЕМЫ!!! [D5, IB6.x]
Alex Z © (2004-09-06 13:46:00)Ув. профессионалы подскажите пожалуйста, почему хранимая процедура может не выполняться(вернее выполняться частично, обновляет не все записи) если я вызываю ее программно из Делфи, но если я выполняю ее из окружения(допустим IBExpert), то она выполняется абсолютно корректно?!!!
Как такое может быть?!!!!
Буду признателен за помощь.
С ув. Александр
Alex Z (2004-09-10 11:29:00) [1]>>А эта процедудура на сервере где-нибудь вызывается?
Конечно вызывается!! А как же!!! В Дельфях она некорректно работает!!!:(
TohaNik (2004-09-09 17:52:00) [2]А эта процедудура на сервере где-нибудь вызывается?
Alex Z (2004-09-09 16:50:00) [3]>>примеры передаваемых параметров?
Я их вообще не использую........
MU (2004-09-08 17:47:00) [4]примеры передаваемых параметров?
Alex Z (2004-09-08 16:43:00) [5]>IBStoredProc1.ParamByName('VD').AsDate := Date;
>IBStoredProc1.ParamByName('VD1').AsDate := Date;
>когда даты равны VD = VD1,
>то условие
> a.visitdate >=:VD and a.visitdate<:VD1
>не работает
Дело не в параметрах, а в том, что она под одной оболочкой корректно выполняется, а под Делфей некоректно для одних и тех же данных! Вот в чем проблема! ПО сути такого быть не может:( а имеет место!!!
MU (2004-09-08 13:54:00) [6]execute procedure NEW_PROCEDURE1('01.01.2004','01.01.2004');
когда даты равны VD = VD1,
то условие
a.visitdate >=:VD and a.visitdate<:VD1
не работает
MU (2004-09-08 13:51:00) [7]>> IBStoredProc1.ParamByName('VD1').AsDate := Date;
>> IBStoredProc1.ParamByName('VD').AsDate := Date;
IBStoredProc1.ParamByName('VD').AsDate := Date;
IBStoredProc1.ParamByName('VD1').AsDate := Date;
Alex Z (2004-09-08 13:39:00) [8]Запускаю выполнение запроса в IBExpert:
execute procedure NEW_PROCEDURE1('01.01.2004','01.01.2004');
- не срабатывает. Нажимаю кнопочку запуска процедуры при ее редактировании - все работает.
ДА, в IBConsole тоже не работает!:) Шо за на фиг?!!!
Alex Z (2004-09-08 13:32:00) [9]НЕ-А ребяты!! Не работает: та же самая фигня, одни записи обрабатывает, а другие -нет. А в сервисной проге все срабатывает нормально!:(((
Я теряюсь в догадках.........
Alex Z (2004-09-08 13:27:00) [10]>>А Вы проповали 'запихать вызов процедуры в ibquery', насколько я знаю какая-то версия IBStoredProc просто кривая.
Надо попробовать!Спасибо за совет! Щаз проверю и сообщу!:)
Domkrat (2004-09-07 13:37:00) [11]А Вы проповали 'запихать вызов процедуры в ibquery', насколько я знаю какая-то версия IBStoredProc просто кривая.
Карелин Артем (2004-09-07 13:15:00) [12]Alex Z (07.09.04 13:07) [12]
UnPrepare не надо - это только замедляет работу.
Alex Z (2004-09-07 13:07:00) [13]commit делал,это ничего не дало.
>> непоняттные шаманские танцы с UnPrepare и Prepare; - смотрел по книге,как там рекомендовалось вызывать процедуры.
>>А какой смысл в таблице, если всё и так получается одним запросом - дело в том, что по этим данным я строю отчет,в нем группировка по клиентам.Но так как я отображаю много полей, то я не могу их впихнуть в этот запрос потому что придется делать по ним группировку.А если так, то он нифига не посчитает.Вот я и выполняю эту процедуру, чтобы она все посчитала,а я потом группирую записи с помощью Дельфийских отчетов и пишу простой запросик без всяких группировок!!
Может быть как-то можно в запрос с группировкой включить поля, котороые необходимо отображать, но совсем не нужно включать в группировку?Я не знаю.....:(((
Карелин Артем (2004-09-07 13:04:00) [14]ЮЮ © (07.09.04 08:46) [10]
1) явно мимо...
Alex Z (06.09.04 13:46)
Транзакции все подтверждены?
ЮЮ (2004-09-07 08:46:00) [15]1) непоняттные шаманские танцы с UnPrepare и Prepare;
2)
>Смысл процедуры в обновлении таблицы и подсчете полной суммы по каждому клиенту.
А какой смысл в таблице, если всё и так получается одним запросом
сергей1 (2004-09-06 18:00:00) [16]тогда попробуй не storedproc, а просто запихать вызов процедуры в ibquery, может у тебя с параметрами какие-то косяки
LM2 (2004-09-06 17:39:00) [17]Может Commit надо делать!?
stud (2004-09-06 17:33:00) [18]а сам запрос при запуске из программы что возвращает?
> select f.id id,
> sum(b.price)price
> from VISITS a, INVSETIGATION b, DOCTORS c,
> INVEST d, FROMWHOM e , USERS f, hospital g
> where a.id=b.visit_id and b.doctor_id=c.id and
> d.id=b.invest_id and b.fromwhom_id= e.id and
> f.id=a.user_id and g.id = e.hospital_id
> and a.visitdate >=:VD and a.visitdate<:VD1
> group by f.id
> into :id,:price
Alex Z (2004-09-06 17:11:00) [19]Вот как я запускаю процедуру:
IBStoredProc1.UnPrepare;
IBStoredProc1.ParamByName('VD1').AsDate := Date;
IBStoredProc1.ParamByName('VD').AsDate := Date;
IBStoredProc1.Prepare;
IBStoredProc1.ExecProc;
А вот сама процедура:
CREATE PROCEDURE NEW_PROCEDURE1 (
VD DATE,
VD1 DATE)
RETURNS (
RETS INTEGER)
AS
declare variable id integer;
declare variable price float;
begin
for select f.id id,
sum(b.price)price
from VISITS a, INVSETIGATION b, DOCTORS c,
INVEST d, FROMWHOM e , USERS f, hospital g
where a.id=b.visit_id and b.doctor_id=c.id and
d.id=b.invest_id and b.fromwhom_id= e.id and
f.id=a.user_id and g.id = e.hospital_id
and a.visitdate >=:VD and a.visitdate<:VD1
group by f.id
into :id,:price do
begin
/* rets = :price;*/
update tmp set totalprice = :price where user_id=:id;
suspend;
end
end
Смысл процедуры в обновлении таблицы и подсчете полной суммы по каждому клиенту.
Alex Z (2004-09-06 16:37:00) [20]да! IBStoredProc!!!
В том то и дело, что такого быть не может, но именно это и происходит!!:(
Хотел написать красивую процедурку, которая бы делала все за меня, а не получилось!