Вниз
Скачать: CL | DM;

DBExpres Проблемы SQLStoredProc   Найти похожие ветки 

← →
YurikGl ©   (2004-04-07 17:16) [0]

Есть SQLStoredProc1.
Выполняю с ее помощью одну процедуру
SQLStoredProc1.StoredProcName:="Первая процедура"
SQLStoredProc1.ParamByName("InПараметр").value:=что-то
...
SQLStoredProc1.ExecProc;
что-то вернули:=SQLStoredProc1.ParamByName("OutПараметр").value;

Дальше, если с помощью того же SQLStoredProc выполнить другую процедуру

SQLStoredProc1.StoredProcName:="Другая процедура"

То на этой строчке программа вылетает.

Предположительно, это связано с тем, что SQLStoredProc1 сохраняте значения предыдущих параметров и т.к. у разных хранимых процедур они разные, выдает ошибку. Что делать?

SQLStoredProc1.Params.clear не помогает.


← →
wild_arg ©   (2004-04-07 17:20) [1]

а сделай типа:
with TSQLStoredProc1.Create do begin
 StoredProcName:="Первая процедура"
 ParamByName("InПараметр").value:=что-то
 ...
 ExecProc;
 res1 := ParamByName("OutПараметр").value;
 Free;
end;
with TSQLStoredProc1.Create do begin
 StoredProcName:="Другая процедура"
 ParamByName("InПараметр").value:=что-то
 ...
 ExecProc;
 res2 := ParamByName("OutПараметр").value;
 Free;
end


← →
bushmen ©   (2004-04-07 17:30) [2]

Проще надо быть. После получения значения первой процедуры пишешь:

TSQLStoredProc1.Parameters.Delete(0);

И будет тебе счастье


← →
bushmen ©   (2004-04-07 17:34) [3]

Конечно, я немного погорячился:

SQLStoredProc1.Params.Delete(0);


← →
YurikGl ©   (2004-04-07 17:40) [4]

re [3] В смысле нужно всем параметрам говорить Params.Delete(i)?


← →
YurikGl ©   (2004-04-07 17:48) [5]

re [3] Не помогает.
Зато [1] Помогло, хотя и изврат это...


← →
wild_arg ©   (2004-04-07 17:54) [6]

2YurikGl
Да почему изврат-то?
Нормально все, зато у тебя в памяти не лежат ненужные постоянно компоненты. Они создаются когда надо и после этого уничтожаются.
Сам раньше так не любил, а теперь ничего :)


← →
YurikGl ©   (2004-04-07 18:38) [7]

Написал в итоге

procedure TDataModule1.SqlProcInit;
Begin
SQLStoredProc1.free;
SQLStoredProc1:=TSQLStoredProc.Create(self);
SQLStoredProc1.SQLConnection:=SqlConnection1;
End;

И вызываю каждый раз при вызове процедуры.
Но как-то проще должно быть.


← →
Desdechado ©   (2004-04-07 19:36) [8]

наблюдал похожий глюк, но причина была в том, что имя процедуры должно быть задано в ВЕРХНЕМ регистре ВСЕГДА, вне зависимости от диалекта


← →
YurikGl ©   (2004-04-07 19:47) [9]

re [8] Это я уже знаю. Если имя задать в нижнем регистре, то ParamByName вообще ничего "не видит"


← →
YurikGl ©   (2004-04-07 21:41) [10]

Кстати, эта пролема есть у всех dbExpress-компонентов. Первый запрос (неважно какой) проходит нормально, но потом при попытке присвоить свойству ComandText/StoreProcName любую стороку, приложение вылетает с ошибкой.


← →
Desdechado ©   (2004-04-08 21:22) [11]

ну, с ХП я так не извращался, а вот SQLDataSet я постоянно переприсваиваю commandtext и никаких проблем не наблюдал...



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.038 c
14-1082440980
XAOC
2004-04-20 10:03
2004.04.11
что это такое и с чем его есть??????????????????


6-1075900425
Petrovitch
2004-02-04 16:13
2004.04.11
Относительно IP адреса. ДЛЯ ВСЕХ...


3-1081846406
DBDEV
2004-04-13 12:53
2004.04.11
Потокобезопасный TADOQuery.Open, помогите советом!


1-1079886820
Batoon
2004-03-21 19:33
2004.04.11
Тильда и VK_...


4-1079858504
tytus
2004-03-21 11:41
2004.04.11
Как перехватить сообщения WM_VSCROLL и WM_HSCROLL?




   Наверх