الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في Procedure

مغلق
بدأه omar_sabha في 5 سبتمبر 2007 · 5 رد · 616 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ارجو مساعدتي في ال procedure التالي

ALTER PROCEDURE dbo.ACC_SECTION_Update
@oldfinancialcode_code int,
@newfinancialcode_code int,
@oldfinancialcode_NO int,
@newfinancialcode_NO int,
@financialcode_description nvarchar(250),
@ErrFlg int output
AS
if not exists (SELECT count(*) FROM ACC_SECTION WHERE financialcode_code=@oldfinancialcode_code 
and financialcode_NO=@oldfinancialcode_NO and financialcode_description=@financialcode_description)
begin
Update ACC_SECTION set 
financialcode_code=@newfinancialcode_code,
financialcode_NO=@newfinancialcode_NO,
financialcode_description=@financialcode_description
where financialcode_NO=@oldfinancialcode_NO and financialcode_code=@oldfinancialcode_code 
set @ErrFlg = 0
end
else
begin
set @ErrFlg = 1
end

ساقوم بشرح ما اريد

كما هو مبين في الصوره المرفقة

عندي datagrid وفوقها 3 textbox

فعند اختيار اي record من ال DG تنتقل هذه القيم الى ال textbox اعلاه

مشكلتي هي فقط عندما اريد ان اعمل تعديل

حيث ان الرقم والرمز هما primary key اي لا يجوز ان يتكررا

و البيان لا يجب ان يتكرر ايضا مع انه ليس primary

الغرض من ال procedure

هو عند اختيار اي record ومن ثم بالضغط على زر تعديل هناك حالتين

الاولى : انه لم يقم بتعديل اي من القيم داخل ال textbox الثلاثة اي بقيت القيم الاصلية كما هي وهنا عند الضغط على زر تعديل يتم التعديل عليها بابقائها كما هي .

الحالة الثانية :

اذا قام المستخدم بالتعديل مثلا على الرقم او الرمز فيجب التاكد من ان هذه القيم لجديده المدخلة غير موجوده في ال DB و من ثم التاكد من ان البيان غير موجود ايضا فاذا تحققت الشروط يقوم بالتعديل اما اذا تكرر الرقم والرمز او البيان فلن يتم التعديل

انا قمت بعمل ال procedure الموضع اعلاه ولكن لم يتم ما اريد فهل من مساعده

حيث ان الرقم هو financialcode_NO

الرمز هو financialcode_code

البيان هو financialcode_description

ولكم جزيل الشكر

post-40315-1189009992_thumb.jpg

#2

بالنسبة للشرط الموجود بهذه الطريقة دائما لا يتحقق

if not exists (SELECT count(*) FROM ACC_SECTION WHERE .....

لان count(*) دائما تعيد قيمة ومن ضمنها صفر اي توجد قيمة

ولمعالجة الامر استخدم مايلي

declare @rCount as int
SELECT  @rCount =count(*) FROM AC.....

if  @rCount=0
.......
#3
if not exists (SELECT financialcode_code FROM ACC_SECTION WHERE financialcode_code=@oldfinancialcode_code 
and financialcode_NO=@oldfinancialcode_NO and financialcode_description=@financialcode_description)

هل هذا ينفع

#4

الكود الذي ذكرته ينفع اذا استبدلت اسم الحقل بنجمة * اي select * لكن سارفق لك الكود بطريقة اخرى وارجو ان يكون كما تريد

set @ErrFlg = 0
--افحص اذا وجد اختلاف  في  الحقول  الاساسية  واذا لم  يوجد فعدل  بقية الحقول ولا تعدل الرمز والرقم
if (@oldfinancialcode_code != @newfinancialcode_code or @oldfinancialcode_NO !=@newfinancialcode_NO )
begin if not exists (SELECT * FROM ACC_SECTION WHERE financialcode_code=@oldfinancialcode_code and financialcode_NO=@oldfinancialcode_NO  )

		Update ACC_SECTION set 
		financialcode_code=@newfinancialcode_code,
		financialcode_NO=@newfinancialcode_NO,
		financialcode_description=@financialcode_description
		where financialcode_NO=@oldfinancialcode_NO and financialcode_code=@oldfinancialcode_code 
		else

		set @ErrFlg = 1
		end
 else
--عدل فقط البيان واذا  وجد  حقول اخرى مثله  فقط  ولا تعدل الرمز والرقم 
 Update ACC_SECTION set 
	financialcode_description= @financialcode_description
		where financialcode_NO=@oldfinancialcode_NO and financialcode_code=@oldfinancialcode_code
#5

شكرا لك اخي العزيز

لكن في مثالك يجب ان تاخذ بعين الاعتبار ان البيان لا يجوز ان يتكرر ابدا

#6

لا انا وضعته على ان البيان اي نص ويتكرر لانه ليس مفتاح للجدول .

على كل حال انت ادرى بما تريد ويمكنك تطويع الكود كما تريد

هذا الموضوع مغلق.

مواضيع مشابهة