الاخوة في المنتدى السلام عليكم ارجو توضيح مميزات استخدام pessimistic & optimistic buffering في عمليات التعديل على البيانات حيث لاحظت ان اغلب الاخوة في المنتدى يستخدمون ايعازات sql في التعديل على البيانات ولايستخدمون الايعازات الخاصة بالفوكسبرو للتعديل او استخدام buffering فهل من يوضح السبب مشكورا مع تقديري للاخوة اعضاء المنتدى وجزاكم الله عنا كل خير : :hmm: :hmm: :hmm: :mellow: :mellow:
pessimistic & optimistic buffering
السلام عليكم اخي
اعتقد ان سوالك مهم وجميل
وانا في رائيي المتواضع اعتقد ان لايوجد الفرق الكبير سوى الحمايه الاكثر من لغة الاستعلام
وهنالك شي احب ان اذكره واعتقد انك تعرفه جيداً
وهي ان لكل شخص يعمل في مجال البرمجة له طريقة معينه لكل فكرة ولكن تكون نتيجة الفكره واحده وخير مثال في المشاركات السابقة والنقاش بين الاعضاء لكل سوال او مقاله تجد اكثر من طريقة
مثلاً
في فكرة البحث في البيانات تجد قسم يستخدم لغة الاستعلام والقسم الاخر يستخدم طريقة الفلتر واخر يستخدم غيرها....الخ
اما التعريف النصي للداله المذكورة هو:
إذا كنت ترغب في حماية البيانات خلال التحديثات ، واستخدام المخازن. فيجوال الفوكس برو سجل التخزين المؤقت والجدول تساعدك على حماية البيانات والتحديث عمليات الصيانة على سجلات البيانات واحد وعلى سجلات متعددة من البيانات في البيئات متعددة المستخدمين. مصدات يمكن اختبار تلقائيا ، قفل ، وسجلات إطلاق سراح أو الجداول.
مع التخزين المؤقت ، يمكنك الكشف عن الصراعات وحلها بسهولة في عمليات تحديث البيانات : يتم نسخ السجل الحالي إلى موقع الذاكرة أو القرص الذي يديره الفوكس برو الفيجوال . يمكن للمستخدمين الآخرين لا يزال ثم الوصول إلى السجل الأصلي في وقت واحد. عند الانتقال من السجل أو محاولة تحديث السجل برمجيا ، فيجوال الفوكس برو محاولات لقفل السجل ، التحقق من أنه تم إجراء أية تغييرات أخرى من قبل المستخدمين الآخرين ، ويكتب ثم أظهر. بعد محاولة تحديث البيانات ، يجب عليك أيضا حل الصراعات التي تمنع أظهر من يتم كتابتها إلى الجدول الأصلي.
اختيار طريقة التخزين المؤقت
قبل تمكين التخزين المؤقت ، وتقييم البيئة البيانات لاختيار أسلوب التخزين المؤقت وخيارات التأمين التي تناسب تحرير احتياجات التطبيق الخاص بك ، وأنواع السجلات والجدول والأحجام ، وكيفية استخدام المعلومات وتحديثها ، وغيرها من العوامل. وبمجرد تمكين التخزين المؤقت ، فإنه لا يزال ساري المفعول حتى تقوم التخزين المؤقت تعطيل أو إغلاق الجدول او الجداول.
تحياتي لك ولجميع الاعضاء والزوار للمنتدى
السلام عليكم ورحمة الله
بالنسبة للطرق، وكما ذكر الاخ أسد مشكورا جميع الطرق تؤدي الى الغاية المنشودة،
أما بالنسبة للتعامل مع المتغيرات فكانت قديما procedural مباشرة مع الذاكرة بواسطة Scatter Memevar و Gather memvar ( الذاكرة = buffer )
ثم تحولت الى OOP بواسطة النماذج والعناصر ( النموذج = buffer )
وأخيراً ظهرا الـ Table buffering الذي يمكننا من استخدام الجدول مباشرة كبفر ( الجدول = buffer )
وبطبيعة الحال الطرق الثلاثة فعالة جدا، ولا تزال قابلة للاستخدام، وقد تكون الطريقة الأخيرة غير دارجة الاستخدام لأنها الأحدث ولأن المعظم تعوّد على القديمة
علما بأنها ( بالنسبة لي ) الأفضل، الأسرع في التصميم، الأنسب لكافة الاستخدامات المتعلقة بالتعامل مع الجداول.....
أما بالنسبة لأنواع الـ Buffer
Pessimistic = متشائم :mad: / Optimistic = متفائل :) حسب الترجمة الحرفية للكلمات ( اظن أنها ستكون ترجمة سخيفة )
اعتقد أننا لو قلنا Pessimistic = غير مرنة و Optimistic = مرنة سيكون وصفاً أدق للحالة
الـ Pessimistic تقوم على حجز السجل فور البدء باجراء أي تعديل عليه
أما Optimistic تسمح للجميع بالتعديل على السجل/السجلات ولا تقوم بحجز السجل / أو السجلات الا عند الانتقال من سجل لآخر أو عند عمل Tableupdate
ولو جعلت خيارك الـ Buffering = 5 القائم على توفير أقصى مرونة ممكنة للتعامل مع سجل واحد أو أكثر بشكل دائم فلن تواجه أي مشاكل
لأنه يغني عن كافة الأوضاع الأخرى ولأنك تستطيع من خلال TableUpdate او TableRevert ان تحدد فيما لو اردت حفظ أو الغاء التعديلات للسجل الحالي او لكافة السجلات
هذا يرجعنا الى طريقة ادخال البيانات،
فسواء استخدمنا
- Append Balnk أو Insert Into للاضافة
- Replace أو Update للتعديل
الجدول لا يفهم الا شيء واحد وهو أنه يريد بيانات كاملة وصحيحة
بالنتيجة هذا كله يعود لك، أي الطرق تستخدم، أي الطرق تكون الأنسب من الأخرى.......أي أي أي
طبعا وهنا لا بد من الاشارة الى أن استخدام الـ Table Buffering يوفر الكثير من الوقت والمجهود والأمور التي تتطلبها الطرق الأخرى
مع التحية
تم تعديل هذه المشاركة بواسطة Shadowz في 6 يونيو 2011 في 04:49
أستغفر الله العظيم و أتوب إليه
شكرا للاخ Shadowz
على الشرح الاجميل جداً واتمنى وصلت الفكرة للاخ ( العصفور الضغير )
واحب ان اضيف مثالاً بسيطاً عن عمل الداله
قم بعمل برنامج جديد والصق الكود التالي
CLOSE DATABASES
CREATE TABLE lion_table (iraq C(20))
SET MULTILOCKS ON && يجب عمل تشغيل لكي يحصل table buffering
= CURSORSETPROP('Buffering', 5, 'lion_table' ) && Enable table buffering
INSERT INTO lion_table (iraq) VALUES ('arabteam')
CLEAR
? ' عرض القيمه للجدول '
?? iraq
REPLACE iraq WITH 'lion iraq'
? ' عرض القيمه بعد التحديث للجدول '
?? iraq
= TABLEUPDATE(.t.) && Commits changes
? ' عرض القيمه النهائية للجدول '
?? iraqسوف تظهر النتائج في نافذة الفيجوال الرئيسيه
تحياتي للجميع
الاخوان lion iraq & shadows :ty: :ty: لسرعة الاستجابة وعلى البرنامج الجميل من الاخ اسد العراق حسب ما فهمتوا انه اسلوب (تكنيك) لايؤثر على قوة البرنامج لكن اي منهم تنصحوا فيه عند وضع النظام على شبكة لعدة مستخدمين وجزاكم الله كل خير عنا
الحمد لله الذي هدانا
lion iraq كتب:اما التعريف النصي للداله المذكورة هو:
إذا كنت ترغب في حماية البيانات خلال التحديثات ، واستخدام المخازن. فيجوال الفوكس برو سجل التخزين المؤقت والجدول تساعدك على حماية البيانات والتحديث عمليات الصيانة على سجلات البيانات واحد وعلى سجلات متعددة من البيانات في البيئات متعددة المستخدمين. مصدات يمكن اختبار تلقائيا ، قفل ، وسجلات إطلاق سراح أو الجداول.
مع التخزين المؤقت ، يمكنك الكشف عن الصراعات وحلها بسهولة في عمليات تحديث البيانات : يتم نسخ السجل الحالي إلى موقع الذاكرة أو القرص الذي يديره الفوكس برو الفيجوال . يمكن للمستخدمين الآخرين لا يزال ثم الوصول إلى السجل الأصلي في وقت واحد. عند الانتقال من السجل أو محاولة تحديث السجل برمجيا ، فيجوال الفوكس برو محاولات لقفل السجل ، التحقق من أنه تم إجراء أية تغييرات أخرى من قبل المستخدمين الآخرين ، ويكتب ثم أظهر. بعد محاولة تحديث البيانات ، يجب عليك أيضا حل الصراعات التي تمنع أظهر من يتم كتابتها إلى الجدول الأصلي.
اختيار طريقة التخزين المؤقت
قبل تمكين التخزين المؤقت ، وتقييم البيئة البيانات لاختيار أسلوب التخزين المؤقت وخيارات التأمين التي تناسب تحرير احتياجات التطبيق الخاص بك ، وأنواع السجلات والجدول والأحجام ، وكيفية استخدام المعلومات وتحديثها ، وغيرها من العوامل. وبمجرد تمكين التخزين المؤقت ، فإنه لا يزال ساري المفعول حتى تقوم التخزين المؤقت تعطيل أو إغلاق الجدول او الجداول.
السلام عليكم
اخي العزيز من خلال التعريف الموجود في الرد السابق
تتوضح الفكرة في بيئة متعدد المستخدمين واعتقد هي الافضل في كل الاحوال لوجود عمليات ادخال وتحديث يمكن ان تكون في وقت واحد مما تحتاج الى عمليات هاله من القفل وفتح القفل للسجلات او الجداول
ولكن يجب مراعاه قيمة الداله التي هي من خمس مستويات اسرعها الخامسه وابطهها الاولى
*** ولكن ان شاء الله يشاركنا الاخ ابو عبد الله shadowz للابداء في رايه المهم طبعا
مع التحياتي للجميع
السلام عليكم ورحمة الله
أصدقائي
فكرة ( التكنيك ) بشكل عام صحيحة 100%، طبعا في أي شيء، فــ
أن تعرف كل الطرق وتتمكن منها،
أن تستخدم الأسلوب الأنسب حسب الوضع الذي لديك،
أن تفاضل بين الأوامر التي تمكنك من الوصول لنفس النتيجة - أن تدرس الامر وتكون عارفاً بالتحديد ماذا سيفعل وماذا سينتج عنه
وحتى أن تفاضل في كمية الأحرف والسطور التي ستضطر لكتابتها لتنفيذ أمر ما ( طبعا ليس على حساب الاتقان والجودة )
......
كلها بالنهاية أمور تقود الى شيء واحد، وهو قوة المنتج وسرعة الأداء...لأنك على الأغلب وضعت حاصل معرفتك في برنامجك، وبنيته على أساس من التنوع الذي يوصله لنتيجته النهائية
كل شيء على طريقتك ( طالما تعلم ماذا تفعل )
على سبيل المثال نحن نعلم تحديدا الأوامر التي تجعل الفوكس برو يقوم بعمل حجز (Lock) للسجل أو الجدول،
ومع هذا في بعض الأحيان أرى أنه من الأنسب أن أقوم بعمل حجز يدوي Manual Lock للسجل أو للجدول الذي أريد العبث به ( حتى لو سبب هذا تأخير بسيط - قد لا يكاد يلحظ - وحتى لو كنت متاكداً
من أن الفوكس سيقوم بعمل الحجز اللازم في الوقت المناسب، الا أني أجد نفسي مرتاحا للامساك بزمام الأمور حسب الوضع الذي لدي... وليفعل الفوكس بعدها ما يفعل )
اقتباس*** ولكن ان شاء الله يشاركنا الاخ ابو عبد الله shadowz للابداء في رايه المهم طبعا
أيها الأسد..انا عبدالله ولست أبو عبدالله :wink: ..وشكرا للاهتمام...مع أننا قد نختلف قليلا الآن بخصوص الـBuffer
عزيزي.... طالما اننا وصلنا لنقطة تحديد نوع البفر... واستخدمنا الجدول - سواء أضفنا أو عدلنا أو حذفنا
فقد بات الموضوع شبه منتهي... وأصبح الفوكس منتظرا للحركة الأخيرة - اما بتغيير السجل أو باطلاق الأمر TableUpdate أو TableRevert -
لذا فعامل السرعة هنا ليس محددا بنوع البفر، لأن البيانات أساسا أصبحت موجودة فيه ( بشكل مؤقت )
لو نظرت للصورة المرفقة
ستجد أنواع البفر كالتالي :
1- استخدام الجدول بحالته الطبيعة بلا بفر
2- بفر يقوم بحجز السجل الحالي مباشرة فور البدء باجراء تعديل عليه - ويحتاج لالغاء الحجز اما تغيير السجل أو TableUpdate
3- بفر يسمح بالتعديل على السجل الحالي ولا يحجزه الا قبيل الانتقال لسجل آخر - ويحتاج لالغاء الحجز اما تغيير السجل أو TableUpdate
4- بفر يقوم بحجز الجدول وينتظر الأمر TableUpdate لفك الحجز
5- بفر لا يحجز الجدول الا عند استدعاء الأمر TableUpdate
سلام عليكم... وجاهز لأي استفسار
مع التحية،
أستغفر الله العظيم و أتوب إليه
السلام عليكم
اولا احب ان اعتذر الى الاخ عبد الله وان شاء الله انت عبد الله وابو عبد الله لانننا بطبيعة الحال عباداً لله
ومشكور على الشرح الجميل والمفصل لايصال المعلومة.
اخي العزيز ( العصفور الصغير ) سوف اقوم بشرح طريقة بفر بالصور واتمنى ان تصل المعلومة لك ولجميع من يحب معرفة عمليه بفر
اولا قم بتشغيل البرنامج الذي ارفقته لك كما في الصور..![]()
ثانياً بعد تشغيل البرنامج قم باجراء التعديلات الظاهرة بالصورة على البرنامج لكي نقوم بالشرح على الجدول الذي تم صنعه بالبرنامج كما في الصور التاليه![]()
ثالثا : بعد التعديلات وقبل التشغيل قم باستعراض الجدول ليكون في نافذة الفيجوال ثلاث اشياء معروضة وهي البرنامج والجدول والنافذة صاحبه الاظهار لتخزين الموقت
ثم قم بتشغيل البرنامج ولاحظ الاتي
رقم واحد في الصور هو تحديث القيمه ورقم اثنان هو تفعيل التحديث الاني للجدول ورقم ثلاثة هي اظهار القيمه المخزنة بشكل موقت ورقم اربعة هي قيمة الجدول او الحقل بعد التحديث
ولكن انظر عند التشغيل سوف تظهر رقم ثلاثة واربعة بنفس الوقت وهي نفس القيمة رقم اثنان كما في الصور التاليه
رابعاً انظر الصور التاليه
وقم باللغاء رقم اثنان وقم بالتشغيل سوف تلاحظ رقم ثلاثة لا يساوي رقم اربعة ولكن عند تغيير الموشر للماوس واختيار الجدول يعني الانتقال من البرنامج الى الجدول سوف يقوم بالتحديث ...
واما بقيم بفر وهي من واحد الى خمسه ف القيمة رقم واحد لاتقبل التخزين الموقت اما من رقم اثنان الى خمسه بتقوم بالتخزين الى الجدول اما بتفعيل كود التحديث updada او بالانتقال الى نافذة الجدول يعني عند اختيار الجدول بالموس او الانتقال اليه
والجدول لا يقبل الخذف النهائي اقصد بالكود pack اذا كان تحت عمليه بفر فيكون استخدام الجدول تحت الامر التال كما في الصور ![]()
اما اذا اردنا الحذف فيجب استخدام الجدول بالصيغة التاليه كما في الصورة التالية![]()
وبالنهايه اتمنى التوفيق في ايصال المعلومه
تحياتي
الاخ lion iraq تسلم وإن شاء الله يزيدك من عنده كمان وكمان وضحت الصورة وبتخجلنا بكرمك :pwease: ويعطيك الف عافية انت شرحت عملية البفر من خلال برنامج هل ياترى مستخدم حالات البفر من خلال فورم في data enviroment حيث تظهر ايضا خيارات كما في شرح اخونا عبد الله واحنه والله ندعو لك وله وإن شاء الله دعواتنا مقبولة باذن الله حيث يستخدم في هذه الحالة tableupdate or tablerevert للخزن او عدم الخزن انا عندما استخدمت هذه الحالة في احدى البرامج اصبح البرنامج عندما يدخلو عليه مستخدمين بآن واحد الفورم تبع الادخال تعمل عند الاول والثاني في حالة كانه ينتظر لما يكمل الاول كانا نسفنا مبدأ الشراكة Sharing وشكرا لكم والله اني مثقل عليكم بس حاب اتعلم من ناس تحب العلم وتعلم وتعمل صدقة جارية إن شاء الله وهذا :cash: كله إن شاء الله في ميزان حسناتكم
الحمد لله الذي هدانا
Shadowz كتب:
السلام عليكم
اشكر الاخ عبدالله ولا احس بالملل من الشكر واشكر ه لانه السباق في متابعة المنتدى والرد الجميل على مشاركات الاعضاء
الاخ العزيز العصفور الصغير
في حاله العمل اكثر من فورم او بيئة متعددة المستخدمين على جدول واحد يجب ان يتم تهية الجدول للعمل في هذة البيئة مثل use mytable shared
ويجب مرعاة بعض اعدادات الوندوز لتهيئة العمل على الشبكة بين الاجهزة
مثل يجب ان تكون الاجهزة على نفس مجموعة العمل ولتكون workgroup
وارفق لك مثال يوضح العمل لاكثر من نموذج على جدول واحد ويكون الدخول اني
اعمل المشروع ملف تنفيذي لعمل المشروع بصورة جيدة ولتوضح الفكرة
سوف يظهر نموذج يحتوي على 3 ازرار اختر الاول والثاني والثالث سوف تظهر ثلاث نماذج الاول user1 والثاني user2 والثالث يبين كرد ويوضح ادخال البيانات وسرعة
حاول ادخال المعلومات في كلا النموذجين user1,user2 ثم اختر الزر الموجود فب كلا النموذجين وهو الادخال والحفظ في نفس الوقت اي الاحد ثم الاخر بسرعة ولاحظ البيانات في الجدول سوف ينم النخزين وبدون انتظار
واتمنى في المثال المرفق ان تكون الصورة واضحة
تحياتي للجميع
اهلا اخي عبدالله انا بخير الحمد لله وانت كيف حالك ؟؟؟ :thumb_up: شكرا على هذا الموضوع وياريتني دخلت هذا المنتدى من زمان لان مواضيع السنوات السابقة شيقة ولاتعوض وكلها مواضيع عن جد رائعة وإن شاء الله معاكم راح اتابع واتواصل وبجرب المثال وإن شاء الله نفسك انت والاخ اسد العراق معانا لانه كمان بيتواصل معانا وبيجاوب على طول الله يعطيكم العافية
الحمد لله الذي هدانا
السلام عليكم
اخي العزيز lion iraq بارك الله فيك وجزاك كل خير على الجهود التي تبذلها
من اجل ان تعم الفائدة للجميع
مجهود رائع والله انا استفدت كثير من مشاركاتك ومشاركات الاخ عبد الله
جزاكم الله عنا كل خير وبارك الله فيكم
في المشروع الذي ارفقته في هذه المشاركة الفكرة جميلة لكن لاحظت ان البيانات
عندما ادخلها للفورم في حالة فتحته مباشرة لا يتم ادخالها الا اذا تم فتح الفورم الرئيسي
ومن خلاله افتح الفورمين المربوطين بالجدول لادخال البيانت بالجدولين وحفظها . تقبل تحياتي
وشكري الجزيل .....


نور القمر شكرا على المرور
وبخصوص تشغيل البرنامج اما بتحويل ملف تنفيذي
او التشغيل من برنامج المسمى main
واتمنى ان فكرة تعدد النماذج على جدول واحد او العمل اكثر من مستخدم على جدول واحد قد وصلت
تحياتي للجميع
شكراً لجميع المبدعين في شرح الموضوع
الحقيقة وجدة الكمندى روعه
الأخوة العصفور الصغير و MoonLight10 و Tager
كل التمنيات بأن تعم الفائدة، والشكر لكم
مع التحية طبعا للعزيز LionIraq والجميع
أستغفر الله العظيم و أتوب إليه
Shadowz كتب:الأخوة العصفور الصغير و MoonLight10 و Tager
كل التمنيات بأن تعم الفائدة، والشكر لكم
مع التحية طبعا للعزيز LionIraq والجميع
تحياتي لك يا مبدع وللجميع
