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

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

قام بنشر

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

الافاضل الكرام حياكم الله

هل لي ان اعرف :

  1. ماهو الفرق بين (set , dim , global , public , private) .
  2. ماهو الفرق بين (ByVal , ByRef).
  3. ماهو الفرق بين (Function , Sub)
  4. ماهو الفرق بين ( Class ,  module )

ارجو ان اجد شرحا وافيا ولو يكون مرفق بامثلة حتى تكتمل الفائدة يكون افضل .

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

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

private تعني خاص مثال

private sub total

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

و اذا حاولت استدعائه من غير نموذج لن يجدي ذلك نفعا

public تعني عام مثال

public sub total

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

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

global تعني عالمي

Global Strcod as String

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

مع ملاحظة انه يمكنك ايضا تعريف المتغيرات بكلمة Public

Public Strcod as String

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

كلمة ( Global ) هي كلمة قديمة و حاليا يحل محلها كلمة ( Public )

 

dim كلمة يقصد بها تعريف متغير

Dim ii as Intger

في السطر السابق تم تعريف المتغير ii على انه متغير من نوع رقمي

set وتعني ضبط

dim db as dao.database

set db=currentdb

في الكود السابق dim ii as intger المتغير في هذه الحالة يملك قيمة افتراضية وهي 0

اما في السطر السابق قمت بتعريف المتغير Db كقاعدة بيانات و لكنه مازال بحاجة الى تعريف قاعدة البيانات التي عرفته بها

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

 

يتبع

 

الفرق بين Sub و Function

sub تعني موضوع او كود في في هذه الحالة الكود ينفذ دون ارجاع قيمة

مثال

public sub Amsg

msgbox "aa"

end sub

عرفت الكود ليعطي رسالة مكتوب فيها aa

و يستدعى بهذا الشكل

call Amsg

لاحظ هنا ان الكود لا يعيد قيمة هو فقط يعطي رسالة

اما Function فهي وظيفة و هي تعيد قيمة مثال

Public Function AdNum (ii as intger,ss as intger) as intger

adnum=ii+ss

end function

في هذا المثال عرفت الوظيفة لتقوم بجمع عددين وتعطي الناتج

حيث يمثل Adnum اسم الوظيفة و ii العدد الاول و ss العدد الثاني

تستدعى بهذا الشكل

call AdNum(10,15)

لاحظ هنا ان الوظيفة تعيد قيمة وهي ناتج جمع العددين

يتبع

تم تعديل بواسطه محمد ايمن
  • Like 5
قام بنشر (معدل)

الفرق بين Class و module

الوحدة النمطية يخزن بها كود يستدعى من اي مكان في قاعدة البيانات

وهو يخفف من كتابة الكود و تسهيل تطوير قاعدة البيانات

في المثال السابق عندما عرفنا الوظيفة AdNum وهي تقوم بجمع عددين

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

من غير المنطقي تكرار كتابة الوظيفة في كل نموذج اي اننا سنكتب الكود السابق 10 مرات و اذا اردنا ان نعدل او نطور الكود

ستكون العملية صعبة و مملة و قابلة للخطا

لذلك ننشئ وحدة نمطية ونضع الكود داخلها و بذلك يمكن استدعاء الكود من اي مكان

class

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

يتم التعامل مع الوحدة النطية باسم الكود المكتوب ضمنها مثال

لنفرض لدينا وحدة نمطية اسمها Mod1 وبداخلها عشرة اكواد

code 1

code 2

code 3

وهكذا

و انا بحاجة الى استخدام الكود الاول في النموذج

اقوم باستدعائه بهذا الشكل

call code1

اما الكلاس فالموضوع يختلف

لنفرض لدينا كلاس اسمها Class1 و بها عشرة اكواد

code1

code2

code3

الخ

وانا اريد استخدام الكود الثاني

لا يمكن ابدا كتابة الاستدعاء هكذا

Call Code2

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

dim Cl = new class1

cl.code2

 

يتبع

تم تعديل بواسطه محمد ايمن
  • Like 4
قام بنشر

الفرق بين ByVal و ByRef

Byval يقصد بها الاستدعاء بالقيمة

ByRef يقصد بها الاستدعاء بالمرجع

الكود التالي سيوضح الفكرة أكثر

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

'نضع هذا الكود خلف زر امر في نموذج
dim x as intger
dim y as intger
dim i as intger

x=10
y=5
'استدعاء كود الجمع بالقيمة و اظهار الناتج
i=add1(x,y)
msgbox i
msgbox x

'استدعاء كود الجمع بالمرجع و اظهار الناتج
i=add2(x,y)
msgbox i
msgbox x


'كود الجمع باستخدام Byval
private function add1(byval n1, byval n2) as intger
add1=n1+n2
n1=3
end function

'كود الجمع باستخدام ByRef
private function add2(byref n1, byref n2) as intger
add2=n1+n2
n1=3
end function

الشرح

في المثال انشئت وظيفة بسيطة لجمع عددين هما X Y

عرفت متغيرين و وضعت قيم فيها وهي (x=10) و (y=5)

 

الوظيفة Add1 

انشئت وظيفة اسمها Add1 تستقبل عددين هما n1 و n2 ( بالقيمة ) Byval

تقوم الوظيفة بجمع العددين و ارجاع الناتج ( و هنا الناتج 15 ) من خلال هذا السطر

add1=n1+n2

ثم غيرت قيمة العدد الاول من 10 الى 3 من خلال هذا الكود

n1=3

هذا يعني ان x يجب ان تصبح قيمتها 3

ولكن ستجد ان قيمة X مازالت 10 !!!!!!!!!!!!!!!! ( لاحظ انه بعد تعديل قيمة X من الوظيفة وضعت رسالة لتعطي قيمة x )

 

الوظيفة Add2 

الوظيفة Add2 في نفس الوظيفة Add1 لكن الفرق ان الوظيفة Add2 تستقبل القيم n1 و n2 ( بالمرجع ) ByRef

تقوم الوظيفة بجمع العددين و ارجاع الناتج

ثم غيرت قيمة العدد الاول من 10 الى 3

ولكن هنا ستجد ان قيمة X اصبحت 3 !!!!!!!!!!!!!!!! 

 

السبب ان Byval تحافظ على القيمة الاصلية للمتغير المرسل لها اما Byref فهي تغير القيم للمتغير المرسل لها

ارجو ان اكون قد وفقت في الشرح

 

 

  • Like 9
قام بنشر
14 ساعات مضت, محمد ايمن said:

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

ماشاء الله شرح وافى وسهل الفهم بدون تعقيدات جزاك الله خير ووفقك وزاد من علمك :fff:

  • 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