Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизВызов хранимых процедур из Делфи! ПРОБЛЕМЫ!!! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.035 c