![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBExpres Проблемы SQLStoredProc [D7, IB5.x, IB6.x]
YurikGl © (2004-04-07 17:16:00)Есть SQLStoredProc1.
Выполняю с ее помощью одну процедуру
SQLStoredProc1.StoredProcName:='Первая процедура'
SQLStoredProc1.ParamByName('InПараметр').value:=что-то
...
SQLStoredProc1.ExecProc;
что-то вернули:=SQLStoredProc1.ParamByName('OutПараметр').value;
Дальше, если с помощью того же SQLStoredProc выполнить другую процедуру
SQLStoredProc1.StoredProcName:='Другая процедура'
То на этой строчке программа вылетает.
Предположительно, это связано с тем, что SQLStoredProc1 сохраняте значения предыдущих параметров и т.к. у разных хранимых процедур они разные, выдает ошибку. Что делать?
SQLStoredProc1.Params.clear не помогает.
Desdechado (2004-04-08 21:22:00) [1]ну, с ХП я так не извращался, а вот SQLDataSet я постоянно переприсваиваю commandtext и никаких проблем не наблюдал...
YurikGl (2004-04-07 21:41:00) [2]Кстати, эта пролема есть у всех dbExpress-компонентов. Первый запрос (неважно какой) проходит нормально, но потом при попытке присвоить свойству ComandText/StoreProcName любую стороку, приложение вылетает с ошибкой.
YurikGl (2004-04-07 19:47:00) [3]re [8] Это я уже знаю. Если имя задать в нижнем регистре, то ParamByName вообще ничего "не видит"
Desdechado (2004-04-07 19:36:00) [4]наблюдал похожий глюк, но причина была в том, что имя процедуры должно быть задано в ВЕРХНЕМ регистре ВСЕГДА, вне зависимости от диалекта
YurikGl (2004-04-07 18:38:00) [5]Написал в итоге
procedure TDataModule1.SqlProcInit;
Begin
SQLStoredProc1.free;
SQLStoredProc1:=TSQLStoredProc.Create(self);
SQLStoredProc1.SQLConnection:=SqlConnection1;
End;
И вызываю каждый раз при вызове процедуры.
Но как-то проще должно быть.
wild_arg (2004-04-07 17:54:00) [6]2YurikGl
Да почему изврат-то?
Нормально все, зато у тебя в памяти не лежат ненужные постоянно компоненты. Они создаются когда надо и после этого уничтожаются.
Сам раньше так не любил, а теперь ничего :)
YurikGl (2004-04-07 17:48:00) [7]re [3] Не помогает.
Зато [1] Помогло, хотя и изврат это...
YurikGl (2004-04-07 17:40:00) [8]re [3] В смысле нужно всем параметрам говорить Params.Delete(i)?
bushmen (2004-04-07 17:34:00) [9]Конечно, я немного погорячился:
SQLStoredProc1.Params.Delete(0);
bushmen (2004-04-07 17:30:00) [10]Проще надо быть. После получения значения первой процедуры пишешь:
TSQLStoredProc1.Parameters.Delete(0);
И будет тебе счастье
wild_arg (2004-04-07 17:20:00) [11]а сделай типа:
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