powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StoredProc
10 сообщений из 10, страница 1 из 1
StoredProc
    #32068789
Maverick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть такая хранимая процедура:

" CREATE PROCEDURE dbo.PROCRoubli
@PrPROCRoub varchar(20),
@UserName varchar(50), @IdRegisterRoub int, @IdBag int, @Summa float, @IdSymbol int, @DateBag datetime, @PrDaysOff bit,
@Route varchar(50), @FIORunner1 varchar(50), @FIORunner2 varchar(50), @DateReg datetime,
@UserNameRecount varchar(50),@UserGlavKassir varchar(50), @UserNameControl varchar(50),
@SummaRecount float, @Deficit float, @Surplus float, @IdBagRoub int, @DateRecount datetime,
@UserNameChange varchar(50), @ERR int output
AS
BEGIN tran BagRoubli
// первое условие
if @PrPROCRoub='new' begin
insert into RegisterRoub(id_registerroub, DateReg, UserName, Route, FIORunner1, FIORunner2)
values (@idregisterroub, @DateReg, @UserName, @Route, @FIORunner1, @FIORunner2)

end

//второе условие
if @PrPROCRoub='delete' begin
Delete from BagWithRoub where id_bagrub=@IdBagRoub
end

if(@@error!=0) begin
rollback tran BagRoubli
select @ERR=1
end
else begin
select @ERR=0
commit tran BagRoubli
end
GO
"

Проблема в том, что второе условие почему-то отрабатывает, только тогда, когда отработало первое условие!!

Т.е., по нажатию одной кнопки в приложении, идет вставка данных,
по нажатию другой можно удалить эти данные. Если, данные вставил
и закрыл приложение, то после нового запуска эти данные не нельзя удалить, пишет EDBEngineEror "Invalid parametr".
А если, все делаю сразу, то все нормально!

Вот так удалюю:

"
with DataModuleKassa.StoredProcRoubli do
begin
Close;
ParamByName('@PrPROCRoub').AsString:='delete';
ParamByName('@IdBagRoub').AsInteger:=IdBagRoub;
ParamByName('@ERR').AsInteger:=1;
Prepare;
ExecProc;

if(ParamByName('@ERR').AsInteger=1) then
begin
MessageDlg('Сумка не была удалена! Попытайтесь еще раз!',mtError, [mbOk], 0);
Close;
end
else begin
MessageDlg('Сумка была удалена!',mtInformation, [mbOk], 0);
Close;
"
Может все дело в транзакции? Подскажите?
...
Рейтинг: 0 / 0
StoredProc
    #32068867
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-моему всё просто - если у тебя не отрабатывает первое условие, то на самом деле у тебя второе отрабатывает, но потом идёт откат т.к. @@error!=0.
...
Рейтинг: 0 / 0
StoredProc
    #32068872
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще не ясно, зачем пихать в одну процедуру и вставку и удаление. Разнеси в разные и не мучайся.
...
Рейтинг: 0 / 0
StoredProc
    #32068923
Maverick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>hDrummer

Они у меня не вместе отрабатывают....
Все зависит от условия.

Разнести по разным, дело не хитрое... только вот интересно узнать откуда эти "ноги растут"
...
Рейтинг: 0 / 0
StoredProc
    #32068931
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да там и транзакция то не нужна.

А судя по ошибке и процедуре - у тебя при удалении не задаются все остальные параметры. Вот и ругается.
...
Рейтинг: 0 / 0
StoredProc
    #32069001
Maverick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>tygra

А что надо всегда ВСЕ параметры указывать?
Даже если при удалении, я использую два параметра?
...
Рейтинг: 0 / 0
StoredProc
    #32069021
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я знаю - да.
...
Рейтинг: 0 / 0
StoredProc
    #32069022
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
единственно можно default'ы поставить, тогда можно не все указывать. Из BOL'a:

CREATE PROCEDURE get_sales_for_title
@title varchar(80) = NULL, -- NULL default value
@ytd_sales int OUTPUT
AS
...
Рейтинг: 0 / 0
StoredProc
    #32069023
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вот для этого и нужны (по уму то) две разных процедуры.
...
Рейтинг: 0 / 0
StoredProc
    #32069027
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вот дальше:

The following example shows the my_proc procedure with default values for each of the three parameters @first, @second, and @third, and the values displayed when the stored procedure is executed with other parameter values:

CREATE PROCEDURE my_proc
@first int = NULL, -- NULL default value
@second int = 2, -- Default value of 2
@third int = 3 -- Default value of 3
AS

-- Display values.
SELECT @first, @second, @third
GO

EXECUTE my_proc -- No parameters supplied
GO

Displays:

NULL 2 3

EXECUTE my_proc 10, 20, 30 -- All parameters supplied
GO

Displays:

10 20 30

EXECUTE my_proc @second = 500 -- Only second parameter supplied by name
GO

Displays:

NULL 500 3

EXECUTE my_proc 40, @third = 50 -- Only first and third parameters
GO -- are supplied.

Displays:

40 2 50


А вообще смотри stored procedures--> parameters
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StoredProc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]