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

خربشات في الأكسس

مثبّترائج
بدأه أحمد الحربي في 12 يناير 2006 · 81 رد · 59,842 مشاهدة · في قسم الأرشيف و المواضيع المميزه
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحباً بكم يا سادة يا كرام وسلام من الله عليكم ورحمة منه وبركات

سيداتي أنساتي سادتي ..

لقد كنت أثناء القراءة في الكتب غالباً وفي المنتديات قليلاً ، أقيّد ما أراه فائدة لي في الآكسس وفي البرمجة عموماً وفي قواعد البيانات منطقياً ، المهم تجمّع لدي مجموعة من الفوائد ، فقلت في نفسي لماذا أجعلها حبيسة الأوراق لا أجر ولا حسنة .

لذا فكرتُ أن أضعها هنا فربما استفاد منها عابر سبيل فاهتبلنا منه دعوة في ظهر الغيب نسعد بها في الدنيا والأخرى .

وإليكم هذه الفوائد غير مرتبة ، ومرة فوق ومرة تحت .

---------------------------------------------

* عند إجراء علميات حسابية وكان أحد الحقول فارغاً ، فستكون النتيجة Null ، ولتلافي ذلك استخدم دالة ()Nz لتحويل القيمة في الحقل الفارغ إلى (صفر)

Me.TXT3 = Nz(Me.TXT1, 0) + Nz(Me.TXT2, 0)

* لتعبئة حقول أخرى بعد الخروج من حقل معين ، نستخدم إجراء (قبل التحديث) للحقل المعين

* لإخفاء السجل الخالي (الجديد) في نهاية كل مجموعة سجلات ، ضع الخاصية Allow Additions (السماحة بالإضافة) على No ، لا .

* الإكثار من علامات التعجب (!) والنقط (.) في الإجراء ، يؤدي إلى بطء تنفيذ العمليات البرمجية ، وكلما قلّت كلما كان أسرع ، ومن وسائل تقليلها استخدام المتغيرات ، فمثلاً الإشارة إلى حقل في نموذج فرعي كالتالي :

Me.form2.Form!pathDB

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

* فتح نموذج أو تقرير على سجلات معينة ، بثلاثة طرق :

1- خاصية RecordSource

Me.RecordSource = "select * from Customer Where Country='جدة' "

2- خاصية Filter

Me.Filter = "Country='جدة' "
Me.FilterOn = True

3- من الكائن DoCmd

DoCmd.OpenForm "form1", , , "Country='جدة' "

دمتم بخير ورضا

تم تعديل هذه المشاركة بواسطة أحمد الحربي في 12 يناير 2006 في 23:46

2
#2

الله يجزاك الف خير على هذه النقاط المهمممممممممممممممة فعلا

ريح من الزفرات تعصف في الحشى &&& و ورائها مطر من العبرات

ابو حسن

#3

أستاذي القدير : أحمد ..

نريد المزيد من هذه الخربشات ( جعل الله لك بكل حرف تكتبه حسنه وزادك من فضله ونفع بك الإسلام والمسلمين .. آمين ).

تحياتي ..

#4

الف شكر استاذي أحمد

على هذة الخربشات ;) :rolleyes:

تحياتي

عاشق البيسك :rolleyes:

لا تقول كل ما تعرف .....

ولكن أعرف كل ما تقول

#5

أي خربشات هذي :D

هذه مسطرة بمداد من العلم

أتمنى من الجميع ممن عندهم مثل هذه الخربشات ان يضيفوها هنا للفائدة

وأجزم أن هناك من سيحتاج لها

تقديري وفائق أحترامي لجهدك مشرفنا العزيز أحمد الحربي

#6

اخي احمد

بارك الله فيك وزادك علما وتقوى

خربش على راحتك فنحن في قمة السعادة لهذه الخربشات لان بها فائدات عظيمات . :) :)

1
#7

الموقر .. المبرمج2003

وإياك أخي الحبيب وجزاك خيراً

أستاذنا الموقر .. فهد الدوسري

وإياك ، وسأخربش عليكم هنا

الموقر .. عاشق البيسك

والشكر موصول إليك لحسن ظنك وتشجيعك

الموقر .. أبو عبدالإله

الله يخليك ويحفظك ، هيا خربش معنا

الموقرة الأستاذة .. زهرة

وزادنا جميعاً من الهدى والتوفيق ، لم لا تخربشين معي هنا ، فخربشاتك عظيمات ومهمات

شكراً للجميع ، جُزيتم خيرا وزوجتم بكرا وأُكّلتم طير , ودمت مخربشين أقصد بخير ورضا

#8

* الدوال Functions :

1- لا تنفّذ أمراً وإنما تُعيد قيمة واحدة فقط للإجراء الذي استدعاها .

2- الفائدة منها هو إجراء العمليات الحسابية وغير ذلك وإنجازها .

3- قد تحتوي على وسائط يمرره إليها الإجراء الذي استدعاها .

4- عند الانتهاء من العمليات التي أنجزتْها الدالة يجب إعادة قيمة للدالة باسمها

مثال :

Function Total(intNo As Integer)
Total = intNo + 20
End Function

فنشير للدال السابقة كالتالي :

Private Sub أمر10_Click()
Me.TXT2 = Total(5)
End Sub

* لعرض مربع رسالة بخصائص محددة كعرض (نعم ، لا ) (OK , cancel) ... الخ :

نضع في كائن الوحدة النمطية القياسية الدالة التالية :

Public Function Confirm(Message As String) As Boolean
Dim choise As Byte
Dim conappname As String
conappname = "الفريق العربي للبرمجة "
choise = MsgBox(Message, vbQuestion + vbOKCancel, conappname)
If choise = vbOK Then
    Confirm = True
Else
    Confirm = False
End If
End Function

ثم نحيل إليها نص الرسالة فقط :

Call Confirm(" أنت صاحي والا نايم")
Call Confirm("  طيب أصح يا روح ماما")
#9

استاذي احمد

بوجد لدي مجلد كامل كنت قد وضعته وقمت بتقسيمه وترتيبه حسب الفئات ( الجداول - الاستعلامات - النماذج - التقارير - الصفحات - الماكروات - الوحدات النمطيه ) وبه حاليا حوالي 10000 عشرة الاف خربوشه خفيفه ولكني انتظر متى تنتهي لأبدأ في خرابيشي لانه من تمام وكمال الادب ان لا اقاطعك في خربشاتك . :) :) وحتى اكمل ما بداته انت فلا يمكن ان نكتب على تردد واحد وكود واحد فأكمل على بركة الله واذا توقفت فسأكمل الباقي بأشياء جديده .

تلميذتكم

زهره

تم تعديل هذه المشاركة بواسطة zahrah في 14 يناير 2006 في 02:01

#10

أستاذي : أحمد وفقك الله .

أرجو أن تكثر من التوضيح والتفصيل الممل في ( الدوال Functions )..

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

تحياتي ..

#11

وااااااااااو

تعجبني الخربشة ويا ما أنطقيت عليها حتى ايام الدراسة

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

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 14 يناير 2006 في 21:30

#12

لك الله يا أستاذة زهرة .. قمة في العلم ، قمة في الخلق ، بورك فيك ، بل لنتشارك ولنخربش سوياً ، وإن كنت مصرة على رأيك فسأعجل بما عندي إن شاء الله تعالى .

---------

مبدعنا الأستاذ فهد .. سأفعل إن شاء الله

--------

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

لعل كثيراً من الإخوة هنا لا يعرفون هذا الرجل حق المعرفة ، فهو خبير جداً في آكسس وفي البرمجة وفي تصميم قواعد البيانات

حياك الله وبياك ، هيا ، دعك من التواضع وخربش معنا

دمت مخربِشين ومخربَشين وبخير ورضا

#13

الأخ أحمد

أحبكم الله كما أحببتمني فيه

لا لا استاذ أحمد الله يصلحك لا يسمعونك بعدين يقولون خبير وأتورط أنا لا زلت طالباً من طلابكم وإطراءك علينا هو التواضع .

إذن فلنرتب المخربشين على النحو كالتالي :

أولاً : الأخ الأستاذ / أحمد الحربي

ثانياً : الأخت الأستاذة / زهره العبدالله

ثالثاً : من يريد أن يشارك

رابعاً : أتابع بما عندي

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

-waf

#14

*--------*

تزامن النماذج :

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

لدينا جدول العملاء(والمفتاح الأساسي باسم ID_Cust) مرتبط بجدول مبيعاتهم (ومفتاح الربط مع جدول العملاء باسم linkID) (واحد لكثير) ، ولدينا الأتي :

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

2- نموذج باسم frmDitiels يعرض تفاصيل مبيعاتهم .

فنريد عند فتح نموذج frmCust فتح نموذج frmDitiels ليعرض النموذج الثاني مبيعات العميل الذي عليه التركيز في النموذج الأول ، وعند الانتقال إلى العميل الثاني يتم عرض مبعيات العميل الثاني وهكذا .

الطريقة كالتالي :

1- نضع في حدث (عند الفتح) للنموذج frmCust إجراءً يقوم بفتح النموذج frmDitiels :

Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "frmDitiels "
End Sub

2- نضع في حدث (في الحالي) للنموذج frmCust إجراءً يقوم بتصفية النموذج frmDitiels على مبيعات العميل الذي عليه التركيز :

Private Sub Form_Current()
Forms!frmDitiels.Form.Filter = "linkID=" & Me.ID_Cust
Forms!frmDitiels.Form.FilterOn = True
End Sub

3- نضع في حدث (عند الإغلاق) للنموذج frmCust إجراءً يقوم بإغلاق النموذج frmDitiels :

Private Sub Form_Close()
DoCmd.Close acForm, "frmDitiels "
End Sub

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

*--------*

لإغلاق جميع النماذج المفتوحة حتى لا تستهلك شيئاً من الذاكرة ، استخدم نسخة كائن frm للمجموعة Forms في حلقة For Each ...... Next كالتالي :

Dim frm As Form
For Each frm In Forms
    DoCmd.Close acForm, frm.Name
Next

- أي نموذج مفتوح ينضم للمجموعة Forms .

*--------*

تحديد نوع بيانات المتغير يسرع من عملية التنفيذ ، أما إذا لم تحدد نوع بيانات المتغير فإن آكسس سيقوم بمحاولة معرفة نوعه قبل أن يصدر موافته أو فشله .

دمتم بخير ورضا

تم تعديل هذه المشاركة بواسطة أحمد الحربي في 16 يناير 2006 في 01:20

#15

العزيز الأستاذ مصلح

ما شهدنا إلا بما علمنا

خربشوا يا جماعة الربع ويا ربع الجماعة

#16

شكراً جزيلاً أستاذي : أحمد .

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

أستاذتنا الغالية : زهره .. كما قال الأستاذ أحمد لنخربش معاً .

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

سوف يتم تثبيت هذا الموضوع .

تحياتي ..

تم تعديل هذه المشاركة بواسطة فهد الدوسري في 16 يناير 2006 في 17:56

#17

اعزائي الكرام

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

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

كما لا يسعني ان اتقدم بالشكر الجزيل لمبدعنا واستاذنا الكبير فهد الدوسري والعملاق الذي لا تعرفونه استاذ الكل مصلح الحريصي .

وإن شاء الله نقوم بإستقطاب بقية عمالقة الاكسيس مثل البروفيسور ابو هادي وابن مسقط ( عادل القاسمي ) سابقا :)

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

1. لكي تحصل على سرعة في اداء قاعدة البيانات استخدم الخط ( تهامه ) Tahoma السر في هذا ان قاعدة البيانات اكسيس مبرمجة على اساسه علما بأنه اخف الخطوط .

2. اذا قمت بإنشاء نموذج مبني على جدول احذر ان تقوم بحذف التسمية الخاصة به ومن ثم بعمل مربع تسمية جديد خاص بك والسر في ذلك ان الارتباط او الاقتران بين مربع التسمية ومربع النص سيكون له اثر جانبي على النموذج وهذا ما ندعوه بالاهتزاز لكائنات النموذج ( Flicker with tab controls ) فترى بمجرد تحريك الماوس على النموذج يظهر كأن به كهرباء او حدثت له صاعقة .

ولحل هذه المشكلة هناك طريقتين :

الاولى يدوية

والثانية برمجيا

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

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

4. اثناء تصميمك للجدول حاول بقدر المستطاع كتابة الحقول باللغة الانجليزية حتى لو كانت عربية مثل ( City ) وتعني مدينة بالعربي وتكتب ( Madenh ) اهم شيئ تكون انجليزية حتى لا تتبذهل اثتاء كتابة التعابير سواء في الاستعلامات او النماذج او الوحدات النمطية او الماكرو . ايضا هناك نقطة هامه هي عدم ترك مسافات اثناء تسمية الحقول مثل ( Frist Name ) ( الاسم الاول ) بل ضع بدل المسافة شرطة سفليه مثل ( Frist_Name ) ( الاسم_الاول ) والسبب في ذلك ان بعض الاكواد لا تتعرف على المسافات وتحدث اخطاء كثيره ايضا عندما تريد تكبير القاعدة الى SQL فلن تتم عملية الانتقال اليها طالما هناك مسافات .

5. حاول دائما الابتعاد عن الزخرفه والزبرقة الزائدة التي ليس لها داعي في تصميم النماذج فتخيل قاعدة بيانات فارغة وحجمها 50 ميقا لانها مليئة بالصور في النماذج سواء على سطح النموذج او الازرار ولكن استخدم دائما الالوان القياسية .

6. لا تترك اكواد في محرر الفيجول بيسك ليس لها ارتباط بحدث معين فمثلا قمت بعمل زر امر اضافة ثم قمت بحذف هذا الزر ولكن بقى كود الاضافة في محرر الفيجول بيسك لم يتم حذفه فلابد من حذفه يدويا لانك لو حاولت تحويل قاعدة البيانات MDB الى MDE فلن تستطيع حتى تقوم بحذف الاكواد الزائده .

7. عندما تريد عمل قاعدة بيانات ضخمه حاول قبل البدء ان تقوم بالتخطيط على الورق وتحليل قاعدة البيانات نظريا او استشر من هم اعلى منك خبره لعملية النحليل وبعد الانتهاء يمكنك البدء في التصميم .

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

9. من غرائب قواعد البيانات التي رأيتها في حياتي قاعدة بيانات وصل حجمها الى 50 ميقا لان بها استعلام تم تكرار المعرف ID المرتبط بجدول اخر بعلاقة واحد الى متعدد ( رأس بأطراف ) قام بعملية التكرار10 مرات لكل سجل يتم كتابته . لذا فقد تم التصحيح بإزالة المعرف الآخر من الاستعلام وعادت القاعدة الى حجمها الطبيعي 300 كيلو بايت فقط .

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

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

12. استخدم دائما دالة واحدة لحدث معين مثلا حدث الاغلاق فهل من المعقول ان تكتب في كل نموذج امر الاغلاق DoCmd.Colse ولكن اعمل دالة واحده ()Close ومن ثم قم بإستدعائها من اي مكان لانه كل ما قلت الاكواد في الوحدات النمطية كان افضل لقاعدة البيانات .

الى هنا انتهينا من النصائح الاساسية التي يجب على كل مصمم قاعدة بيانات الالمام بها .

فاصل ... ونواصل ... .

تم تعديل هذه المشاركة بواسطة zahrah في 17 يناير 2006 في 17:02

1
#18

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

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

اولا لنعرف السبب .

ان الارتجاف او الاهتزاز هو ناتج عن فقد اقتران مربع التسمية بمربع النص التابع له لهذا يحدث ما يسمى بالـ Flicker with tab controls

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

لهذا نتبع هذه الطريقة :

1. قم بإنشاء وحدة نمطية جديده .

2. قم بنسخ هذا الكود للوحدة النمطية ومن ثم قم بحفظها .

Function ConvertLabelOnTabPage(strFormName As String, _
        Optional bSaveAndClose As Boolean, Optional bHidden As Boolean)
'الغرض : تغيير التسميات الغير مرتبطة بمربعات النص في النموذج 
'لاصلاح مشكلة الاهتزاز في سمات الويندوز اكس بي    
    Dim frm As Form
    Dim ctl As Control
    Dim strName As String
    Dim strCaption As String
    Dim bytBackStyle As Byte
    Dim bChanged As Boolean
    Const strcQuote = """"
  'افتح النموذج في وضع التصميم  
        DoCmd.OpenForm strFormName, acDesign, _
        windowmode:=IIf(bHidden, acHidden, acWindowNormal)
    Set frm = Forms(strFormName)
    'البحث عن مربعات التسميات العائدة لمربعات النص
    'Find the labels whose parent is a tab page.
    For Each ctl In frm.Controls
        If ctl.ControlType = acLabel Then
            If ParentIsTabPage(ctl) Then
                bChanged = True
                strName = ctl.Name                      'اسم مربع النص الذي فقد التسمية
                strCaption = ctl.Caption              'تسمية مربع النص
                bytBackStyle = ctl.BackStyle    'برنامج الاكسيس لا يمكنه عمل هذا 
                Debug.Print strFormName & "." & strName
                'Convert it to a text box.
                ctl.ControlType = acTextBox
                'Set the text box properties.
                With frm.Controls(strName)          'اسماء مربعات النص لغير محدد
                    .ControlSource = "=" & strcQuote & _
                        Replace(strCaption, strcQuote, strcQuote & strcQuote) & strcQuote
                    .Enabled = False
                    .Locked = True
                    .BackStyle = bytBackStyle
                End With
            End If
        End If
    Next
    
    Set ctl = Nothing
    Set frm = Nothing
    If Not bChanged Then
        DoCmd.Close acForm, strFormName, acSaveNo
    ElseIf bSaveAndClose Then
        DoCmd.Close acForm, strFormName, acSaveYes
    End If
End Function

Private Function ParentIsTabPage(ctl As Control) As Boolean
    On Error Resume Next
    ParentIsTabPage = (ctl.Parent.ControlType = acPage)
End Function

Function FixAllForms()
    'الغرض : تشغيل تحويل مربعات التسميات جميعها في قاعدة البيانات
    'تحذير : قم بحفظ قاعدة البيانات قبل عمل هذا الاجراء
    Dim accobj As AccessObject
    For Each accobj In CurrentProject.AllForms
        Call ConvertLabelOnTabPage(accobj.Name, True, True)
    Next
End Function

3. لاجراء اختبار وانت داخل الوحدة النمطية من نافذة Immediate التي تستطيع الوصول لها بضغط المفاتيح Ctrl+G من لوحة المفاتيح وكنابة هذا الامر

? ConvertLabelOnTabPage("MyForm")

MyForm اسم النموذج الخاص بك

ثم اضغط Enter

4. ستظهر لك في النافذة السفلية جميع مربعات التسميات التي تم تحويلها وارتباطها بمربعات النص .

5. لاصلاح جميع مربعات التسميات في جميع النماذج في قاعدة البيانات استخدم هذا الامر بدلا عن السابق

 ? FixAllForms()

ملاحظة : يجب اخذ نسخة احتياطية لقاعدة بياناتك قبل هذه العملية

6. لاصلاح مجموعة الخيار option groups لمربعات النص استبدل هذا الكود في دالة () ParentIsTabPage

Private Function ParentIsTabPage(ctl As Control) As Boolean
    On Error Resume Next
    ParentIsTabPage = ((ctl.Parent.ControlType = acPage) Or _
        (ctl.Parent.ControlType = acOptionGroup))
End Function

تم تعديل هذه المشاركة بواسطة zahrah في 17 يناير 2006 في 16:47

#19

كيف تحسب العمر برمجيا ؟

يتم حساب العمر بين تاريخين التاريخ الاول هو الذي تضعه في مربع النص ويكون تنسيقه ( تاريخ / وقت ) ( Date \ Time ) اما مربع النص الاخر فهو مربع نص غير منضم لاظهار النتيجه حسب الطريقة التالية .

1. لنفرض انك انشأت مربع نص وليكن مثلا ( تاريخ_الميلاد ) في جدول الان قم بعمل نموذج مبني على الجدول بهذا الحقل

2. انشئ ايضا مربع نص غير منظم في النموذج وليكن مثلا ( العمر ) AGE

3. انشئ وحدة نمطية جديده وضع بها هذا الكود

Option Explicit
'*************************************************************
' Age()   اسم دالة السنوات        
'*************************************************************
Function Age (varBirthDate As Variant) As Integer
   Dim varAge As Variant

   If IsNull(varBirthdate) then Age = 0: Exit Function

   varAge = DateDiff("yyyy", varBirthDate, Now)
   If Date < DateSerial(Year(Now), Month(varBirthDate), _
                        Day(varBirthDate)) Then
      varAge = varAge - 1
   End If
   Age = CInt(varAge)
End Function

'*************************************************************
' AgeMonths()   اسم دالة الشهر        
'*************************************************************
Function AgeMonths(ByVal StartDate As String) As Integer

   Dim tAge As Double
   tAge = (DateDiff("m", StartDate, Now))
   If (DatePart("d", StartDate) > DatePart("d", Now)) Then
      tAge = tAge - 1
   End If
   If tAge < 0 Then
      tAge = tAge + 1
   End If

   AgeMonths = CInt(tAge Mod 12)

End Function

لاجراء اختبار وانت داخل الوحدة النمطية من نافذة Immediate التي تستطيع الوصول لها بضغط المفاتيح Ctrl+G من لوحة المفاتيح وكنابة هذا الامر لمعرفة عدد السنوات

?Age("22/10/1990")

سيظهر لك عدد السنوات

كرر الخطوة السابقة للاشهر واكتب

?AgeMonths("22/10/1990")

بعد التأكد من عمل الدالة نريد استخدامها في مربع النص الغير منظم

نضعها هكذا

=Age([AGE]) & " سنه " & AgeMonths([AGE]) & " شهر"

حيث ان اسم مربع النص بين الاقواس هو AGE تستطيع استبداله بإسم مربع النص الخاص بك

تم تعديل هذه المشاركة بواسطة zahrah في 17 يناير 2006 في 16:43

1
#20

هذه الخربشات لا خربشاتنا ، هكذا هكذا وإلا فلا

خربشوا يا جماعة الربع

في اللغة يقال خربش يخربش خربشة أبدع يبدع إبداعاً

دمتم مخربشين

#21

الأستـاذ : فهد

الأستـاذ : أحمد

الأستاذة : زهرة

شكراً على الترحيب والإطراء .

إي ظهرت المواهب ولإبداعات ما شاء الله تبارك الله

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

هذا الموضوع بالذات وضعت له اختصار على سطح مكتبي وهو أول موضوع أتابعة بهذا الطريقة على الانترنت منذ 8 سنوات تقريباً.

شرح رائح ودرر ثمينة من الأستاذين أحمد وزهرة .

اسأل الله بأن يجزيكما ومن يشارك في هذا الموضوع بكل حرف حسنة ومحو سيئة أنه السميع المجيب.

#22

الدالة الغبية والدالة العبقرية

الدالة () DLookup والدالة () ELookup

هل تصدق ان هناك دالة غبيه ةقد تستغرب ان اقول لك انها دالة () DLookup والكل منا يعرفها ويعرف استخداماتها فهي ببساطة تعيد او تسترجع قيمه واحدة من الجدول .

عيوبها :

1. تعيد اول قيمة فقط تم وضعها في الدالة في عملية البحث .

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

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

4. اداء هذه الدالة سيئ للغاية فهو لا يقوم بمسح ما تم البحث عنه سابقا ويفترض ان تكون القيم خالية بعد عملية كل بحث .

5. يا عيني على الاخطاء والرسائل التي تحبها من الاكسيس عندما تكون القيم خاليه .

امثلة على الدالة الغبية :

DLookup.rar

الدالة () ELookup العبقرية

هل احد منكم سمع عن هذه الدالة ( دالة جديده تم اختراعها )

لنرى إمكانات هذه الدالة

1. قمة في الاداء والابهار والقوة والمتانة والمرونه ( حشا ما صارت دالة هذي طيارة نفاثة ) .

2. تسمح لك بتحديد اي نوع من البيانات ولا تتقيد يحقول معينه . ( شايفه يا دي لوك اب وانتي ما غير قيمه واحده وكمان غلط ) .

3. تسمح لك بإستخدام الاقل MIN والاعلى MAX من القيم ( مرونه اكثر من كذا ما فيش ابدا ) .

4. بعد عملية البحث والبدء بعملية استخدام جديده تجد القيم خالية وجاهزة لتقبل اي امر ( عشرة على عشرة ) .

5. اسرع من الدالة () DLookup بعشر مرات ( ما قلت انها طياره نفاثه بس ما توحون الحكي ) .

6. قد ترغب في تعديل مسار البحث قبل استعمال الدالة فتستطيع ذلك بدون ظهور رسائل MsgBox لكل صف . ( منتهى الهدوء روحي يا شيخة ربنا يوفقك ) .

7. تقوم هذه الدالة بتمييز وتحسس ومعرفة ان هذا الحقل Zzero-length( طول صفري ) او خالي من البيانات Null ( داله مفتحه قوي ) .

8. اذا استخدمت في الاستعلامات فأنظر الى النتائج الباهره حتى لو استخدمت معها اربعة معايير مختلفه .

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

امثلة على طريقة استخدامها

1. ايجاد القيمة الاخيرة متضمنة الـ DESC

ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC")

اذا رغبت في اضافة حقول اضافية قم بالاضافة ولا يهمك شيئ ابدا

2. ايجاد القيم الاقل الغير خالية Null بإستعمال المعايير

ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname")

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

Function ELookup(Expr As String, Domain As String, Optional Criteria, Optional OrderClause)
On Error GoTo Err_ELookup
     '   DAO  ملاحظة: تحتاج الى مرجع مكتبة 
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSql As String

    'بناء جملة الاستعلام
    strSql = "SELECT TOP 1 " & Expr & " FROM " & Domain
    If Not IsMissing(Criteria) Then
        strSql = strSql & " WHERE " & Criteria
    End If
    If Not IsMissing(OrderClause) Then
        strSql = strSql & " ORDER BY " & OrderClause
    End If
    strSql = strSql & ";"

    'البحث عن القيم
    Set db = DBEngine(0)(0)
    Set rs = db.OpenRecordset(strSql, dbOpenForwardOnly)
    If rs.RecordCount = 0 Then
        ELookup = Null
    Else
        ELookup = rs(0)
    End If
    rs.Close

Exit_ELookup:
    Set rs = Nothing
    Set db = Nothing
    Exit Function
  'zahrah
Err_ELookup:
    MsgBox Err.Description, vbExclamation, "ELookup Error " & Err.Number
    Resume Exit_ELookup
    End Function

تم تعديل هذه المشاركة بواسطة zahrah في 17 يناير 2006 في 18:45

#23
أحمد الحربي كتب:

* الدوال Functions :

مثال :

Function Total(intNo As Integer)
Total = intNo + 20
End Function

فنشير للدال السابقة كالتالي :

Private Sub أمر10_Click()
Me.TXT2 = Total(5)
End Sub

[

ممكن شرح الدالة وطريقة استدعائها

بارك الله فيكم

#24

ما هذا الإبداع استاذه زهره . ما شاء الله

كنت ناوي أخربش معاكم بس بعد هذه الخربشات ( استحيت أحط اللي عندي ) نقطه في بحركم .. زادكم الله علماً .

تحياتي ..

#25
zahrah كتب:
12. استخدم دائما دالة واحدة لحدث معين مثلا حدث الاغلاق فهل من المعقول ان تكتب في كل نموذج امر الاغلاق DoCmd.Colse ولكن اعمل دالة واحده ()Close ومن ثم قم بإستدعائها من اي مكان لانه كل ما قلت الاكواد في الوحدات النمطية كان افضل لقاعدة البيانات .

اتمنى يكون لها شرح مفصل

بارك الله فيك

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