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

زيادة قيمة حقل بالاعتماد على تغير فى حقل اخر

مغلق
بدأه hacker_eg في 28 ديسمبر 2005 · 7 رد · 980 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

عندى جدول للحسابات يحتوى على حقل لأسم الحساب وحقل لقيمة المدين وحقل لقيمة الدائن

وايضا جدول لقيود اليوميه يحتوى على نفس الحقول بالاضافة الى رقم القيد

اريد عند ادخال قيد جديد يتم زيادة قيمة المدين او الدائن حسب قيمة القيد

فمثلا حساب الصندوق مدين=1000 دائن=200

وقيد اليومية يظهر فيه الصندوق مدين ب 500 اريد عند اضافة هذا القيد يصبح قيمة المدين للصندوق= 1500

وايضا تغيير القيمة فى حالة تعديل القيد او حذفه

ارجو مساعدتى فى عمل trigger للعمليه هذه او اى حل اخر

محتويات الجداول

جدول account

-acc_name

-debit

-credit

جدول القيود jour

-id

-acc_name

-debit

-credit

-dec

#2

ياجماعه ياريت يكون فى تجاوب اكتر من كده , على العموم

انا لقيت الحل وسوف اضعه لكى يستفيد الاخوه

TRIGGER [updateaccount] ON [dbo].[jour] 
FOR INSERT 
AS declare @debitAmount numeric


declare @olddebit numeric

select @debitamount= Inserted.debit from Inserted select @olddebit= account.debit from account where account.name=(select acc_name from Inserted) update account 
set account.debit=@debitamount+@olddebit
where account.name=(select acc_name from Inserted)
#3

استفسار أليس من المفترض ان يتم اختيار ال acc_name على حسب ال ID

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#4

نعم ولكن المفتاح الرئيسى للجدول هو acc_name

عندى إستفسار ارجو الاجابة عليه

قمت بتجربه ال TRIGGER وهو يعمل بشكل صحيح ولكن عند تحديث الحقول عن طريق datagrid اى اضافة اكثر من حقل دفعه واحده فأنه يتم تنفيذه على اول مدخل فقط

#5

السلام عليكم

اعمل حلقة تكرار لى تنفيذ Command الخاص بك

مثال بلدت نت

          For Counter As Integer = 0 To rowcount - 1
            _SERVICE_id = dg.GetValue(2)
            _Discount = CType(dg.GetValue(3), Decimal)
            cls.Add_Company_SERVICE_Line()
            dg.MoveNext()
        Next Counter

كل مرة يتم فيها التحديث سوف يتم استدعاء TRIGGER الخاص بك والله اعلم

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#6

شكرا للأخ waleeddhm على اهتمامك ولكننى استخدم ال datagrid لأدخال البيانات واستخدم الامر التالى

    Try
            [Dim com2 As New SqlCommandBuilder(da1            da1.SelectCommand = com2.GetInsertCommand
            da1.Update(ds, "jour")
            DataGrid1.Refresh()
        Catch ex As Exception
            MsgBox(ex.Message)
  End try

حيث ان ال ds هى الداتاسيت المرطبته بال داتاجريد

وعند تنقيذ ال عملية ادخال يتم تنفيذ ال trigger على اول صف مدخل فى الداتا جريد

رجاء المساعدة لأهميه الموضوع بالنسبه لى

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 31 ديسمبر 2005 في 16:06

#7

السلام عليكم

Loop

يا اخى الكريم انا اقصد انك تعمل Loop على DataGrid اكيد مش هتعمل على TextBox

شوف الكود مرة اخرى

اقتباس
      For Counter As Integer = 0 To rowcount - 1

          _SERVICE_id = dg.GetValue(2)

          _Discount = CType(dg.GetValue(3), Decimal)

          cls.Add_Company_SERVICE_Line()

          dg.MoveNext()

      Next Counter   

خد بالك بقا من السطر التالى بداخل Loop

اقتباس
  cls.Add_Company_SERVICE_Line() 

دة المسؤل عندى عن جملة الحفظ سوف يتم تنفيذ الامر السابق الى نهاية عدد الصفوف

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#8

فاهم قصدك ايه لكن انا كان نفسى اعمل اضافه بالكود االلى كتبه فوق وهو يعمل وبدون استخدام looping

على العموم شكرا اخى الكريم على تجاوك وسعة صدرك واعتقد ان الحل يكون داخل ال sql

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

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