اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

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

إن من بين الأشياء الأكثر إرهاقا التي تعيق عمل المبرمجين هو تحديث قاعدة البيانات لدى الزبون

فلا تستطيع إعطاءه قاعدة جديدة لأن جميع بياناته مسجلة في تلك القاعدة

أما إضافة التحديث يدويا هذا يتطلب منك التنقل إلى الزبون أو الإتصال عن بعد و ربما الزبون لا يملك الأنترنت

و الأكثر من ذلك ربما نستطيع التحديث يدويا لقاعدة البيانات و ماشي الحال فرضا هذا الشخص له عدد كبير من النسخ الإحتياطية 60 أو 70 أو أكثر و أراد ربط البرنامج بأحد النسخ الإحتياطية هل يتوجب على المبرمج التنقل له مرة ثانية؟؟:wallbash:

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

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

أولا:

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

الكود يعتمد على أوامر SQL و قد سبق لي أن شرحت هذه الدوال في هذا الموضوع: شرح دوال SQL

التحديث هو عبارة عن إضافة جدول جديد أو إضافة حقل لجدول موجود

الوحدة النمطية التالية: تقوم بإضافة جدول جديد لقاعدة البيانات اسمه tbl2 و إضافة حقل Age لجدول tbl1

Function edit_db()
On Error Resume Next
Dim app As Access.Application
Dim file_data As String
Dim sq As String
'مسار القاعدة
file_data = CurrentProject.Path & "\DB.mdb"
    
Set app = CreateObject("Access.Application")
app.OpenCurrentDatabase (file_data)
app.Visible = False

DoCmd.SetWarnings False

'كود إنشاء جدول
sq = "CREATE TABLE tbl2_fav ( id COUNTER PRIMARY KEY, name_adm text(50), num integer)"
app.DoCmd.RunSQL sq

' كود إضافة حقل لجدول موجود
sq = "ALTER TABLE tbl1 ADD COLUMN Age integer"
app.DoCmd.RunSQL sq

DoCmd.SetWarnings True

app.Quit acQuitSaveAll
Set app = Nothing
MsgBox "تمت العملية بنجاح"

End Function

ونقوم بإستدعاء هذه الوحدة النمطية عند فتح ملف الواجهة

حاول تحذف الجدول tbl2 و الحقل Age  من الجدول tbl1 من الملف db و شغل الملف programme  ثم أعد فتح ملف db سوف تجد البرنامج قد أضاف الجدول و الحقل تلقائيا.

 

update-db.rar

  • Like 3
قام بنشر

عمل رائع استاذنا @صالح حمادي 

3 ساعات مضت, صالح حمادي said:

و أتمنى من زملائي الأساتذة ممن لديهم طرق أخرى طرحها من أجل إثراء الموضوع.

أيدك أستاذي في هذا الكلام ....

  • Like 1
قام بنشر
2 ساعات مضت, محمد التميمي said:

سؤال: ماذا لو كان التحديث يشتمل على نموزج او تقرير كيف سيكون العمل

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

أما التعديل على قاعدة الخلفية فهو مختلف لأن الجداول بها بيانات و إذا استبدلتها سوف تضيع البيانات

قام بنشر
12 ساعات مضت, صالح حمادي said:

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

أما التعديل على قاعدة الخلفية فهو مختلف لأن الجداول بها بيانات و إذا استبدلتها سوف تضيع البيانات

وصلت الفكرة جزيل الشكر والامتنان

قام بنشر

اهلين استاذ صالح

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

في ٢٢‏/٤‏/٢٠١٩ at 19:45, صالح حمادي said:

فلا تستطيع إعطاءه قاعدة جديدة لأن جميع بياناته مسجلة في تلك القاعدة

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

الان استاذ صالح : هل باضافة جدول جديد وحقل جديد تحل المشكلة ؟ هل حسب فهمي انك تريد ارسال البنية الجديدة الى القاعدة القديمة ؟ لماذا لايكون المسالة فقط جلب البيانات القديمة الى البنية الجديدة ؟

في ٢٣‏/٤‏/٢٠١٩ at 00:08, صالح حمادي said:

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

أما التعديل على قاعدة الخلفية فهو مختلف لأن الجداول بها بيانات و إذا استبدلتها سوف تضيع البيانات

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

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

هذا ونحن معا لنصل لوجهة نظر تخدمنا جميعا وتقبل اجمل تحية :fff::fff:

  • Like 2
قام بنشر
الان, رمهان said:

اهلين استاذ صالح

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

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

الان, رمهان said:

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

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

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

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

الان, رمهان said:

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

نعم أنا أشاطرك الرأي في هذا الأمر لأن هذا ما يحدث معي دائما و التعديل على ملف الواجهة ليس به أي مشكل.

الان, رمهان said:

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

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

أستاذ رمهان: لقد أجريت مقارنة بين نقل البيانات و تحديث القاعدة فوجدت التحديث يأخذ وقتا أقل بكثير من نقل البيانات

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

الان, رمهان said:

هذا ونحن معا لنصل لوجهة نظر تخدمنا جميعا وتقبل اجمل تحية :fff::fff:

إن شاء الله و لي الشرف العظيم أن أتبادل وجهات النظر مع شخصك الكريم.

قام بنشر (معدل)

بصراحة استاذ صالح

اعدت التفكير وفعلا لو المسالة اضافة جدول جديد او اضافة عمود او اعمدة وحذفها .. فعلا اجدى من استيراد الاف السجلات ولكن :

- لابد ان تكون القاعدة مغلقة من الجميع

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

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

اخيرا ممكن نظهر بالتصور التالي : فعلا تعديل القاعدة الخلفية اجدى اذا التعديل بسيط ويكون يدوي وليس اتمته 

تحياتي استاذنا

تم تعديل بواسطه رمهان
  • Like 1
قام بنشر
منذ ساعه, رمهان said:

- لابد ان تكون القاعدة مغلقة من الجميع

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

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

1 ساعه مضت, رمهان said:

اذا التعديل بسيط ويكون يدوي وليس اتمته 

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

ألف شكر أستاذ رمهان على المداخلة الرائعة و المثمرة

2 ساعات مضت, ابا جودى said:

متابع باستمتاع :yes:

راح نجمع التذاكر على المتفرجين هههههههههههه

ألف تحية لك أخي العزيز

قام بنشر

تمام استاذ صالح

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

6 ساعات مضت, صالح حمادي said:

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

شغله عويسه طويله .. هل العائد سيكون مفيد بحجم وقتك وجهدك هنا ... واذا حبيت تطرحه كموضوع تفضل واحنا على اتم الاستعداد في تقديم المساعده

6 ساعات مضت, صالح حمادي said:

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

وكيف سترسل كودك  او الية عمل الكود .. كيف ستصل للزبون 😊 ماهو السيناريو كامل ؟

تحياتي

قام بنشر
الان, رمهان said:

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

معذرة أخي نسيت هذه النقطة

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

و كما تعلم عند تنفيذ الكود إذا لم يجد الكائن يقوم بإنشائه و إن وجده يتخطاه إلى السطر الموالي و هكذا.

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

ربما هي أمر نادر الحدوث لكن يجب أن نحسب له حسابه.

الان, رمهان said:

شغله عويسه طويله .. هل العائد سيكون مفيد بحجم وقتك وجهدك هنا ... واذا حبيت تطرحه كموضوع تفضل واحنا على اتم الاستعداد في تقديم المساعده

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

الان, رمهان said:

وكيف سترسل كودك  او الية عمل الكود .. كيف ستصل للزبون 😊 ماهو السيناريو كامل ؟

لقد قمت بتصميم برنامج للمسابح بعضها لديه الأنترنت و بعضها لا

من لديه الأنترنت أقوم بالإتصال بالكمبيوتر عن بعد و أجري التعديلات بنفسي.

و من لا يملك النت أرسل نسخة الواجهة إلى الزبون عبر البريد الإلكتروني و أطلب منه وضعها مكان النسخة القديمة

و عند تشغيلها يقوم البرنامج بإضافة التعديلات اللازمة في فترة وجيزة دون أن يعلم الزبون بذلك.

  • Like 1
قام بنشر

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

وفقكم الله .. وسددت خطاكم

أسمح لي أستاذي الغالي @صالح حمادي بمداخلة .. متواضعة على قدر فهمي .. في نقطتين هي:

أولاً: لا أخفي عليك .. أني دائما أقوم بتطويرات للقاعدة بشكل مستمر .. وبالاحرى الامر مجهد لمتابعة التغييرات التي تم أضافتها وتطبيقها بالكود .. فما رائيك؟؟

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

 

وشكراً لكم .. على ماتقدمونه من هذا العطاء السخي من علمكم .. ووقتكم

 

قام بنشر
20 ساعات مضت, qathi said:

الامر مجهد لمتابعة التغييرات التي تم أضافتها وتطبيقها بالكود .. فما رائيك؟؟

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

20 ساعات مضت, qathi said:

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

أظن أن كود التحديث أفضل لأنه يأخذ وقتا أقل

بينما الإستيراد يأخذ وقتا أطول إذا كانت القاعدة كبيرة 

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information