delphi4arab منتديات دلفي للعرب

نسخة كاملة : أرسال بيانات من الذاكرة الى الجدول
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله


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

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

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

مع العلم انني لا اربط المكون DataSetProvider مع المكون المكون TdateSet لان هذا من شأنه ان يظهر كل المبيعات الاخرى التي بجدول المبيعات .
فكرت في طريقة أخرى وهي جعل جدول TEMP يحمل نفس حقول جدول المبيعات اخزن فيه وبعدها انقل المحتويات لجدول المبيعات عن طريق SQL
وبالجملة SELECT INTO
إقتباس :فكرت في طريقة أخرى وهي جعل جدول TEMP يحمل نفس حقول جدول المبيعات اخزن فيه وبعدها انقل المحتويات لجدول المبيعات عن طريق SQL

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

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

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

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

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

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

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

كود :
QIN-QOUT+TEMP_QOUT


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

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

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

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

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

https://www.youtube.com/watch?v=vFo4fKflnko
السلام عليكم اخ ابو معاذ ماذا عن Master/Detail ماذا تستخدم
(25-11-2021, 07:14 PM)S.FATEH كتب : [ -> ]السلام عليكم اخ ابو معاذ ماذا عن Master/Detail ماذا تستخدم

وعليكم السلام و رحمة الله وبركاته.
لم افهم السؤال جيدا...
هل تقصد المكونات table او query؟
إقتباس :إطلع فقط على التوثيق عند الموضوع Caching Updates


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

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


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

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