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

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

قام بنشر

السلام عليكم ...

لدي برنامج صادر وارد .. اريد اظهار اخر قيمة في حقل رقم الوارد تظهر في حقل اخر مع العلم حقل رقم الوارد في نموذج فرعي استعملت الدالتين DMax / DLast  لكن كانت النتيجه هي اظهار القيمه قبل الاخيره وليست اخر قيمه .

=DLast("[رقم الوارد]";"[وارد]")

 

 =DMax("[رقم الوارد]";"[وارد]") 

 

 وهنا ( وارد ) هو اسم الجدول ... طبعا الحقل المراد اظهار اخر قيمه فيه يكون في النموذج الرئيسي .. افيدوني يرحمكم الله .

 

 

قام بنشر
منذ ساعه, kkhalifa1960 said:

لابد ن توافر الشرط لضمان القيمة الصح   . الشرط  ......  تاريخ المعاملة مثلاً .:fff:

ليس بالضرورة إن كان الهدف الحصول على قيمة حقل محدد في آخر سجل ( شرط وجود حقل ترقيم مثلاً ) . ولكن إن كان ضمن شرط فعبارتك صحيحة 100% :fff:

وهنا ممكن يستخدم حقل الترقيم كأساس على آخر قيمة .

 

وممكن استعمال دالة بسيطة مثل :-

Function GetLastValue(strField As String, strTable As String) As Variant
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(strTable, dbOpenTable)
    rs.MoveLast
    GetLastValue = rs.Fields(strField).Value
    rs.Close
End Function

ويتم استدعائها في مربع نص غير منضم بتمرير اسم الجدول والحقل ، مثلاً :-

=GetLastValue("رقم الوارد";"وارد")

 

قام بنشر (معدل)
2 ساعات مضت, Foksh said:
Function GetLastValue(strField As String, strTable As String) As Variant
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(strTable, dbOpenTable)
    rs.MoveLast
    GetLastValue = rs.Fields(strField).Value
    rs.Close
End Function

كود ضعيف و يعتمد على الترتيب الفيزيائي في الجدول يعنى نفس مشكلة DLast

غير ان بالشكل ده لو الجدول فارغ يحدث خطأ 

كمان dbOpenTable بدون ترتيب وده لا يضمن الحصول على اخر قيمة 

الكود الصحيح يكون بالشكل التالى 
 

Function GetLastValue(ByVal strField As String, ByVal strTable As String, Optional ByVal strWhere As String = "", Optional ByVal vDefault As Variant = Null) As Variant

    On Error GoTo ErrHandler
    
    Dim rs As DAO.Recordset
    Dim strSQL As String
    
    strSQL = "SELECT TOP 1 [" & strField & "] FROM [" & strTable & "]"
    
    If strWhere <> "" Then
        strSQL = strSQL & " WHERE " & strWhere
    End If
    
    strSQL = strSQL & " ORDER BY [" & strField & "] DESC"
    
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    
    If rs.EOF Then
        GetLastValue = vDefault
    Else
        GetLastValue = rs.Fields(0).Value
    End If
    
CleanExit:
    If Not rs Is Nothing Then
        rs.Close
        Set rs = Nothing
    End If
    Exit Function

ErrHandler:
    GetLastValue = vDefault
    Resume CleanExit
End Function

 

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

Me.txtLastIncoming = GetLastValue("رقم الوارد", "وارد")

 

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

التطبيق فى قاعدتين

الاولى : تجربة صادر

الثانية : تجربة صادر-2

طبعا الاولى افضل واسرع وبدون اكواد للاسباب التالية 

  • أكثر سرعة : لا يوجد Query على قاعدة البيانات لان البيانات موجودة فى الذاكرة
  • أكثر دقة : لأنها تضمن قراءة القيمة التي يتم إدخالها بشكل مباشر لذلك لن يحدث أي خطأ في التوقيت
  • أكثر أمان : لأنها لا تعتمد على الدالة أو الترتيب في الجدول وبالتالي تقل احتمالية ظهور القيمة قبل الأخيرة أو Null

متى يفضل  إستخدام الطريقة التى تعتمد على الكود فى القاعدة الثانية 

  • عندما نريد الحصول على أخر قيمة فى زوايا التطبيق المختلفة اى فى نموذج أخر او فى استعلام أو فى اى مكان 
  • عندمل نريد دعم فلتر: يمكن إضافة شرط WHERE لاسترجاع اخر قيمة حسب معايير معينة

أى الحصول على اخر رقم بشروط (مثلا حسب السنة) وهذا بالاخص ان كان يتم البدأ بالترقيم من الرقم 1 مرة أخرى سنويا ممكن نستخدمها بالشكل التالى:
 

Me.Parent!txtLastIncoming = GetLastValue("رقم الوارد", "وارد", "Year([تاريخ الوارد]) = Year(Date())", 0)

 

 

تجربة صادر.accdb تجربة صادر-2.accdb

تم تعديل بواسطه عسل قليل الدسم

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

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

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

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

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

Important Information