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

Вниз

Вызов хранимых процедур из Делфи! ПРОБЛЕМЫ!!!   Найти похожие ветки 

 
Alex Z   (2004-09-06 13:46) [0]

Ув. профессионалы подскажите пожалуйста, почему хранимая процедура может не выполняться(вернее выполняться частично, обновляет не все записи) если я вызываю ее программно из Делфи, но если я выполняю ее из окружения(допустим IBExpert), то она выполняется абсолютно корректно?!!!
Как такое может быть?!!!!
Буду признателен за помощь.
С ув. Александр


 
Johnmen ©   (2004-09-06 13:56) [1]

Такого быть не может...


 
Карелин Артем ©   (2004-09-06 13:59) [2]

Я солидарен с Johnmen ©   (06.09.04 13:56) [1]


 
Карелин Артем ©   (2004-09-06 14:02) [3]

Хотя проблемы могут быть вызваны неправильными настройками кодировок уже в программе...


 
сергей1   (2004-09-06 14:04) [4]

ты компонентом storedproc пользовался ?


 
Alex Z   (2004-09-06 16:37) [5]

да! IBStoredProc!!!
В том то и дело, что такого быть не может, но именно это и происходит!!:(
Хотел написать красивую процедурку, которая бы делала все за меня, а не получилось!


 
Alex Z   (2004-09-06 17:11) [6]

Вот как я запускаю процедуру:
 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

Смысл процедуры в обновлении таблицы и подсчете полной суммы по каждому клиенту.


 
stud ©   (2004-09-06 17:33) [7]

а сам запрос при запуске из программы что возвращает?
> 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


 
LM2   (2004-09-06 17:39) [8]

Может Commit надо делать!?


 
сергей1   (2004-09-06 18:00) [9]

тогда попробуй не storedproc, а просто запихать вызов процедуры в ibquery, может у тебя с параметрами какие-то косяки


 
ЮЮ ©   (2004-09-07 08:46) [10]

1) непоняттные шаманские танцы с UnPrepare и Prepare;
2)
>Смысл процедуры в обновлении таблицы и подсчете полной суммы по каждому клиенту.

А какой смысл в таблице, если всё и так получается одним запросом


 
Карелин Артем ©   (2004-09-07 13:04) [11]

ЮЮ ©   (07.09.04 08:46) [10]
1) явно мимо...

Alex Z   (06.09.04 13:46)  
Транзакции все подтверждены?


 
Alex Z   (2004-09-07 13:07) [12]

commit делал,это ничего не дало.
>> непоняттные шаманские танцы с UnPrepare и Prepare; - смотрел по книге,как там рекомендовалось вызывать процедуры.
>>А какой смысл в таблице, если всё и так получается одним запросом - дело в том, что по этим данным я строю отчет,в нем группировка по клиентам.Но так как я отображаю много полей, то я не могу их впихнуть в этот запрос потому что придется делать по ним группировку.А если так, то он нифига не посчитает.Вот я и выполняю эту процедуру, чтобы она все посчитала,а я потом группирую записи с помощью Дельфийских отчетов и пишу простой запросик без всяких группировок!!
Может быть как-то можно в запрос с группировкой включить поля, котороые необходимо отображать, но совсем не нужно включать в группировку?Я не знаю.....:(((


 
Карелин Артем ©   (2004-09-07 13:15) [13]

Alex Z   (07.09.04 13:07) [12]
UnPrepare не надо - это только замедляет работу.


 
Domkrat   (2004-09-07 13:37) [14]

А Вы проповали "запихать вызов процедуры в ibquery", насколько я знаю какая-то версия IBStoredProc просто кривая.


 
Alex Z   (2004-09-08 13:27) [15]

>>А Вы проповали "запихать вызов процедуры в ibquery", насколько я знаю какая-то версия IBStoredProc просто кривая.

Надо попробовать!Спасибо за совет! Щаз проверю и сообщу!:)


 
Alex Z   (2004-09-08 13:32) [16]

НЕ-А ребяты!! Не работает: та же самая фигня, одни записи обрабатывает, а другие -нет. А в сервисной проге все срабатывает нормально!:(((

Я теряюсь в догадках.........


 
Alex Z   (2004-09-08 13:39) [17]

Запускаю выполнение запроса в IBExpert:
execute procedure NEW_PROCEDURE1("01.01.2004","01.01.2004");
- не срабатывает. Нажимаю кнопочку запуска процедуры при ее редактировании - все работает.

ДА, в IBConsole тоже не работает!:) Шо за на фиг?!!!


 
MU ©   (2004-09-08 13:51) [18]

>> IBStoredProc1.ParamByName("VD1").AsDate := Date;
>> IBStoredProc1.ParamByName("VD").AsDate := Date;

IBStoredProc1.ParamByName("VD").AsDate := Date;
IBStoredProc1.ParamByName("VD1").AsDate := Date;


 
MU ©   (2004-09-08 13:54) [19]

execute procedure NEW_PROCEDURE1("01.01.2004","01.01.2004");

когда даты равны VD = VD1,
то условие
 a.visitdate >=:VD and a.visitdate<:VD1
не работает


 
Alex Z   (2004-09-08 16:43) [20]

>IBStoredProc1.ParamByName("VD").AsDate := Date;
>IBStoredProc1.ParamByName("VD1").AsDate := Date;
>когда даты равны VD = VD1,
>то условие
> a.visitdate >=:VD and a.visitdate<:VD1
>не работает

Дело не в параметрах, а в том, что она под одной оболочкой корректно выполняется, а под Делфей некоректно для одних и тех же данных! Вот в чем проблема! ПО сути такого быть не может:( а имеет место!!!


 
MU ©   (2004-09-08 17:47) [21]

примеры передаваемых параметров?


 
Alex Z   (2004-09-09 16:50) [22]

>>примеры передаваемых параметров?
Я их вообще не использую........


 
TohaNik ©   (2004-09-09 17:52) [23]

А эта процедудура на сервере где-нибудь вызывается?


 
Alex Z   (2004-09-10 11:29) [24]

>>А эта процедудура на сервере где-нибудь вызывается?
Конечно вызывается!! А как же!!! В Дельфях она некорректно работает!!!:(



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.041 c
6-1091520584
Максим
2004-08-03 12:09
2004.10.10
The Bat и Delphi


1-1095425335
MakNik
2004-09-17 16:48
2004.10.10
EInvalidPointer


9-1086861113
Andr
2004-06-10 13:51
2004.10.10
Про нормали в OpenGL


1-1095861749
DelphiLexx
2004-09-22 18:02
2004.10.10
Общедоступные паременные


3-1094920725
Master Kolyan
2004-09-11 20:38
2004.10.10
Организация виртуальной памяти используя принципы работы БД