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

طرح الدائن من المدين وتخزين الرصيد في حقله

مغلق
بدأه motwkil في 14 مايو 2006 · 6 رد · 1,501 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل من الممكن عمل عمليات حسابية في جدول قاعدة بيانات من نوع SQL SERVER2000 على حقول معينة

مثلا لدي جدول بأسم الحسابات من بين الحقول التي تحتويها حقل بالجانب المدين وحقل بالجانب الدائن وحقل الرصيد

انا اريد ان تتم عملية حسابية على الحقول المذكورة وهي عملية الطرح بحيث يتم طرح المدين من الدائن ووضع القيمة الناتجة في حقل الرصيد

هل ممكن ان تتم ارجو الافادة

#2

السلام عليكم..

لم افهم سؤالك بالضبط

ولكن ان كنت تريد ان تتم العمليه وقت ادخالك البيانات فيمكنك عملها بشكل عادي

Insert Into TableName ( col1 ,col2 , col3) Valus (Val1 , val2 , val1-val2)

اما اذا كانت اصلا البيانات موجودة وتبغ تعدل عليها يمكنك عمل نفس الشي بس بالدالة Update

#3

تستطيع أثناء إدخال البيانات عمل هذا الأمر بعد كتابة تابع يقوم بهذا الأمر و يسند القيمة لـ الحقل المطلوب

سلام

#4
Desigen كتب:
تستطيع أثناء إدخال البيانات عمل هذا الأمر بعد كتابة تابع يقوم بهذا الأمر و يسند القيمة لـ الحقل المطلوب

سلام

يمكنك إنشاء stored procedure تمرر لها جانب الدائن والمدين، وتحسب الرصيد، ومن ثم تخزن القيم في الجدول المخصص لها.

الطريقة يمكن أيضا تطبيقها بafter insert trigger يحسب ناتج الرصيد بعد الطرح ويعدل قيمة الرصيد في السجل المدخل.

أترك توضيح كلامي للأخوة الأعضاء لإثراء النقاش

:)

فكر بطريقة أخرى

#5
Use TempDB
Go

Create Function Fun_Adding
(
	@Par1 Int , 
	@Par2 Int 
)
Returns Int
Begin
	Return ( @Par1 + @Par2 ) 
End
Go

Create Table Table1
(
	Col1 Int ,
	Col2 Int ,
	Col3 As 
	(
		dbo.Fun_Adding ( Col1 , Col2 ) 
	)
)
Go

Insert Into Table1 Values ( 1 , 2 ) 
Insert Into Table1 Values ( 1 , 4 ) 

Select * From Table1

Use TempDB
Go

Create Table Table1
(
	Col1 Int ,
	Col2 Int ,
	Col3 Int
)
Go

Create Trigger Tri_Table1_Adding
On Table1
After Insert AS
	Insert Into Table1 ( Col1 , Col2 , Col3 ) 
	Select 
		Col1 , Col2 , Col1 + Col2 
	From
		Inserted
Go

Insert Into Table1 ( Col1 , Col2 ) Values ( 1 , 2 ) 
Insert Into Table1 ( Col1 , Col2 ) Values ( 1 , 4 ) 

Select * From Table1

لكن أنا أنصحك بعدم وضع حقل إضافي إذا كان محسوب

لأنه في هذه الحالة لا يصبح الجدول من الشكل 3nf

سلام

تم تعديل هذه المشاركة بواسطة Desigen في 16 مايو 2006 في 12:11

#6

إذا كان في حالة إنك عايز تعمل خانة يطرح منها المدين من الدائن بس يبقى اعمل computed column وذلك عن طريق إنك تكتب الصيغة في الFormula

أما إذا كنت عايز تعمل رصيد تراكمي فلن يدعم السيرفر ذلك ولكن يجب عمل الكلام ده في التقرير

#7

اخي العزيز

يمكنك عمل Triger

CREATE TRIGGER TrigerName
ON TableName
AFTER INSERT, UPDATE, DELETE 
AS

GO

TableName هو جدول القيود

داخل هذا التريجر تقوم

بعمل جملة UPDATE تقوم بإضافة المبلغ المدين للحساب الي الرصيد في جدول الحسابات

و طرح المبلغ الدائن للحساب من الرصيد في جدول الحسابات

تتميز هذه الطريقة بانها سريعة بالمقارنة بتجميع الجانب المدين بالكامل و الدائن بالكامل ثم تخزين الفرق في الرصيد

اما إذا كنت تريد عمل ترصيد للحسابات كل فترة فيمكنك عمل stored procedure كما اوضح الاخ walmhomer

ارجو ا ان اكون قد اوضحت الفكرة

:)

إن كان صواب فمن الله وإن كان خطا فمن نفسي و الشيطان

تم تعديل هذه المشاركة بواسطة adel_elgo في 16 مايو 2006 في 20:36

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…