delphi4arab منتديات دلفي للعرب
حل مشكل العمليات المتعددة على قواعد البيانات - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : حل مشكل العمليات المتعددة على قواعد البيانات (/showthread.php?tid=4033)

الصفحات: 1 2


حل مشكل العمليات المتعددة على قواعد البيانات - CMT-10 - 26-03-2012

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

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

والمشكلة التي من الممكن ان تحدث قد يتم اضافة البيانات الاساسية مثل رقم الفاتورة وتاريخها ويحدث خطاء ما باضافة البضاعة في الجدول الثاني ويستمر البرنامج ويخصم البضاعة من المخزن في جدول ثالث.

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

والسؤال الان هل هناك طريقة مع مكونات ado لعمل شئ مشابه او فيها امكانية لفعل ذلك بطريقة مشابهةاو احد أخر له فكرة افضل ...؟

وشكرا


حل مشكل العمليات المتعددة على قواعد البيانات - CMT-10 - 26-03-2012

السلام عليكم

تخطيط قاعدة البيانات بالشكل التالي



.jpg   Untitled-1.jpg (الحجم : 99.87 ك ب / التحميلات : 188)


تركيب الكود كان بالشكل التالي

كود :
Test1,test2,test3:boolean try Test1:=true; except on E: Exception do // ShowMessage end; try Test2:=true; except on E: Exception do DeleteFatora// end; try Test3:=true; except on E: Exception do // ShowMessage end; if (test1=true ) and (test2=true) and (test3=true) then begin end;



حل مشكل العمليات المتعددة على قواعد البيانات - Lam.Abdeldjalil - 26-03-2012

السلام عليكم

جرب بالـ transaction

http://www.delphi4arab.net/forum/showthread.php?tid=816&highlight=transaction

بالتوفيق


حل مشكل العمليات المتعددة على قواعد البيانات - hanipino - 27-03-2012

كود :
اقوم بخصم البضاعة من المخزن

كود :
ويخصم البضاعة من المخزن في جدول ثالث.

على حسب ما فهمت انه يوجد جدول المخزون الذى يخزن فيه الكمية الموجودة فى المخزن ... و هذه الكمية يمكن حسابها (المدخلات - المخرجات).

قاعدة مهمة من قواعد (الخاصبة بقواعد البينات) تقول : لا تخـــزن اى شــىء يمكــن حسابــه .
و انت اهملت هذه القاعدة و بالتلى واجهتك مشكلة التعديل على جدول المخزون بعد كل تعديل على المدخلات او المخرجات , و كما قلت قد تفشل احدى هذه العمليات و يتم الخصم من جدول المخزون ... .

من الاحسن تعويض عمل جدول المخزون ب requêtes SQL (استعلام SQL) .

بالتوفيق .


حل مشكل العمليات المتعددة على قواعد البيانات - CMT-10 - 27-03-2012

السلام عليكم

مرحبا بك hanipino

إقتباس :قاعدة مهمة من قواعد (الخاصبة بقواعد البينات) تقول : لا تخـــزن اى شــىء يمكــن حسابــه .

ربما لم تفهم القاعدة جيدا أخي hanipino فهي تعني ان لا تقوم بتخزين قيمة شئ يمكن حسابه من الجدول نفسه

بمعنى لا تخزن قيمة سعر الشراء مضروب في الكمية فهي مخزنة فعلا وباي وقت قم بضرب القيمتين فتحصل على الناتج

ولو كانت القاعدة عامة اي لا تخزن اي شئ يمكن حسابه فلن يمكننا حساب اي شئ ولا معرفة اي شئ

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

كود :
[color=Red]ADOConnection1.BeginTrans ;[/color] try [COLOR=Green] ADOTable1.Insert; ADOTable1.FieldByName('fatora').Value:=Edit1.Text; ADOTable1.FieldByName('mname').Value:=Edit2.Text; ADOTable1.FieldByName('age').Value:=Edit3.Text; ADOTable1.Post; [/COLOR] [COLOR=Blue] ADOTable2.Insert; ADOTable2.FieldByName('mname').Value:=Edit4.Text; ADOTable2.FieldByName('age').Value:=Edit5.Text; ADOTable2.Post; [/COLOR] [color=#ff0000]ADOConnection1.CommitTrans;[/color] except on E: Exception do [color=#ff0000]ADOConnection1.RollbackTrans;[/color] end;

فبدلا من التحقق بنفسي من نجاح العملية بعدة اجراءات اترك هذا لكائن الاتصال .

إقتباس :من الاحسن تعويض عمل جدول المخزون ب requêtes SQL (استعلام SQL) .

بالتاكيد انا استخدم جمل الاستعلام لتحديث البيانات والا فكيف سيمكنني معرفة الصنف المطلوب بجدول المخازن
فالاوامر Locate وايضا Filtter الخاصة بالجدول لا اتكل عليها بهكذا امور


والله الموفق


حل مشكل العمليات المتعددة على قواعد البيانات - hanipino - 27-03-2012

كود :
فهي تعني ان لا تقوم بتخزين قيمة شئ يمكن حسابه من الجدول نفسه

ما الفرق بينهما من نفس الجدول او من جدولين او اكثر
... (على كل حال) ربما عند حق .
--------------------------------
من الاحسن ? بعدل كل (حذف تعديل اضافة) على جدول المدخلات او المخراجات تقوم بالكتابة فى جدول المخزون .

ام

تنفذ استعلام عند الحاجة فقط ياتى بما هو موجود فى المخزن (حسابه) .


حل مشكل العمليات المتعددة على قواعد البيانات - CMT-10 - 27-03-2012

السلام عليكم

مرحبا بك مرة أخرى هنا أخي

إقتباس :من الاحسن ? بعدل كل (حذف تعديل اضافة) على جدول المدخلات او المخراجات تقوم بالكتابة فى جدول المخزون .

أجل بالتاكيد ان اقوم بتعديل الكميات بجدول المخازن بعد كل عملية بيع او شراء او عملية تعديل على فاتورة بيع او شراء او عملية مسترجعة لمبيعات او مشتريات ( وجع رأس أخي )

صورة لنافذة المخزن والحقول التي تحتويها


.jpg   QQQQ.jpg (الحجم : 30.84 ك ب / التحميلات : 179)


حل مشكل العمليات المتعددة على قواعد البيانات - محمد عبد العزيز - 29-03-2012

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

كفكرتين:
1- تعمل بجداول مؤقتتة،
تحفظ بها كل معلومات الفاتورة وعند الانتهاء يتم حفظ كل شيئ بالجداول الحقيقية
2- لا تنقص الكمية من جدول المواد/الاصناف لانه يمكن حساب ذلك (تغير بالتصميم) وهذا احسن كونه يطبق القاعدة التي ذكرها اخي هاني



حل مشكل العمليات المتعددة على قواعد البيانات - CMT-10 - 31-03-2012

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

إقتباس :تنفذ استعلام عند الحاجة فقط ياتى بما هو موجود فى المخزن (حسابه) .

وكذلك

إقتباس : لا تنقص الكمية من جدول المواد/الاصناف لانه يمكن حساب ذلك (تغير بالتصميم) وهذا احسن كونه يطبق القاعدة التي ذكرها اخي هاني

ربما هذا صحيح بحال عدم طلب الزبون رغبته في انقاص الكمية من المخزن يدوي بكثير من الحالات .

وما فهمته منكم هو ان كمية المخزن تعتمد على فواتير الشراء وفواتير المبيعات تحدد كمية المخزن من المواد التي تم شراءها ويمكن هذا بواسطة استعلام من الجدولين .

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

إقتباس :- تعمل بجداول مؤقتتة،
تحفظ بها كل معلومات الفاتورة وعند الانتهاء يتم حفظ كل شيئ بالجداول الحقيقية

تقريبا هذا ما افعله اقوم باخذ نسخة من جدول المخزن والعمل عليها وحفظ البيانات في جدول مؤقت اخر أو بالذاكرة او في StringGrid وعند الانتهاء اقوم بحفظ البيانات


حل مشكل العمليات المتعددة على قواعد البيانات - hanipino - 01-04-2012

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

هذا التعديل من المستخدم له اسباب (ما الشىء الذى ادى به الى تغيير قيمة المخزون)
اما خطاء فى الفاتورة او ... . يقوم بالتعديل على الفاتورة فقط .
--------------------------
الا اذا ذهب الى المخزن و قام بالحساب يدويا .. و هذا ما يعرف بالجــــــــــرد و هذا الاخير ننشىء له جدول خاص نسجل فيه الكمية التى حسبت يدويا
(و هذا هو ربما سبب التعديل الكثير من المستخدم لان اجراء عملية الجرد تجرى عدة مرات للتاكد من الحساب)
--------------------------

بالنسبة للكمية الموجودة فى المخزن يمكن الاطلاع عليها من ناحيتين
1- الفرق بين المدخلات و المخرجات (المسجلة على اساس الفواتير) ---> استعلام من جدولين او اكثر .
2- عن طريق جدول الجرد (الذى يحسب يدويا) ---> استعلام من نفس الجدول
---
و قد يكون هناك فرق بينهما (و هذا ما يعرف ب فروقات الجرد) اى الفرق بين ما هو مسجل فى الفواتير و ما هو موجود حقيقتا فى المخزن و هذا الفرق يحتاجه المحاسب و يحضره مسير المخزون و له اسبابه التى يجب ان تفسر .
--------------------------

فى نضرى العمليات التى يقوم بها المستخدم هى
1- تسجيل المدخلات
2- تسجيل المخرجات
3- تسجيل الجرد
...
الباقى كله استعلامات sql فقط . و الله اعلم

بالتوفيــــــــــــق .