Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-28222
alexsandri
2002-11-16 02:56
2002.12.09
Мужики а знаите ли вы страшные слова на


3-27811
REP
2002-11-21 07:12
2002.12.09
Вопросы по TQRPreview


14-28248
LongIsland
2002-11-18 11:31
2002.12.09
Free Pascal


8-28147
FATman
2002-08-25 23:06
2002.12.09
Скины для программы


1-28091
F1
2002-11-28 11:09
2002.12.09
Swap to Fiend!!! Ау!!! Fiend? Отзовись, если что я в чате...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский