PDA

View Full Version : چطوری این sp رو بنویسم؟



j.farazani
دوشنبه 19 شهریور 1386, 21:47 عصر
با سلام خدمت دوستان
یه سوال؟
زبان برنامه نویسی من vb6 هست .
حالا میخوام یه sp بنویسم که چند شرط رو کنترل کنه و در صورت تحقق نیافتن یکی از آن شروط یک خطا رو نشان بده و دستورات بدنه sp دیگه اجرا نشن . اما اگر همه شروط درست بودن دستورات بدنه sp رو اجراء کنه ویک پیام هم ارسال کنه.

*****دوستان من میخوام خطاها و پیامها رو در vb نشون بدم*****
یک دنیا لطف می کنید

whitehat
دوشنبه 19 شهریور 1386, 21:56 عصر
مشکل الان چیه؟
شما می توانید با IF های متوالی شرطهای خود را چک کنید و در صورت بروز خطا کد آنرا به سمت برنامه پاس دهید و برنامه با کد در یافت کرده پیغام مناسب را چاپ کند.

j.farazani
سه شنبه 20 شهریور 1386, 12:06 عصر
با سلام
whitehat عزیز از توجه شما ممنونم

حقیقتا این کار رو تا به حال به این شکل انجام ندادم .:خجالت::خجالت:
میشه لطف کنید و یک مثال در این زمینه روی همین تاپیک برای من بزارید .

لطف میکنید

j.farazani
پنج شنبه 22 شهریور 1386, 00:00 صبح
کسی اونجا نیست جواب مبتدیها رو بده
حتی یک مثال !!!!

mhadvi_mahmaood
پنج شنبه 22 شهریور 1386, 05:17 صبح
create procedure procname
as
if 1=1 and 2=2
begin
select 'sp run compeletly'
end
else
begin
select 'error'
end

j.farazani
پنج شنبه 22 شهریور 1386, 13:40 عصر
mhadvi_mahmaood عزیز از توجه شما ممنونم
کد SP من به این صورته :

CREATE PROCEDURE [acc].[St_AccVchType]
@State int ,@year char(2) ,@HdrId bigint
AS
BEGIN TRANSACTION a
if (select @state)=1 AND (select sum(debit)-sum(credit) from acc.acctlvchitem where hdrref=@hdrid)<>0
commit tran a
--print @@Trancount
IF @@TRANCOUNT > 0
BEGIN
update acc.acctlvchhdr set state=@State where [year]=@year and Hdrid=@HdrId
raiserror('succeed',16,1)
ROLLBACK TRAN a
END
GO

1-شرط اجرا میشه
2-می خوام در شرایطی که @STATE برابر با 1 شد و شرط بعدی هم تحقق پیدا کرد SP من ROLLBACK بشه و یک پیام خطا هم در VB نشون بده در غیر این صورت SP اجرا بشه ویک پیام موفقیت در VB نشون داده بشه . واگر @STATE برابر با 2 شد شرایطی دیگه رو کنترل کنه و...
دوستان خیلی گیر کردم لطفا در این زمینه کمک کنید

supporter
پنج شنبه 22 شهریور 1386, 21:20 عصر
نمی دونم کد زیر به دردتون می خوره یا نه؟



CREATE PROCEDURE SPTest @n INT
AS
BEGIN TRAN
IF @n < 0
Begin
-- Stmts
RAISERROR('@n IS: %d', 16,1,@n)
ROLLBACK TRAN
-- RETURN 1
End
ELSE
BEGIN
-- Stmts
RAISERROR('succeed', 16,1)
SELECT @@TRANCOUNT
COMMIT TRAN
-- RETURN 0
END


در ضمن می تونید به جای RAISERROR در SP، کد خطاتون رو Return کنید و در Applicationتون با توجه این مقدار بازگشتی Message مورد نظرتون رو نشون بدید.

j.farazani
جمعه 23 شهریور 1386, 23:54 عصر
با سلام خدمت دوست عزیزم supporter
آقا شما همیشه ما رو شرمنده میکینید . انشاالله بتونم جبران کنم


نمی دونم کد زیر به دردتون می خوره یا نه؟



CREATE PROCEDURE SPTest @n INT
AS
BEGIN TRAN
IF @n < 0
Begin
-- Stmts
RAISERROR('@n IS: %d', 16,1,@n)
ROLLBACK TRAN
-- RETURN 1
End
ELSE
BEGIN
-- Stmts
RAISERROR('succeed', 16,1)
SELECT @@TRANCOUNT
COMMIT TRAN
-- RETURN 0
END



در ضمن می تونید به جای RAISERROR در SP، کد خطاتون رو Return کنید و در Applicationتون با توجه این مقدار بازگشتی Message مورد نظرتون رو نشون بدید.


اما من از raiserror در پست قبلی استفاده کردم اما وقتی توی vb این SP رو توی یه COMMAND میریزم و EXECUTE میکنم از پیامها خبری نیست . به نظر شما اشکال از کجاست ؟

میشه بیشتر راهنمایی کنید