ruan قام بنشر منذ 12 ساعات قام بنشر منذ 12 ساعات السلام عليكم ... لدي برنامج صادر وارد .. اريد اظهار اخر قيمة في حقل رقم الوارد تظهر في حقل اخر مع العلم حقل رقم الوارد في نموذج فرعي استعملت الدالتين DMax / DLast لكن كانت النتيجه هي اظهار القيمه قبل الاخيره وليست اخر قيمه . =DLast("[رقم الوارد]";"[وارد]") =DMax("[رقم الوارد]";"[وارد]") وهنا ( وارد ) هو اسم الجدول ... طبعا الحقل المراد اظهار اخر قيمه فيه يكون في النموذج الرئيسي .. افيدوني يرحمكم الله .
عسل قليل الدسم قام بنشر منذ 12 ساعات قام بنشر منذ 12 ساعات Me!الحقل_الرئيسي = DMax("[رقم الوارد]", "[وارد]") في حدث After Update يفضل وجود مرفق من القاعدة بسيط لفهم المشكلة
kkhalifa1960 قام بنشر منذ 9 ساعات قام بنشر منذ 9 ساعات لابد ن توافر الشرط لضمان القيمة الصح . الشرط ...... تاريخ المعاملة مثلاً . 1
Foksh قام بنشر منذ 8 ساعات قام بنشر منذ 8 ساعات منذ ساعه, kkhalifa1960 said: لابد ن توافر الشرط لضمان القيمة الصح . الشرط ...... تاريخ المعاملة مثلاً . ليس بالضرورة إن كان الهدف الحصول على قيمة حقل محدد في آخر سجل ( شرط وجود حقل ترقيم مثلاً ) . ولكن إن كان ضمن شرط فعبارتك صحيحة 100% وهنا ممكن يستخدم حقل الترقيم كأساس على آخر قيمة . وممكن استعمال دالة بسيطة مثل :- 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("رقم الوارد";"وارد")
عسل قليل الدسم قام بنشر منذ 6 ساعات قام بنشر منذ 6 ساعات (معدل) 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("رقم الوارد", "وارد") تم تعديل منذ 5 ساعات بواسطه عسل قليل الدسم
عسل قليل الدسم قام بنشر منذ 5 ساعات قام بنشر منذ 5 ساعات (معدل) التطبيق فى قاعدتين الاولى : تجربة صادر الثانية : تجربة صادر-2 طبعا الاولى افضل واسرع وبدون اكواد للاسباب التالية أكثر سرعة : لا يوجد Query على قاعدة البيانات لان البيانات موجودة فى الذاكرة أكثر دقة : لأنها تضمن قراءة القيمة التي يتم إدخالها بشكل مباشر لذلك لن يحدث أي خطأ في التوقيت أكثر أمان : لأنها لا تعتمد على الدالة أو الترتيب في الجدول وبالتالي تقل احتمالية ظهور القيمة قبل الأخيرة أو Null متى يفضل إستخدام الطريقة التى تعتمد على الكود فى القاعدة الثانية عندما نريد الحصول على أخر قيمة فى زوايا التطبيق المختلفة اى فى نموذج أخر او فى استعلام أو فى اى مكان عندمل نريد دعم فلتر: يمكن إضافة شرط WHERE لاسترجاع اخر قيمة حسب معايير معينة أى الحصول على اخر رقم بشروط (مثلا حسب السنة) وهذا بالاخص ان كان يتم البدأ بالترقيم من الرقم 1 مرة أخرى سنويا ممكن نستخدمها بالشكل التالى: Me.Parent!txtLastIncoming = GetLastValue("رقم الوارد", "وارد", "Year([تاريخ الوارد]) = Year(Date())", 0) تجربة صادر.accdb تجربة صادر-2.accdb تم تعديل منذ 5 ساعات بواسطه عسل قليل الدسم
الردود الموصى بها
انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد
يجب ان تكون عضوا لدينا لتتمكن من التعليق
انشئ حساب جديد
سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .
سجل حساب جديدتسجيل دخول
هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.
سجل دخولك الان