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

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

قام بنشر

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

لدي برنامج صادر وارد .. اريد اظهار اخر قيمة في حقل رقم الوارد تظهر في حقل اخر مع العلم حقل رقم الوارد في نموذج فرعي استعملت الدالتين 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

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

شكراً لك ، ولكني لا أثق بالذكاء الإصطناعي ومقترحاته 😇 .

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

لن ابرر شئ ولن ارد على اى شئ من كلامك الغير منطقى لا احب الجدال ولا الوقع اسيرا فى شباك المجادلين ... 

يبدو اننا سوف نصطدم هنا بالهواة المجادلين ....... كان الله فى العون

 

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

اشكر الجميع على الاهتمام والسعي لايجاد الحل .. لكن وعكس المفهوم لا يوجد طريق يؤدي الى روما 😒

اولا :ـ  الغاية من ادرج اخر رقم للوارد في حقل اخر هي لمساعدة مدخل البيانات لمعرفة اخر رقم وباعتباره استغنى عن النظام الورقي 😎

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

                                                                                                 شكرا جزيلا لجهودكم 

قام بنشر
27 دقائق مضت, ruan said:

حسم الموضوع

هذه الجزئية مرهونة بإرفاقك الملف أخي الكريم 😉 .

فالحلول كثيرة ولكنها تعتمد على بنيتك للجداول ونظامك بشكل عام ، وليس ما نفرضه بدعليك بمقترحاتنا 💐 .

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

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

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

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

سجل حساب جديد

تسجيل دخول

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

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

×
×
  • اضف...

Important Information