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=11662)

الصفحات: 1 2


أرسال بيانات من الذاكرة الى الجدول - Delphi4Us - 23-11-2021

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


طلب مني احدهم طريقة برمجة لم اتطرق لها من قبل وهي انه يريد اضافة فاتورة مبيعات بحيث المستخدم يقوم بادراج البضاعة وعندما ينتهي يرسلها للحفظ بقاعدة البيانات
اول ما خطر ببالي استخدمت المكون ClientDataSet وحفظ البيانات عن طريق Loop 

1: سؤالى هل هناك طريقة اخرى غير هذه الطريقة لحفظ البيانات دفعة واحدة بدل من استخدام Loop لاجل ذلك ...؟

2: هل هناك طريقة لمعاينة ما ينتجه المكون DataSetProvider من اوامر لحفظ البيانات عندما يكون متصل بمكون TdataSet ...؟

مع العلم انني لا اربط المكون DataSetProvider مع المكون المكون TdateSet لان هذا من شأنه ان يظهر كل المبيعات الاخرى التي بجدول المبيعات .


RE: أرسال بيانات من الذاكرة الى الجدول - Delphi4Us - 23-11-2021

فكرت في طريقة أخرى وهي جعل جدول TEMP يحمل نفس حقول جدول المبيعات اخزن فيه وبعدها انقل المحتويات لجدول المبيعات عن طريق SQL
وبالجملة SELECT INTO


RE: أرسال بيانات من الذاكرة الى الجدول - I3CT - 24-11-2021

إقتباس :فكرت في طريقة أخرى وهي جعل جدول TEMP يحمل نفس حقول جدول المبيعات اخزن فيه وبعدها انقل المحتويات لجدول المبيعات عن طريق SQL

وبالجملة SELECT INTO
و عليكم السلام و رحمة الله

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

مثلا:
- مادة x متوفر منها 10 وحدات.
- قامت نقطة البيع رقم 01 ببيع 6 وحدات و لم تنقل بعد عملية البيع ليتم انقاص الكمية من المخزون (لانها ما زالت مشغولة باضافة مبيعات اخرى في جدول الــ TEMP الخاص بها)..
- قامت نقطة البيع رقم 02 ببيع 6 وحدات ايضا و لم تنقل بعد عملية البيع ليتم انقاص الكمية من المخزون (لانها ما زالت ايضا مشغولة باضافة مبيعات اخرى في جدول الــ TEMP الخاص بها)..

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

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


RE: أرسال بيانات من الذاكرة الى الجدول - embarcadero - 25-11-2021

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

أضن أفضل حل لكل عملية انقاص تتم على مستوى قاعدة البيانات ، ببرمجة إجراء داخل قاعدة البيانات يقوم بعملية الإنقاص


RE: أرسال بيانات من الذاكرة الى الجدول - Delphi4Us - 25-11-2021

صحيح هي نقطة بيع واحدة

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

كود :
QIN-QOUT+TEMP_QOUT


بافتراض ان QIN كمية المشتريات للصنف و QOUT كمية الصنف للمبيعات و TEMP_QOUT كمية المبيعات للصنف تحت الاجراء
او تعطي ان هناك كمية بعدد كذا تحت الاجراء قد يتم بيعها وقد لا يتم ففي حالات نادرة لا يتم البيع عادة


RE: أرسال بيانات من الذاكرة الى الجدول - sofiane201 - 25-11-2021

مرحبا

لديك بعض الطرق, لا أتذكرهم بالتفصيل ولكن منها أن تستخدم TFDMemtable هو مثل ClientDataSet ولكن أفضل, أو أن تستخدم جدولك العادي أو الكويري أو أي مكون يتبع TFDDataSet, وتفعل خاصية CachedUpdates, بعدها أي تغيير للبيانات من حذف وتعديل وإضافة يحفظ في سجل (Log) ولك أن تحتفظ بحالة معينة من السجل وترجع إليها لاحقا, بعد عملك كله تقرر اذا تريد حفظ ما قمت به من تغييرات أو إلغاءه, بالاجراءين ApplyUpdates و CancelUpdates.

إطلع فقط على التوثيق عند الموضوع Caching Updates, أو اذا استطعت اقرأ كتاب "Delphi In Depth - Firedac" فيه كل ما تحتاجه وزيادة, أنصح به أشد النصح وسيفيدك حتى ان تعاملت لاحقا مع Unidac أو مكونات أخرى.

بالنسبة لمشكل تعدد المستخدمين لقاعدة واحدة وتضارب استخدامهم لسجلاتها, اقرأ عن الLocking للسجلات إما في التوثيق أو في مكان آخر.

للأسف عندي مدة طويلة لم أعمل بها مع قواعد البيانات وإلا كنت فصلت بعض الشيء.


RE: أرسال بيانات من الذاكرة الى الجدول - أبو معاذ - 25-11-2021

السلام عليكم.
عن نفسي استعمل Triggers للتحديث البيانات.
بالنسبة لموضوع Firedac و CachUpadate  ، هناك فيديو للأخ الأُرْدُنّيّ أسامة غزال ، فصل فيها تفصيلا رائعا :
رابط الفيديو :

https://www.youtube.com/watch?v=vFo4fKflnko


RE: أرسال بيانات من الذاكرة الى الجدول - S.FATEH - 25-11-2021

السلام عليكم اخ ابو معاذ ماذا عن Master/Detail ماذا تستخدم


RE: أرسال بيانات من الذاكرة الى الجدول - أبو معاذ - 25-11-2021

(25-11-2021, 07:14 PM)S.FATEH كتب : السلام عليكم اخ ابو معاذ ماذا عن Master/Detail ماذا تستخدم

وعليكم السلام و رحمة الله وبركاته.
لم افهم السؤال جيدا...
هل تقصد المكونات table او query؟


RE: أرسال بيانات من الذاكرة الى الجدول - Delphi4Us - 25-11-2021

إقتباس :إطلع فقط على التوثيق عند الموضوع Caching Updates


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

والكتاب هل هناك رابط له بحتث عنه فلم اجده ...؟


هناك شئ ربما ليس له علاقة بالموضوع هنا مباشرة ولكنه لم يعمل معي في Caching Updates وهو عندما اردت ان احدث البيانات لاستعلام من ثلاث جداول كما بالصورة

[صورة: attachment.php?aid=4564]
في الاداة Dbgride كل لون يمثل بيانات جدول وفي IbQoury1 يمكن مطالعة جملة SQL اعتراض الدلفي على جملة SQL في IBCUPdateSQL لو حذفت جملة Update الثانية وتركت واحدة فقط ولاحد الجداول فتعمل الجملة بلا مشاكل ولكنه يقول هناك خطاء بالسطر الثامن ورمز الخطاء -104 
Unknown Colunmn1 update
اي انه يرفض وجود جملتين للتحديث مع انه بمكونات FireDac لا وجود لمشكلة