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

العمليات الحسابية في أكسس

رائج
بدأه الفهد138 في 1 ديسمبر 2004 · 55 رد · 60,902 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#26

ارجو من اخوانى مساعدتى

اريد عمل استعلام يحسب متوسط التاريخ فمثلا تاريخ اول مبلغ 1/2/2007 وتاريخ ثانى مبلغ 1/5/2007 اريد ان احسب متوسطهم فى استعلام واذا تكرمتم شرح وافى او مثال مرفق وجزاكم الله خيراااا - برجاء سرعة الافادة افادكم الله

#27

السلام عليكم ورحمة الله بصراحة أنا ادين لهذا المنتدى بفضل كثير في تعلم البرمجة والآن لدي مشكلة بسيطة وهي أنني اريد عمل جمع لحقلين في استعلام وهذين الحقلين عبارة عن تجميع لعدة سجلات مثال: الحقل الأول مجموع الايرادات الحقل الثاني مجموع المصروفات وطبعاً هذه الحقلين تجميع لعدة سجلات ومن جدولين مختلفين الأول جدول الايرادات ومنه الحقل الأول(مجموع الايرادات) والجدول الثاني المصروفات ومنه الحقل الثاني(مجموع المصروفات) وما اريده هو حقل في الاستعلام يبين ناتج حسم المصروفات من الايرادات ارجوا الرد بسرعة للأهمية

#28

اخي الفاضل فقيهي

يمكن استخدام التعبير التالي في الإستعلام لطرح مجموع المصروفات من مجموع الإيرادات

Total:NZ(SUM([Masrofat])-SUM([Eradat]));0)

حيث حقل Masrofat هو حقل مجموع المصروفات

و حقل Eradat هو حقل مجموع الإيرادات

1
#29

أخـــواني الأعزاء ... بعد التحية

بخصوص العمليات الحسابية في الاكسس

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

احتساب الراتب الاساسي للموظفين والعمل الاضافي والتأمين الصحي والتأمين والمعاشات وكا، أكبر مشكلة هي احتساب ضريبة الدخل لأنها مربوطة بسعر الدولار وجميع فئات الاعفاء بالدولار والمحصلة الضريبة بالدولار ومن ثم تحويلها الى شيكل لأنه جميع الحسابات كانت تعتمد على سابقاتها ، وكانت النتيجة ظهور بعض الكسور العشرية غير مطابقة بزيادة أو نقص [0.01] لمعظم الموظفين وحاولت أن أحل المشكلة باستخدام دالة Format ولم تفلح ودالة Round وإن كانت أفضل من الدالة السابقة ولكن لم تلبي الغرض منها تماماً وجاء الحل الصحيح مائة في المائة وهو على سبيل المثال .. انظروا كيفية استخدام دالة راوند

Dim M10 As Single

Dim N10 As Single

Dim YYY As Single

Dim TF As Single

Dim TG As Single

Dim TH As Single

Dim aa As Single

Dim ab As Single

Dim AC As Single

Dim AD As Single

Dim AE As Single

Dim FGF As Integer

Dim QRY As String

QRY = "SELECT basic.No_Emp, basic.AT,BASIC.ATAKH ,basic.W, basic.wu, basic.solfa, basic.gest,basic.no_agsat, basic.Ratib, basic.Maqtoa, basic.Emp_Kind, basic.Work_NC, basic.Child, basic.trenc, basic.taminsh, basic.Have, basic.Rent, basic.UN, basic.Updats, sums_data.*, MOVES.*, basic.So FROM sums_data INNER JOIN ((DegOld INNER JOIN basic ON DegOld.Deg = basic.Deg) INNER JOIN MOVES ON basic.No_Emp = MOVES.No_Emp) ON sums_data.TTT = basic.TTT WHERE (((MOVES.mz)=0));"

Set Q2 = CurrentDb.OpenRecordset(QRY)

While Not Q2.EOF

TF = Round(Q2!C1 / 12 + 0.001, 2)

TG = Round(Q2!C2 / 12 + 0.001, 2)

TH = Round(Q2!C3 / 12 + 0.001, 2)

TI = Round(Q2!C4 / 12 + 0.001, 2)

aa = Q2!B1 / 100

ab = Q2!B2 / 100

AC = Q2!B3 / 100

AD = Q2!B4 / 100

AE = Q2!B5 / 100

'****************************************************************************

*

Q2.Edit

FGF = FGF + 1

Q2!totala = Round(Q2!jjj + Q2!Work_N + Q2!ATaKH + Q2!family + Q2!safarda + Q2!serafa + Q2!Maqtoa + Q2!alawam _

+ Q2!extra + Q2!Danger + Q2!Com + Q2!trenc + Q2!ATT + Q2!Dues + Q2!Auto + Q2!Froog + Q2!Adver + Q2!others + 0.001, 2) 'ÇÓÊÍÞÇÞÇÊ

'-------------------------------------------------------------------------------

Select Case Q2!So

Case 1

If Q2!W = True Then

M10 = Round(Q2!sing + ((Q2!Child - Q2!UN) * Q2!awlad) + (Q2!Have * Q2!moal) + (Q2!UN * Q2!univ) + Q2!Rent + 0.001, 2) 'ÇáÇÚÝÇÁ

Else

If Q2!WU = True Then

M10 = Round(Q2!sing + Q2!univ + ((Q2!Child - Q2!UN) * Q2!awlad) + (Q2!Have * Q2!moal) + (Q2!UN * Q2!univ) + Q2!Rent + 0.001, 2) 'ÇáÇÚÝÇÁ

Else

M10 = Round(Q2!sing + Q2!maried + ((Q2!Child - Q2!UN) * Q2!awlad) + (Q2!Have * Q2!moal) + (Q2!UN * Q2!univ) + Q2!Rent + 0.001, 2)

End If

End If

Case 2

M10 = Round(Q2!sing + (Q2!Have * Q2!moal) + (Q2!UN * Q2!univ) + Q2!Rent + 0.001, 2)

Case 3

M10 = Round(Q2!sing + (Q2!Have * Q2!moal) + (Q2!UN * Q2!univ) + Q2!Rent + 0.001, 2)

Case 4

M10 = Round(Q2!sing + ((Q2!Child - Q2!UN) * Q2!awlad) + (Q2!Have * Q2!moal) + (Q2!UN * Q2!univ) + Q2!Rent + 0.001, 2) 'ÇáÇÚÝÇÁ

End Select

If M10 > 12000 Then M10 = 12000

Dim NIS, DISC, SUMT

Q2!TS = Round((Q2!totala - (Q2!safarda + Q2!Absent + Q2!alawam + Q2!others + Q2!Auto + Q2!Dues)) + 0.001, 2)

Q2!TD = Round((Q2!TS - (Q2!tamins + Q2!taminm)) / Q2!Doll + 0.001, 2)

Q2!ddd = Round(M10 / 12 + 0.001, 2)

Q2!Taxxx = Round(Q2!TD - Q2!ddd + 0.001, 2)

Select Case Q2!Taxxx

Case Is <= 0: Q2!Taxxx = 0: Q2!taxx = 0: Q2!tax = 0

Case Is > 0

If Q2!Taxxx <= TF Then '833.33

YYY = Round(Q2!Taxxx * aa + 0.001, 2)

Else

YYY = Round(((Q2!Taxxx - TF) * ab) + (TF * aa) + 0.001, 2)

End If

Q2!taxx = Round(YYY + 0.001, 2)

End Select

NIS = Round((Q2!totala - (Q2!safarda + Q2!tamins + Q2!taminm + Q2!Absent + Q2!alawam + Q2!others + Q2!Auto + Q2!Dues)) + 0.001, 2)

DISC = Q2!ddd * Q2!Doll

SUMT = NIS - DISC

Select Case SUMT

Case Is > 0

If SUMT <= (TF * Q2!Doll) Then '833.33

Q2!tax = Round(SUMT * aa + 0.001, 2)

Else

Q2!tax = Round(((SUMT - (TF * Q2!Doll)) * ab) + ((TF * Q2!Doll) * aa) + 0.001, 2)

End If

End Select

'-----------------------------------------------------------------------------------------

Q2!totalb = Round(Q2!tamins + Q2!kiss + Q2!days + Q2!taminm + Q2!alawam + Q2!Absent + Q2!tax + Q2!Jawwal + Q2!gest + 0.001, 2)

Q2!Net = Round(Q2!totala - Q2!totalb + 0.001, 2)

Q2!mz = 1

Q2.Update

Q2.MoveNext

Wend

مع تحيات أخيكم / كمــــال النحــــال

تم تعديل هذه المشاركة بواسطة kamal alnahhal في 6 أغسطس 2007 في 07:36

[يمين]

إذا كـان تـرك الـدين يعــنــي تقــدمــاً

فـيا نفــس مـوتــي قبــل أن تتقـدمــي

[/يمين]

#30

السلام عليكم

الاخوة الافاضل : مشكلة الزيادة او النقصان بنسبة 0.01 هي شئ طبيعي لأن الشئ اللي يجب مراعاته وفهمه قبل كل شئ هو كما يلي:

1- الدالة Format تقوم بعرض النتائج بشكل معين كخانتين مثلا.

2- الدالة round تقريب لاقرب خانة عشرية.

وبالتالي فان عمليات التقريبة تجمع في النهاية والرقم الناتج سيكون طبيعيا رقم اجمالي مقرب !. لأنه قد مر بمرحلة التقريب على مراحل ونتج في كل حالة رقم مقرب . سيكون تلقائيا المجموع النهائي رقما مقربا... وهذا شئ منطقي...

لذا افضل حل لهذه الاشكالية : هو ان يتم التخزين الفعلي برقم طويل يعني اكثر من 3 خانات عشرية ،، وليكن 5 خانات عشرية ويكون العرض في التقرير او في الاستعلام فقط خانتان عشريتان.... فقط للعرض...اي يعرض للمشاهد بالتقريب .

وحيئذ سيكون الناتج دائما مساوي للميزانية وذلك لان القيم المخزنة قيم طويلة والتقريب فيها معدوم.. وان ظهر التقريب في العرض فان ذلك يعني ان البيانات ليس فيها تقريب !!! وارجو ان يكون كلامي مفهوما وواضحا وشكرا جزيلا.

#31
activeman كتب:
السلام عليكم

الاخوة الافاضل : مشكلة الزيادة او النقصان بنسبة 0.01 هي شئ طبيعي

أخـــي العزيـــز ... بعـــد التحيـــة

ليــس المقصـــود بنســـبة 0.01 النســـبة المئوية وإنمــا المقصـــود مثال هــذا الرقـــم 51.23 احتمـــال أن يكـــون 51.24 أو 51.22 نتيجـــة إجـــراء العمليــــات الحســـابية المعقــــدة لــكل حســـاب ، ولــو كــل حســـاب فــي البنـــك أو أي مؤســســـة زاد فلــس أو نقص فلــس ... هـــذا يعتبر كارثـــة كبــيرة فـــي البرمجــــة وكان علـــى شـــركــة ماكروسوفت أن تقفـــل مؤســســــتها مــن زمــن بعيـــد.

T = Round(salary + 0.001,2)

بهـــذه الطريـقــة تم التغلــب علـــى الفــروق البســـيـطة

أخيك / كمـــال النحــــال

تم تعديل هذه المشاركة بواسطة kamal alnahhal في 6 أغسطس 2007 في 18:52

[يمين]

إذا كـان تـرك الـدين يعــنــي تقــدمــاً

فـيا نفــس مـوتــي قبــل أن تتقـدمــي

[/يمين]

#32

السلام عليكم مرة اخرى :

سيدي العزيز / كمال

بعد التحية والسلام..

أولا أنا لم أقصد اي نسب مئوية إطلاقا...!!!

انا أوضحت ان حدوث فروقات طفيفة مثل 0.001 عن الرقم الرئيسي بأنه شئ طبيعي هل تعلم لماذا؟ لأنه يا اخي الموضوع لا علاقة له بالبرمجة ولا لمايكروسفت :) ....!!!! لا من قريب ولا من بعيد !!!!!

ارجو التركيز:

عندما نقوم بعملية معقدة كالتالي:

x=1.2499

y=12.3345

z=(x+y)*2(x-0.23*y)

على سبيل المثال

ومن ثم نقرب النتيجة النهائية يكون حلنا منطقي وقريب من الواقع

ولكن اذا كنت تعمل تقريب كل عملية وتجمع النواتج ومن ثم تقوم بالتقريب كل عملية

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

ولكن دائما يجب ان يقرب الناتج الاجمالي النهائي

والذي هو المطلوب مثلا في الرواتب نقرب قيمة (في البنك) .، بحيث تظهر فيها النتائج النهائية والمقربة.. لها فقط

لكن عملياتها الاولى ومعادلة الحصول عليها لا تستخدم اي تقريب فيها اطلاقا..هذا هو الحل 100% ،، اما اضافة 0.001 ومن ثم تقريبه فأنا أشك بنجاعته في الحلول لانه مجرد اختبار منك وتجربة شخصية لا يمكن تعميمها ،، ولأن الرياضيات تستخدم لاعتماد المسلمات نظام الاثبات او البرهان: فهنا وحتى لا يقع المستخدم أو المبرمج بأخطاء رياضية خانقة أو حسابية مضللة له فمن حقه أن يسأل كيف تثبت لي أن المعادلة

اقتباس
T = Round(salary + 0.001,2)

بأنها قد تحل مشاكله ،، والا فستكون تجربة بدون إثبات ،،، فعلم الرياضيات يتسم بالبحتيات أي اللااحتمالات : تطبيقي بحتي.

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

أمل ان اكون اضفت جانب علمي بحث رياضي وواضح...شكرا للجميع على القراءة.

#33

أختي الغالية زهرة

الحمد لله فهمت عمل جميع الدوال ما عدا دالتي Last و First

فلم أفهم جيداً ما المقصود بهم

وفيما يستخدمون

فهل مزيد من الايضاح

شكراً لكي

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#34

يا استاذ محمد

First تعطينا أول قيمة في الوسيطتين الممررتين لها الأولى الحقل والثانية الجدول مثال

VarSalary=DFirst("[Salary]","SalaryTbl")

السطر السابق سيعطينا أول راتب في جدول الرواتب

VarSalary=DFirst("[Salary]","SalaryTbl","[EmployedID=10")

السطر السابق سيعطينا أول راتب للموظف الذي رقمه =10

VarSalary=DFirst("[Salary]","SalaryTbl","[EmployedID=10 And [ٍSalaryYear]=#2007#")

السطر السابق سيعطينا أول راتب للموظف رقم 10 خلال عام 2007

كما يمكنك أضافة ما تريد من الشروط

Last

هي نفس دالة DFirst في الصيغة مع إختلاف أنها تعطينا أخر قيمة بدلا من أول قيمة

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 3 أكتوبر 2007 في 00:14

#35

بارك الله فيك اخي ابو ساره

وكل عام وانت الى الله اقرب وعلى طاعته أدوم

وتقبل الله منا ومنك صالح الأعمال

تعديله صغنونه على شرحك

ياريت انك تضيف قبل الدالة First حرف D لتصبح DFirst لأنك تتكلم عن مجاميع والمجاميع تحتاج الى اسم الحقل واسم الجدول اما First لوحدها تأخذ فقط تعبير الحقل فقط او مربع النص بدون اضافة الجدول لها وما ينطبق على الدالة First او DFirst ينطبق ايضا على الدالة Last او DLast

بالتوفيق للجميع

#36
اقتباس
تعديله صغنونه على شرحك

لا بل كارثه فأن الكود لا يعمل بدون اضافة حرف D قبل الدالة

أعتذر من الجميع على الخطأ وقد تم التعديل في المشاركة السابقة

مع الشكر للأخت زهره على التنبيه

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 3 أكتوبر 2007 في 00:13

#37

أخي الغالي مصلح

أختي الغالية زهــــــــــرة

يظهر ان الكنافة وقطايف رمضان بدأ تأثيرهم يظهر علي عقل الواحد ( والله لم أفهم شيء ) آسف أنا عارف انه غباء مني لكن الموضوع ازداد صعوبة أكثر

أنا أقصد الدالة First والدالة Last الموجودين في الاستعلامات

طيب لو كانت هي ممكن ارفاق مثال للايضاح أكثر

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#38

أخي الفاضل محمد

اعلم ان مخك نظيف جدا ولا تفوت عليك مثل هذا الأمور الصغيره ولكن جل من لا يسهو

حسنا انظر للشرح المصور والمثال

post-15367-1191444491_thumb.gif

post-15367-1191444636_thumb.gif

post-15367-1191444654_thumb.gif

First_Last.rar

#39

بارك الله فيكي يا أختنا الغالية زهرة

أنا مش عارف انا كنت نايم ساعتها ولا اية ههه :lol:

رمضان كريم

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#40

الاخوة الافاضل بارك الله فيكم وجعل هذا العمل فى ميزان حسناتكم لى استفسار بخصوص العمليات الحسابية لو تكرمتم اقوم بغمل برنامج كنترول لمدرستى ةلكن صادفتنى بعض المشاكل فى تجمبع الدرجات والسؤوال هو كيف ارصد غ اى التتلمبذ الغائب وثانيا كيف اجمع غ + رقم = رقم أو رقم + غ = غ أو غ+غ = غ ولكم كل التقدير والاحترام اعضاء النتدى العظيم الذى نلجأ اليه فى وقت الشدة

وشكرا لكم

#41

يمكنك بسهولة خلال الدالة COUNT

COUNT ([FIELDNAME]) P

جيث FIELDNAME هو أسم الحقل المراد عده

بالنسبة لجمع رقم مع غ يمكنك فعله كما يلى :

لديط طالب مثلا لديه 5 أيام غياب

أعمل LABEL داخل الفورم و زر COMMAND

داخل ال COMMAND أكتب

ME.LABEL1.CAPTION = "الطالب محمد لديه "& 5& "أيم غياب "

ملك الطغـــــــــــــاة عرينها إذ غـــــــــــــاب حيدرها الأشم

#42

لأهتمامك أوضح لك أخى الكريم مثلا لدى جدول درجات التلاميذ فى امتحان آخر العام نفترض ان تلميذ غاب فى امتحان الترم الاول من المفترض ان ترص له ( غ ) وحصر فى الترم الثانى وأخذ درجة مثلا ( 8 ) المفترض ان يجمع الترم الاول + الترم الثانى والمفترض ان يكون المجموع = 8 والعكس اذا غاب فى الترم الثانى المفترص ان يكون ناتج الجمع = غ أما ثالثا اذا غاب فى الترم الاول والترم الثانى يجب ان يكون الناتج = غ فكيف يتم تنفيذ ذلك ارجو ان يكون السؤال واضح الان وشكرا للإخوة الافاضل

#43
نور55 كتب:
لأهتمامك أوضح لك أخى الكريم مثلا لدى جدول درجات التلاميذ فى امتحان آخر العام نفترض ان تلميذ غاب فى امتحان الترم الاول من المفترض ان ترص له ( غ ) وحصر فى الترم الثانى وأخذ درجة مثلا ( 8 ) المفترض ان يجمع الترم الاول + الترم الثانى والمفترض ان يكون المجموع = 8 والعكس اذا غاب فى الترم الثانى المفترص ان يكون ناتج الجمع = غ أما ثالثا اذا غاب فى الترم الاول والترم الثانى يجب ان يكون الناتج = غ فكيف يتم تنفيذ ذلك ارجو ان يكون السؤال واضح الان وشكرا للإخوة الافاضل

الأخت الفاضلة ..نور55.. السلام عليكم

أرجو أن تعملي موضوع مستقل جديد خاص بهذا السؤال

وإن شاء الله تجدين الاجابة

#44
اقتباس
لأهتمامك أوضح لك أخى الكريم مثلا لدى جدول درجات التلاميذ فى امتحان آخر العام نفترض ان تلميذ غاب فى امتحان الترم الاول من المفترض ان ترص له ( غ ) وحصر فى الترم الثانى وأخذ درجة مثلا ( 8 ) المفترض ان يجمع الترم الاول + الترم الثانى والمفترض ان يكون المجموع = 8 والعكس اذا غاب فى الترم الثانى المفترص ان يكون ناتج الجمع = غ أما ثالثا اذا غاب فى الترم الاول والترم الثانى يجب ان يكون الناتج = غ فكيف يتم تنفيذ ذلك ارجو ان يكون السؤال واضح الان وشكرا للإخوة الافاضل

نور

والله مافهمت حاجة .....

مش عارف السؤال مش مقهوم ولا انا اللى مش فاهم :wacko:

على العموم يمكنك وضع الموضوع كموضوع جديد كما أقترح الأخ أكسير و كذلك إرفاق البرنامج وسوف اقوم بتعديله بإذن الله

ملك الطغـــــــــــــاة عرينها إذ غـــــــــــــاب حيدرها الأشم

#45

شكرا على سعة صدر الاخوة الافاضل نتناول السؤال على قسمين أولا مثال امتحان أخر العام - كيف نرصد غ ( لتلميذ غاب فى الترم الاول ثم حصر فى الترم الثانى وأخد درجة مثلا 25 كيف يتم جمع الترمين اعتقد ان الشق هذا من السؤال واضح وشكرا

#46

نور أليست غ = صفر

اى انه لم يحضر فى هذه المادة و بالتالى درجته = صفر

ملك الطغـــــــــــــاة عرينها إذ غـــــــــــــاب حيدرها الأشم

#47

نعم غ = صفر

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

انا اريد كيفية لتنفيذ من خلال الجدول والاستعلامات وشكرا على ردكم الخوة الافاضل

#48

هذا الكود سيحل المشكلة :

فى التقرير أفتحى ال EXPRESSION BUILDER

= [أسم الحقل الذى به الرقم ] & [أسم الحقل الذى به غ ]

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

ملك الطغـــــــــــــاة عرينها إذ غـــــــــــــاب حيدرها الأشم

#49

الاخ الفاضل أنا اريد رصد ( غ ) فى الجدول ثم تجميعها مع الدرجة التى حضر فيها بواسطة استعلام لينم لعد ذلك عمل الاحصائيات حضور وغياب الخ وشكرا

#50

اخواني ارجو منكم المساعدة مثلاً اريد قسمة خمسة على مربع المجموع كيف اعمل

الرجاء الرجاء افيدوني

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

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

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

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

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