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

حوار مع فهد الدوسري


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

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

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

طرفا الحوار هما :-

1- محمد : وهو المبتدئ في الأكسس .

2- فهد الدوسري .

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

ملحوظة مهمة جداً جداً :

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

( سوف أضع كل حوار في رد منفصل حتى لا تتشعب الأفكار وتضيع وأرحب بأي إضافة أو تعديل من أي عضو من الأعضاء )

بسم الله نبدأ .. وعليه نتوكل .. وبه نستعين .

تم تعديل بواسطه محمد طاهر
رابط هذا التعليق
شارك

حوار 1

= محمد : كيف أعرف عدد السجلات من خلال شاشة النموذج ؟

= فهد الدوسري : لكي تعرف عدد السجلات قم بما يلي :-

- ضع مربع نص غير منظم في النموذج .

- ضع في مصدر عنصر التحكم لهذا الحقل الكود التالي ..

=Count([ID])
بعتبار أن اسم حقل رقم الموظف مثلا لديك هو ID أما إذا أردت معرفة عدد السجلات بدون الاعتماد على أي حقل فضع نجمة بدلاً من اسم الحقل
=Count(*)

تم تعديل بواسطه فهد الدوسري
رابط هذا التعليق
شارك

حوار 2

= محمد : عرفت من خلال الكود الذي ذكرته في الحوار 1 عدد السجلات لدي ولنفرض أنها كانت (20) سجلاً .. هل أستطيع معرفة رقم السجل الحالي من بين هذه السجلات ؟ .

توضيح للسؤال : عدد السجلات (20) ورقم السجل الحال مثلاً (15) أو ( 11 ) وهكذا .

= فهد الدوسري : لكي تعرف ذلك أعمل ما يلي :-

- ضع مربع نص غير منظم في النموذج .

- ضع في مصدر عنصر التحكم لهذا الحقل الكود التالي ..

=[CurrentRecord]

رابط هذا التعليق
شارك

حوار 3

= محمد : كيف أستطيع أن أجعل الساعة في شاشة النموذج يتم تحديثها أولاً بأول ؟

= فهد الدوسري : إذا أردت ذلك فعمل ما يلي :

- ضع مربع نص غير منظم في النموذج وسمه مثلاً tim11

- ضع في مصدر عنصر التحكم لهذا الحقل الكود التالي ..

=Time()
- إذهب إلى خصائص النموذج ومن ثم حدث ومن ثم الفاصل الزمني لعداد الوقت وضع فيه الرقم 1000 وهذا يعني ثانية واحده . - إذهب عند عداد الوقت ثم أختر إجراء حدث ثم أضغط على الزر ذو الثلاث نقط ... ليفتح لك محرر الفيجول بيسك وضع فيه الكود التالي ..
Me.tim11.Requery

وبذلك يتم تحديث الوقت أولاً بأول .

رابط هذا التعليق
شارك

حوار 4

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

= فهد الدوسري : يمكن ذلك من خلال الآتي : -

- ضع مربع نص غير منظم في النموذج وسمه مثلاً dat11

- إذهب إلى خصائص النموذج ومن ثم حدث ثم عند الفتح وضع فيه الكود التالي ..

dat11 = Format(Date, "yyyy/mm/dd")

رابط هذا التعليق
شارك

حوار 5

= محمد : كيف أستطيع أن أخفي أحد مربعات النص في النموذج ؟

= فهد الدوسري : لنفترض أن اسم مربع النص لديك هو text2 وتريد إخفائه عند ضغط الزر مثلاً .

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

Me.text2.Visible = False
ولكي نقوم بإظهار الحقل استخدم الكود التالي ..
Me.text2.Visible = True

رابط هذا التعليق
شارك

حوار 6

= محمد : أحياناً أضع حدث في التقرير (عند عدم وجود بيانات) لكي لا يتم فتح التقرير أو طباعته وهو فارغاً والحدث الذي أستخدمه هو ..

MsgBox "لا توجد بيانات في التقرير", , "تنبيه"
DoCmd.CancelEvent
ولكن عند خروج هذه الرسالة تخرج رسالة أخرى بعدها مفادها أنه تم إلغاء الأمر فهل أستطيع التخلص من هذه الرسالة ؟ = فهد الدوسري : نعم بإمكانك التخلص منها .. في حدث عند النقر للزر الذي يقوم بفتح هذا التقرير قم بوضع هذا الكود قبل أمر فتح التقرير وبذلك تتخلص من هذه الرسالة والكود هو ..
On Error Resume Next

وهذا الكود نستخدمه إذا أردنا التخلص من رسائل الخطأ الموجودة في الأكسس .

رابط هذا التعليق
شارك

حوار 7

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

= فهد الدوسري : نعم يمكنك إلغاء هذه الرسائل عن طريق الأكسس كما يلي : -

- من شريط الأدوات الخاص بالأكسس نضغط ( أدوات ) .

- ثم خيارات .

- ثم (تحرير/ بحث).

- ثم نزيل علامة الصح من أمام ( الاستعلامات الإجرائية). ثم موافق.

هذه الطريقة خاصة بالأوفيس أكس بي .

طبعاً هذه الطريقة تمنع رسائل الاستعلامات في جهازك فقط يعني إذا نقلت برنامجك إلى جهاز آخر فسوف تعمل رسائل الاستعلامات الإجرائية لذلك استعمل تعطيل الرسائل عن طريق الكود كما يلي : -

لنفترض أنك تريد تشغيل استعلام تحديث أو استعلام حذف وليكن اسمه مثلا Q1

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

DoCmd.SetWarnings False
DoCmd.OpenQuery "Q1", acNormal, acEdit
DoCmd.SetWarnings True
فبوضع هذا الكود قبل فتح استعلام التحديث أو الحذف يتم إلغاء الرسائل والكود هو ..
DoCmd.SetWarnings False
أما هذا الكود فهو يعيد عمل الرسائل .
DoCmd.SetWarnings True

رابط هذا التعليق
شارك

حوار 8

= محمد : لدي حقلين الأول N11 والثاني N12 أريد عندما أكتب في الحقل الأول رقم 1 يكون في الحقل الثاني ( ذكر ) وإذا كتبت رقم 2 يكون في الحقل الثاني ( أنثى ) فما الطريقة ؟

= فهد الدوسري : أكتب في مصدر عنصر التحكم الخاص بالحقل N12 الكود التالي ..

=Switch([N11]=1;"ذكر";[N11]=2;"أنثى")
أو بإمكانك استخدام هذا الكود أيضاً ..
=Choose([N11];"ذكر";"أنثى")

وهناك طرق أخرى لعمل ذلك .

رابط هذا التعليق
شارك

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

=================================

حوار 9

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

= فهد الدوسري : لنفترض أن لديك من ضمن حقول هذا التقرير والنموذج حقل نوعه رقمي واسمه ID وحقل آخر نوعه نصي واسمه Name1 لكي نقوم بالربط بين النموذج والتقرير عن طريق أحد هذين الحقلين سواء الحقل الرقمي أو الحقل النصي فنعمل ما يلي :-

- ضع في حدث عند النقر للزر الذي في النموذج والذي من خلاله يتم فتح تقرير ReNeme الكود التالي ..

- لمعاينة التقرير ..

إذا أردت عمل ذلك على حقل نوعه رقمي واسم الحقل ID فضع الكود التالي ..

Dim stLinkCriteria As String
stLinkCriteria = "[ID] =" & Me![ID]
DoCmd.OpenReport "ReNeme", acViewPreview, , stLinkCriteria
وإذا أردت عمل ذلك على حقل نوعه نصي واسم الحقل Name1 فضع الكود التالي ..
Dim stLinkCriteria As String
stLinkCriteria = "[Name1]=" & "'" & Me![Name1] & "'"
DoCmd.OpenReport "ReNeme", acViewPreview, , stLinkCriteria
- أما لطباعه التقرير .. إذا أردت عمل ذلك على حقل نوعه رقمي واسم الحقل ID فضع الكود التالي ..
Dim stLinkCriteria As String
stLinkCriteria = "[ID] =" & Me![ID]
DoCmd.OpenReport "ReNeme", acViewNormal, , stLinkCriteria
وإذا أردت عمل ذلك على حقل نوعه نصي واسم الحقل Name1 فضع الكود التالي ..
Dim stLinkCriteria As String
stLinkCriteria = "[Name1]=" & "'" & Me![Name1] & "'"
DoCmd.OpenReport "ReNeme", acViewNormal, , stLinkCriteria

أرجو أن يكون ذلك واضحاً لك .

رابط هذا التعليق
شارك

حوار 10

= محمد : تعلمت في حوار رقم 3 كيف أعمل تحديث للوقت فما هي صيغة الوقت بـ (12) ساعة وصيغته بـ (24) ساعة ؟

= فهد الدوسري : بالنسبة لصيغة الوقت بـ12 ساعة كالتالي :-

Me.TxtTime = Time()
أما صيغته بـ 24 ساعة فهو كالتالي :-
Me.TxtTime = Time$()

رابط هذا التعليق
شارك

حوار 11

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

= فهد الدوسري : للتاريخ الهجري استعمل الكود التالي :-

Calendar = vbCalHijri
TxtTDateHijri = Date
TxtTDateHijri = Format(TxtTDateHijri, "yyyy/mm/dd") & " هـ"
أما للتاريخ الميلاد استعمل الكود التالي :-
Calendar = vbCalGreg
TxtTDateGreg = Date
TxtTDateGreg = Format(TxtTDateGreg, "yyyy/mm/dd") & " م "-

رابط هذا التعليق
شارك

حوار 12

= محمد : هناك أوامر للتراجع عن فعل شيء أو كتابة كلمة وهناك أوامر للإلغاء هل لك أن تذكر لي هذه الأوامر أو بعضها ؟.

= فهد الدوسري : سوف أذكر لك جميع الأوامر التي أعرفها أنا شخصياً وربما هناك غيرها تخفى علي وبإمكانك تجربتها كل واحد على حده لمعرفة ما يناسبك وهي كالتالي :-

DoCmd.CancelEvent
Cancel = -1
SendKeys "{ESC}"
SendKeys "{ESC}{ESC}"
SendKeys "{BS}"
Me.Undo

رابط هذا التعليق
شارك

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

التاريخ الميلادي والهجري معاً.rar

رابط هذا التعليق
شارك

حوار 13

= محمد : كيف أستطيع أن أجعل النموذج يملئ كامل الشاشة ؟

= فهد الدوسري : بعد عمل النموذج الذي تريد ومن خصائص هذا النموذج قم بتعديل الخصائص التالية :

1 - خاصية محددات السجلات ( لا ) .

2 - خاصية أزرار التنقل ( لا ) .

3 - خاصية منبثق ( نعم ) .

4 - خاصية نمط الحدود ( بلا ) .

ثم ضع هذا الكود (عند التحميل) للنموذج :

DoCmd.Maximize

وبهذه الطريقة سوف يكون النموذج على كامل الشاشة .

رابط هذا التعليق
شارك

حوار 14

= محمد : هناك مجموعة من دوال الأكسس لها فائدة كبيرة واستخدام متكرر ومنها على سبيل المثال الدالة DLookup ولكني للأسف لا أعرف طريقة استخدامها فهل لك أن تفيدني في ذلك وكيف استخدمها بدون شرط وبشرط وبشرطين ؟

= فهد الدوسري : هذه الدالة هي أحد دوال ( تجميع المجال ) وهي مجموعة دوال ومن هذه الدوال الدالة DLookup ولها عدة استخدامات سوف أذكر لك ما أعرفه عنها بحسب خبرتي وربما لها أكثر من مجال أو طريقة أرجو أن يفيدنا عنها من يعرفها لنستفيد جميعاً .

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

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

حقل B1 نوعه رقم يسجل فيه رقم الموظفين . ( 1 و 2 و 3 و 4 و 5 إلخ..) .

حقل B2 نوعه نص يسجل فيه أسماء الموظفين . ( فارس و مراد و حمد إلخ..).

حقل B3 نوعه نص يسجل فيه مراتب الموظفين . ( الأولى و الثانية و الثالثة إلخ..).

حقل B4 نوعه رقم يسجل فيه أرقام وظائفهم . ( 1480 و 145 و 851 إلخ..).

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

أولاً : -

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

M1 ويمثل (رقم الموظف) .

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

M2 ويمثل (اسم الموظف) .

M3 ويمثل ( مرتبة الموظف) .

M4 ويمثل ( رقم وظيفة الموظف ) .

ثانياً : -

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

الزر الأول يكون عنوانه (1 بدون شرط).

الزر الثاني يكون عنوانه ( 2 مع الشرط الرقمي).

الزر الثالث يكون عنوانه ( 3 مع الشرط النصي) .

الزر الرابع يكون عنوانه ( 4 مع الشرطين ) .

ثالثاً : -

نأتي الآن لبناء استخدامات الدالة في حدث عند النقر لكل زر من الأزرار الأربعة طبعاً بعد توفر شروط الدالة والتي سوف أخبرك عنها فيما يلي :-

الزر الأول :-

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

نريد خروج اسم الموظف في حقل m2 والذي يمثل أسماء الموظفين كما أسلفنا .

m2 = DLookup("[B2]", "A1")
الزر الثاني:- ( يخبرنا عن اسم الموظف في جدول A1 بناءاً على الرقم الذي ندخله في حقل رقم الموظف .. إذن يجب إدخال رقم الموظف في حقل رقم الموظف ثم الضغط على الزر لنعرف اسم الموظف الذي يحمل هذا الرقم فهذا شرط من شروط عمل الدالة أي أنك لو ضغطت على الزر دون كتابة الرقم فلن يخرج لك شيء كما فعلنا مع الزر الأول ولو أدخلت اسم الموظف لتعرف رقمه فلن تعمل الدالة لأننا الآن نعمل مع الشرط الرقمي أي رقم الموظف فقط ) ويتم ذلك عن طريق الكود التالي في حدث عند النقر للزر وهذا الكود هو ( الشرط الرقمي ) ..
m2 = DLookup("[B2]", "A1", "[B1]=  [m1]")
الزر الثالث:- ( يخبرنا عن رقم الموظف في جدول A1 بناءاً على الاسم الذي ندخله في حقل اسم الموظف .. إذن يجب إدخال الاسم في حقل اسم الموظف ثم الضغط على الزر لنعرف رقم الموظف الذي يحمله هذا الاسم فهذا شرط من شروط عمل الدالة أي أنك لو ضغطت على الزر دون كتابة الاسم فلن يخرج لك شيء كما فعلنا مع الزر الأول ولو أدخلت رقم الموظف لتعرف اسمه فلن تعمل الدالة لأننا الآن نعمل مع الشرط النصي أي اسم الموظف فقط ) ويتم ذلك عن طريق الكود التالي في حدث عند النقر للزر وهذا الكود هو (الشرط النصي ) .. لاحظ اختلاف بناء الكود والفرق بين الرقمي والنصي في الكود التالي .. نريد خروج رقم الموظف في حقل m1 والذي يمثل أرقام الموظفين كما أسلفنا .
m1 = DLookup("[B1]", "A1", "[B2]='" & [m2] & "'")
الزر الرابع:- ( يخبرنا عن اسم الموظف في جدول A1 بناءاً على مرتبته الذي ندخلها في حقل المرتبة وبناءاً على رقم وظيفته الذي ندخله في حقل رقم الوظيفة .. إذن يجب إدخال مرتبة الموظف في حقل المرتبة وكذلك ندخل رقم الوظيفة في حقل رقم الوظيفة ثم الضغط على الزر لنعرف اسم الموظف الذي يحمل هذه المرتبة بهذا الرقم فهذا شرطين يجب توفرهما لتعمل الدالة أي أنك لو أدخلت المرتبة فقط وضغطت على الزر دون كتابة رقم الوظيفة فلن يخرج لك شيء أو أدخلت رقم الوظيفة فقط دون كتابة المرتبة فلن يخرج لك شيء أيضاً لأننا نعمل مع الشرطين أي المرتبة ورقم الوظيفة معاً ) ويتم ذلك عن طريق الكود التالي في حدث عند النقر للزر وهذا الكود هو (الشرطين ) .. نريد خروج اسم الموظف في حقل m2 والذي يمثل أسماء الموظفين كما أسلفنا .
m2 = DLookup("[B2]", "A1", "[B3]=[m3] and [B4] =[m4]")

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

DLookUp تطبيق.rar

  • Like 1
رابط هذا التعليق
شارك

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

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

Important Information