Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
ВнизStoredProc Найти похожие ветки
← →
Explorer (2002-11-15 11:25) [0]Мастера!
У меня есть такая хранимая процедура:
" 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;
"
Может все дело в транзакции? Подскажите?
← →
Explorer (2002-11-15 14:14) [1]Хоть какую-ниб идейку дайте..
← →
Explorer (2002-11-15 15:29) [2]:((( никто... никак..
← →
Explorer (2002-11-15 16:39) [3]понятненько....
← →
Андрей Прокофьев (2002-11-15 18:47) [4]А в какой момент (на каком операторе) выдается сообщение
EDBEngineEror "Invalid parametr".
← →
Hun (2002-11-17 00:42) [5]1- А это ничего, что в процедуре много параметров, а в Дельфях только 3?
2- записываешь данные ты в одну таблицу, а удаляешь из другой, это правильно. Там триггера что-ли? Если нет, то транзакций в процедуре не нужно.
3- в MSSQL транзакции можно не именовать, откатит он все равно все (и закоммитит вроде бы тоже), надо Savepoint применять, если транзакции вложенные.
4- если есть триггера, то там с транзакциями надо аккуратно.
5- а не написать ли лучше все это через обычный TQuery и сделать все как хелп по MSSQL советует? Просто тупо присвоить все что надо и написать как советуют. Заработает. Займет это все минут 10.
6 - кстати, а откуда берется @IdBagRoub именно этой строки, если при вставке возвращается только 1 или 0? Ну это так...
← →
Explorer (2002-11-18 07:50) [6]>Андрей Прокофьев ©
Выдается, когда идет проверка возвращаемого значения @ERR
>Hun
Все дело в том, что кроме удаления в этой самой процедуре есть и другие операторы и другие действия (просто я сократил текст), которые тоже отработывают только в том случае, когда отработало первое условие!!если было выполнено.
Триггеров у меня нет.
Я вот не понял 6-ой пункт, что я ни так делаю?
← →
hun (2002-11-18 15:30) [7]Если там много еще чего-то есть, кроме описанного, то на п.6 можно не обращать внимания. А не зная точно чего и где есть очень трудно найти ошибку. По ощущениям ошибка какая-то элементарная. Например при сохранении и удалении
инициализируется разное число полей. Тяжело так, не видя текста. Отладчиком надо смотреть,
профайлером.
← →
Cherruty (2002-11-21 12:34) [8]Попробуй после ставить else поcле end, например
if @PrPROCRoub="нечто"
begin
/* нечто*/
end
else begin
if @PrPROCRoub="кое-что"
begin
/* кое-что*/
end
end
Должно помочь, была подобная ситуация
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c