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

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

بناء على طلب احد الاخوة شرح تفصيلى لدالة:  DLookup Function

الوصف-Description  : ترجع الدالة DLookup قيمة حقل واحد
إذا لم يكن هناك سجل يلبي المعايير أو إذا كان المجال لا يحتوي على أي سجلات، ترجع الدالة DLookup القيمة Null

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


بناء الجملة الدالة-Syntax DLookup : يختلف بناء الجملة الخاص بوظيفة DLookup 
الشكل العام البسيط لبناء الجملة يكون كالتالى

DLookup("FieldName" , "TableName") 

وعندما نريد بناء جملة ترجع قيمة حقل من جدول بناء على قيمة محددة لابد ان يحتوى بناء الجملة على معيار
الشكل العام لبناء الجملة كالتالى

DLookup("FieldName" , "TableName" , "Criteria")

و لابد من الاخذ فى الاعتبار انه سوف نعتمد فى بناء جملة DLookup من هذا النوع الذى يعتمد على معيار على نوع البيانات المستخدم فى هذا المعيار 

انواع البيانات المستخدمة فى المعيار هى لا تخرج عن الثلاث انواع الاتية (رقم -   نص  -  تاريخ  -  Numeric - String - Date )

ودائما تلك الجزئية هى مصدر القلق والخطأ والتساؤل ولكى نبسطها 

DLookup("FieldName" , "TableName" , "Criteria = n")     '|Numeric
DLookup("FieldName" , "TableName" , "Criteria = 'S'")   '|String
DLookup("FieldName" , "TableName" , "Criteria = #D#")   '|Date

بكل بساطه فى بناء الجملة الرئيسي
عندما نستخدم معيار يحتوى على نوع بيانات من النوع رقم فقط تم وضع علامة = بعد Criteria ثم الرقم بدون اى اضافات
عندما نستخدم معيار يحتوى على نوع بيانات من النوع نص فقط تم وضع علامة = بعد Criteria ثم النص بين علامتين تنصيص مفرده    '
عندما نستخدم معيار يحتوى على نوع بيانات من النوع تاريخ فقط تم وضع علامة = بعد Criteria ثم التاريخ بين علامتين هاش              #
يستخدم ما سبق عندما نكتب قيمة المعيار بطريقة مباشرة

وعندما يكون المعيار مستمد من عنصر موجود اما حقل فى استعلام او مربع نص فى نموذج يكون بناء الجملة كالأتى

DLookup("FieldName" , "TableName" , "Criteria =" & [ObjectName])          '|Numeric
DLookup("FieldName" , "TableName" , "Criteria ='" & [ObjectName] & "'")   '|String
DLookup("FieldName" , "TableName" , "Criteria =#" & [ObjectName] & "#")   '|Date

ملاحظة هامة عند التعامل مع التاريخ لابد ان يكون تنسيق التاريخ فى المعيار على الطريقة الأمريكية  mm/dd/yyyy
--------------------------------------------------------------------------------------------------------------------------

 

وعندما يكون المعيار مستمد من متغير يتم اسناد قيمة المعيار اليه داخل محرر الأكواد يكون بناء الجملة كالأتى
ولا ننسى عند التعامل مع التاريخ لابد ان يكون تنسيق التاريخ فى المعيار على الطريقة الأمريكية  mm/dd/yyyy

Dim MyVariable      As String
Dim stLinkCriteria  As String

    MyVariable = 1
    stLinkCriteria = "[FldCriteria]=" & MyVariable                  '|Numeric
    
    'MyVariable = "Mahmoud"
    'stLinkCriteria = "[FldCriteria] ='" & MyVariable & "'"         '|String
    
    'MyVariable = "03/01/1982"
    'stLinkCriteria = "[FldCriteria] =#" & MyVariable & "#"         '|Date


stLinkCriteria = "[FldCriteria]=" & MyVariable              '|Numeric
'stLinkCriteria = "[FldCriteria] ='" & MyVariable & "'"      '|String
'stLinkCriteria ="[FldCriteria] =#" & MyVariable & "#"       '|Date

DLookup("FieldName", "TableName", stLinkCriteria)

 

مثال متقدم
احضار بيانات دفعة واحدة من اكثر من حقل عن طريق المصفوفات من خلال الـ DLookup 
على طريقة استاذى الجليل ومعلمى القدير و والدى الجبيب الاستاذ @jjafferr :fff:

Dim strDLookupFlds  As String
Dim stLinkCriteria  As String
Dim MyVariable      As String
Dim Arry()          As String
Dim ChosFld         As String

    MyVariable = 1
    stLinkCriteria = "[FldCriteria]=" & MyVariable                  '|Numeric
    
    'MyVariable = "Mahmoud"
    'stLinkCriteria = "[FldCriteria] ='" & MyVariable & "'"         '|String
    
    'MyVariable = "03/01/1982"
    'stLinkCriteria = "[FldCriteria] =#" & MyVariable & "#"         '|Date
    
    strDLookupFlds = DLookup("[Fld1] & '|' & [Fld2] & '|' & [Fld3] & '|' & [Fld4] & '|' & [Fld5] & '|' & [Fld6] & '|' & [Fld7] & '|' & [Fld8]& '|' & [Fld9]", "[tblName]", stLinkCriteria)
    Arry = Split(strDLookupFlds, "|")
        
        Debug.Print strDLookupFlds
        
        ChosFld = Arry(0)
        Debug.Print ChosFld
        
'Arry(0) = Fld1
'Arry(1) = Fld2
'Arry(2) = Fld3
'Arry(3) = Fld4
'Arry(4) = Fld5
'Arry(5) = Fld6
'Arry(6) = Fld7
'Arry(7) = Fld8
'Arry(8) = Fld9

 

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

8 ساعات مضت, ابو جودي said:

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

كما تعودنا منك ابو جودى شرح منظم وبسيط ورائع. 

بالنسبة لنقطة ارجاع اول قيمة فيه واحد اجنبى حل الموضوع ده عن طريق عمل function آلية عملها واستدعاءها تشبه Dlookup ولكن فيها معيار زيادة يسمح لك بترتيب البيانات التى ستقوم الدالة بارجاعها. 

سأبحث عنها فى مكتبتى وارسلها لك لاضافتها فى الموضوع :dance1:

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

54 دقائق مضت, Amr Ashraf said:

بالنسبة لنقطة ارجاع اول قيمة فيه واحد اجنبى حل الموضوع ده عن طريق عمل function آلية عملها واستدعاءها تشبه Dlookup ولكن فيها معيار زيادة يسمح لك بترتيب البيانات التى ستقوم الدالة بارجاعها.

تفضل 🙂

 

الدالة اسمها Elookup ، وتُستخدم بالضبط مثل Dlookup ، وفيها متغير اخير يعمل فرز :

http://allenbrowne.com/ser-42.html

 

جعفر

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

5 دقائق مضت, jjafferr said:

الدالة اسمها Elookup ، وتُستخدم بالضبط مثل Dlookup ، وفيها متغير اخير يعمل فرز :

تمام هيا دى استاذنا الفاضل , ممكن مثال على كتابتها مع اضافة المتغير الأخير ؟ لأن المصدر لم يذكر مثال عليها مع خاصية الترتيب .. جزاك الله خير

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

المثال موجود في الرابط وفي الدالة نفسها :

1. To find the last value, include DESC in the OrderClause, e.g.:
 ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC")

2. To find the lowest non-null value of a field, use the Criteria, e.g.:
 ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname")

 

جعفر

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

أهلا بكم..

DLookup (Expr, Domain, Criteria)

-- في معامل Expr:  يمكن أن نستخدم Last First Count أو أي تابع من توابع أكسس أو تنشئ دالة تقوم بحساب أو فحص شئ ما.

-- في معامل Criteria: يمكن أن نمرر إلى الحد الأيسر من المعيار أي من توابع أكسس مثل توابع التاريخ DateDiff أو  Format أو Cstr.

On Immediate Window

?Dlookup("UCase(First([Last Name]&', '&[First Name]))","Customers","City='Boston'")
GRATACOS SOLSONA, ANTONIO

?Dlookup("UCase(Last([Last Name]&', '&[First Name]))","Customers","City='Boston'")
AUTIER MICONI, CATHERINE
  
?Dlookup("'Count Records: '&Count([Last Name]&', '&[First Name])","Customers","City='Boston'")
Count Records: 2

 

 

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

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

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



سجل دخولك الان
×
×
  • اضف...

Important Information