اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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


Hamtoooo

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

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

لأستفيد ويستفيد غيري كوني مبتدئ 

اعمل على انشاء برنامج متكامل ولدي الكثير من الرسائل المنبثقه (msgbox) 

احببت ان يكون عنوان هذه الرسائل المنبثقه (title) موحده مثلا بإسم البرنامج ورقم الاصدار 

الذي عملته هو انني وضعت جدول يكون فيه اسم البرنامج ورقم الاصدار واستخدمت دالة (Dlookup) لجلب اسم البرنامج والاصدار في عنوان الرسائل

كما يلي :

Private Sub b_emp_add_Click()
On Error Resume Next
If Forms![LoginFourm]![Delete] = 0 Then
MsgBox "خطأ .. ليس لديك صلاحيات اصدار أذن", 0 + 16 + 1048576, DLookup("[name_pro]", "[info]") & " | " & DLookup("[Version_pro]", "[info]")
Else
DoCmd.OpenForm "Permission_add", , , , acFormAdd
End If
End Sub

 

وكما تلاحظ انني وضعت داله الـ dlookup في عنوان الرساله في كل مره اضع هذا الكود

اعلم انها طريقه غير احترافيه ..

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

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

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

ماهي افضل الطرق  وياليت يتم شرح لنا استدعاء دالة dlookup داخل وحده نمطيه والاستفاده منها في عنوان الرساله 

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

شاكر ومقدر حسن تعاملكم وتفهمكم 

 


 

توحيد العنوان في الرسائل المنبثقه.accdb

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

وعليكم السلام 🙂

 

1. بهذه الطريقة ننادي الدالة fMy_Msgs لتعطينا الرسالة :

Private Sub b_emp_add_Click()
On Error Resume Next
If Forms![LoginFourm]![Delete] = 0 Then
    call fMy_Msgs
Else
DoCmd.OpenForm "Permission_add", , , , acFormAdd
End If
End Sub

 

2. اعمل وحدة نمطية جديدة ، واعطيها اسم mod_My_Msgs مثلا (ولكن لا تحفظها باسم fMy_Msgs ، لأن هذا اسم الدالة) :

option comapre database
option explicit

  dim my_info as string

public function fMy_Msgs()

  if len(my_info & "")=0 then
    my_info = DLookup("[name_pro]", "[info]") & " | " & DLookup("[Version_pro]", "[info]")
  end if

MsgBox "خطأ .. ليس لديك صلاحيات اصدار أذن", 0 + 16 + 1048576, my_info

end function

.

جعفر

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

ممتن للطفك وجميل صنعك

 

حسب ما فهمت من ردك اخي جعفرر انه يتم استدعاء الرساله كامله بما فيها العنوان ونص الرساله

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

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

7 دقائق مضت, Hamtoooo said:

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

ولا يهمك ، تفضل

Private Sub b_emp_add_Click()
On Error Resume Next
If Forms![LoginFourm]![Delete] = 0 Then
MsgBox خطأ .. ليس لديك صلاحيات اصدار أذن", 0 + 16 + 1048576", fMy_Msgs
Else
DoCmd.OpenForm "Permission_add", , , , acFormAdd
End If
End Sub

.

والدالة

option comapre database
option explicit

  dim my_info as string

public function fMy_Msgs() as string

  if len(my_info & "")=0 then
    my_info = DLookup("[name_pro]", "[info]") & " | " & DLookup("[Version_pro]", "[info]")
  end if

  fMy_Msgs = my_info

end function

 

جعفر

 

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

احسن الله إليك وجعل ما تقوم به في ميزان حسناتك

 

اخي جعفر شفهيا لماذا وضعت داله if  واستخدمت len  ؟؟ م الفائده منها وهل استخدامها شائع

33 دقائق مضت, jjafferr said:
 if len(my_info & "")=0 then
    my_info = DLookup("[name_pro]", "[info]") & " | " & DLookup("[Version_pro]", "[info]")
  end if



 

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

1. استخدامي الامر Len

طريقتي في التعرف على ان المتغير:

my_info المتغير

ليس فاضي
my_info = ""

وليس فيه قيمة
isNull(my_info)= true

يعني بدل
if my_info="" or isnull(my_info)= true then


استعمل
if len(my_info & "")=0 then

.

2. لماذا استخدمت if

لما الكود يقرأ الدالة لأول مرة ، فقيمة المتغير my_info هو "" (لأننا اعلنا ان string ، بينما لو كان المتغير رقم / مثل integer او Double او .. فتكون قيمته 0) ،

فيقوم الكود بالذهاب الى الجدول مرتين (مرة لكل Dlookup) (مع انك تستطيع الذهاب الى الجدول مرة واحدة وقراءة قيمة الحقلين مرة واحدة ) ،

ولما تقرأ الدالة مرات اخرى ، فيقوم الكود بالذهاب الى الجدول مرتين ،

بينما لما استخدمت الامر if في الدالة ، فالدالة لما تجد ان المتغير my_info فيه قيمة (اي انه ذهب للجدول سابقا واحضر القيمتين) ، فلا تذهب للجدول ، وانما تعطي/تظهر القيمة مباشرة 🙂

 

جعفر

 

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

جمييييل شكرا لك جعفر فهمت طريقة الفكرة

انا فعلا استخدم هذه الطريقه

23 دقائق مضت, jjafferr said:
if my_info="" or isnull(my_info)= true then

 

لكن حتما سأستخدم طريقتك 

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information