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

كيف يمكن التغلب على الحفظ التلقائي

مغلق
بدأه العبدلي في 25 سبتمبر 2001 · 11 رد · 2,127 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الأعزاء لدي مشكلتين لم أستطع حلهما :

1- عند ادخال بيانات في سجل يتم حفظه مباشرة بمجرد الانتقال الى السجل التالي . والمطلوب كيف يمكن منع عملية الحفظ إلا بأمر من المستخدم .

2- لدي قاعدة بيانات مقسمة حيث النماذج والتقارير .. في ملف والجداول في ملف آخر مربوطة بالمف الأول وأريد حماية الجداول بكلمة سر بدون أن يطلبها عند فتح البرنامج ولكن يطلبها فقط عند محاولة فتح الملف التي يحتوي على الجداول .

أرجو مساعدتي في ذلك ..

وجزاكم الله خيرا

#2

بالنسبة للسوال الاول

هل هنالك نموذج تقوم بعملية الحفظ من خلاله ؟

#3

الأخ العبدلي

من قائمة أدوات بند خيارات ومنها بند لوحة المفاتيح يوجد أربع اختيارات فى هذا البند يمكن من خلالها أن تتحكم فيما تريده ولكني أفضل أن يقوم البرنامج بالخفظ تلقائياً خوفا من إنقطاع الكهرباء .

أشرف خليل

#4

أخ أشرف

لا يوجد فما ذكرت ما يمنع حفظ الحقل تلقائيا لأنه يقول عند الانتقال يعني المستخدم ينتقل من سجل إلى آخر .

الأخ العبدلي

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

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

ولكن أكرر ما سبب عدم رغبتك في حفظ السجل ؟

ولك تحياتي

#5

الحفظ التلقائي هي احد الامور التي تميز نظام Microsoft Access عن نظم قواعد البيانات الاخرى

بالطبع قد لا يرغب البعض بذلك و لذلك هناك عدة طرق للالتفاف حول الموضوع و منهم ما يالي

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

- الطريقة الثانية هي اضافة حقل اضافي من نوع Boolean و يسمى Posted مثلا و تضع قيمته الافتراضية False اي صفر، و هذه انا استخدمها مع اضافة بيانات جديدة في نموذج مرتبط في جدول ، حيث ابرمج النموذج ليفتح في حالة ادخال البيانات ن اي انه لا يظهر البيانات القديمة ، و يقوم الميتخدم باضافة ما شاء من بيانات ، و بحيث عندما يضيف البيانات تضاف بصورة الية القيمة False الى الحقل Posted و هذا الحقل لا يراه المستخدم ، اي لا اضيفه الى النموذج

عند اغلاق النموذج اقوم باضافة كود في On Close او On Unload حسب تركيبة برنامجي طبعا ، على العموم الكود قد يسال السؤال التالي ، هل ترغب بحفظ الاضافات الجديدة و ان كان نعم او لا اشغل كود SQL مختلف ، كالكود التالي مثلا

if (a = "Save") then
  docmd.RunSQL "update table1 set Posted = -1"
else
  docmd.RunSQL "delete from table1 where posted = 0"
end if

ملاحظة لو كنت تستخدم SQL Server القيمة -1 يجب ان تكون 1

- الطريقة الثالة هي ان تفتح النموذج للقرائة فقط و تمنع التعديلات و هذا يمكن ان يحدث عن طريق تعديل خصائص مختلفة في النموذج و منها Recordset type

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

و هناك طرق اخرى يستخدمها المبرمجين

اما في SQL Server فالحيل اكثر ن حيث هناك امكانية التراجع المتتالي ن فقد تقوم بالطلب من SQL Server بتسجيل العمليات ولكن ان لا يحفظها في قاعدة البيانات و من ثم عند الانتهاء من التعديلات على الجدول (عن طريق النموذج طبعا) يمكنك القيام بحفظ و هي عملية Commit او Rolback لترجع الامر كما كان عليه قبل التعديل ، انا لم اجرب هذه الطريقة من قبل و لكني اعرف انها موجودة

و بالمناسبة ال Commit امر موجود في ال ADO و هذا يعني انه ربما تجده في Microsoft Access ايضا ن مع انني غير متاكد كثيرا من ذلك

#6

الأخ خضرترزي

نشكرك على هذه المشاركة القيمة .

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

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

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

وللجميع تحياتي

#7

الأخوة الأعزاء

اشكركم على التفاعل مع الموضوع

أما بالنسبة لرغبتي في عدم الحفظ التلقائي هي أني لا أريد أن يحفظ السجل بمجرد الانتقال الى سجل آخر حيث أنني أرغب في عمل بعض القيود قبل حفظ السجل .

اضرب لكم مثالاً .

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

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

#8

الأخ العبدلي

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

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

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

إذا لم تنجح في حل المشكلة فواصل الكتابة هنا وبإذن الله ستجد الحل .

ولك تحياتي

#9

تحياتي للجميع

يعني فهمت من كلامكم انه لا يمكن وقف الية الحفظ الا بالتحايل

وغير ذلك لا......انا اعتبر هذه مشكله وليست ميزه ان لم يكن لها

حل..........

واذا كان يوجد commit او rollback في قاعدة البيانات هذه

يرجى ان تفيدونا

لأن هذا ما ابحث عنه

وشكرا

#10

لقد راجعت مايكروسوفت حول الموضوع و اتضح التالي

النسخ Beta "قيد التطوير" من Microsoft Access 2002 XP احتوت على مجموعة من الخصائص و التي تسمح لك بان تقوم مباشرة و بدون تحايل على حفظ التغيرات وانت تتنقل بين السجلات او عند اغلاق النموذج و هذه الخصائص هي

AfterBeginTransaction 
AfterCommitTransaction 
BatchUpdates 
BeforeBeginTransaction 
BeforeCommitTransaction 
BeginBatchEdit 
CommitOnClose 
CommitOnNavigation 
RollbackTransaction 
UndoBatchEdit

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

لانها ازيلت من النسخة النهائية ولكنها موجودة على ما اعتقد في BETA2

ستقوم مايكروسوفت ربما (هذا غير اكيد) في توفير هذه الخصائص في النسخة القادمة من Microsoft Access 2004 او في ملفات التصليح الحالية القادمة ل Microsoft Access ربما في Microsoft Office XP Service Pack 1 ربما

حتى الان يجب اتباع حيلة فقط للقيام بذلك

انا لدي النسخة BETA2 من Office XP و لكني لم انتبه الى هذا الامر ، اذكر فقط بان مايكروسوفت قامت بالغاء برنامج كامل من Office اسمه Microsoft Designer و هو مخصص لبناء برامج ويب تعمل من داخل Microsoft Outlook و قامت بالغاء ال Web Files و الغاء امكانية تصغير ال Outlook الى مربع الساعة في شريط الادوات لان ذلك يسبب مشاكل او لان البرامج السابقة لم تكتمل حتى تاريخ اصدار البرنامج

#11

الأخ خضرترزي

أشكرك كثيرا على هذه المعلومات القيمة .

وفقك الله

ولك تحياتي

#12

تحياتي للجميع

شكرا لك اخ خضر على اهتمامك

كما ذكرت لكم انا جديد على اكسيس

فانا اكثر عملي على oracle لهذا السبب ابحث على ما تعودت عليه

شكرا للجميع

هذا الموضوع مغلق.

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

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

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

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

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