عبد الفتاح كيرة قام بنشر مايو 21, 2017 قام بنشر مايو 21, 2017 33 دقائق مضت, jjafferr said: لماذا استخدمت دالة int هنا ، مع أن الرقم صحيح أخى @jjafferr لم أحصل على إجابة على هذا السؤال دالة int للحصول على الرقم الصحيح من رقم به أرقام عشرية مثلا 23.265 تعطينا 23 وفقكم الله
jjafferr قام بنشر مايو 21, 2017 قام بنشر مايو 21, 2017 مافي فرق بين استعمال val او int في حالتنا ، فالقصد كان تحويل النص الى رقم ، خصوصا ان السنوات ليس فيها كسر جعفر
عبد الفتاح كيرة قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 (معدل) 15 ساعات مضت, ابوخليل said: ii = DMax("rep_year", "report", "emp_id=" & x) - 1 الكود يعمل بكفاءة بشرطين @ابوخليل الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة الموجودة فى الاقتباس الثانى : ألا يكون للموظف تقرير واحد و هذا وارد (موظف جديد) تم تعديل مايو 22, 2017 بواسطه عبد الفتاح كيرة
ابوخليل قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 4 ساعات مضت, عبد الفتاح كيرة said: الكود يعمل بكفاءة بشرطين @ابوخليل الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة الموجودة فى الاقتباس الثانى : ألا يكون للموظف تقرير واحد و هذا وارد (موظف جديد) ما شاء الله .. دقة ومتابعة وكأن العمل يخصك , نعم مر بخاطري -1 هذا لذا قلت تطبيق لفكرة الاستاذ جعفر فكرت في Dlast ان كنا سنتعامل مع السجلات وليس القيم ولكني لم اجرب لذا تظهر هنا جليا فائدة الترقيم التلقائي كمفاتيح للجداول اما مسألة تقرير واحد فلم يخطر ببالي ,, يعني تحتاج شرط . صح ؟ 1
عبد الفتاح كيرة قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 (معدل) بارك الله فى أستاذنا و معلمنا @ابوخليل التصميم الجيد يريح بعد ذلك فى استخراج المعلومات بسهولة من قاعدة البيانات و العكس صحيح أرجو مراجعة فكرتى فى الحل تم تعديل مايو 22, 2017 بواسطه عبد الفتاح كيرة
jjafferr قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 السلام عليكم انا عملت التنبيه مرتين باللون البني: في 5/20/2017 at 21:26, jjafferr said: ولكن في شيء لم انتبه له البارحة لما وضعت جوابي ، وهو ان السنة في الجدول emp هو نص وليس رقم ، والذي معناه اننا يجب ان نحوله الى رقم قبل ان نأخذ Max ، وإلا فلن نحصل على السنة الصحيحة (صحيح ان النتائج الان ستكون صحيحة ، ولكننا نعرف ان تسلسل النص يكون غير صحيح ، وتسلسل الرقم يكون صحيح) ومرة اخرى هنا 20 ساعات مضت, jjafferr said: 3. نستخدم حقل النص str_Numbers مع الامر Max ، ونرى انها ليست النتائج الصحيحة ، وهذا الذي كنت احذر منه في ملاحظتي في مشاركتي السابقة ، وللأسف وقع أخي ابوخليل في هذا الفخ (جرب الكود على الارقام التي وضعتها انا وسترى قصدي) . ولكن الظاهر لم تنتبهوا لها ، فاعذروني اثبته لكم المشكلة كلها اننا نتعامل مع حقل نص وليس رقم: 20 ساعات مضت, jjafferr said: اذن ، كل هذه الخطوات عملناها ، بسبب ان السنة في المرفق الاصل هو حقل نص وليس حقل رقم ، لذلك كود أخي ابوخليل يحتاج تعديل ، وملاحظة اخي عبدالفتاح غير دقيقة: 6 ساعات مضت, عبد الفتاح كيرة said: الكود يعمل بكفاءة بشرطين @ابوخليل . الى الاثبات: 1. حقل التاريخ في الجدول هو نص . اذا طبقنا كود اخي ابوخليل على التواريخ كما هي في الجدول ، فالنتيجة تكون صحيحة (وذلك بسبب الحرف الاول للسنوات كلها 1) : . بينما اذا استعملنا التواريخ التالية ، فنرى ان الكود يعطي نتائج غير صحيحة ، والسبب هو طريقة فرز الارقام يبدأ من الصغير الى الكبير ، بينما فرز النص يختلف ، فالفرز يكون بالحرف الاول ، والحرف 9 يكون دائما اكبر من الحرف 1 (1 و 12 و 100 و 1000 ، اول حرف لها هو 1) . لعلاج هذه المشكلة ، يجب ان نأخذ القيمة الرقمية لحقل التاريخ ، وليس قيمته كما هو في الجدول (قيمة نصّية) ، فعليه يصبح كود اخي ابوخليل: بدل i = DMax("rep_year", "report", "emp_id=" & x) ii = DMax("rep_year", "report", "emp_id=" & x) - 1 نغير rep_year الى Val([rep_year]) فيصبح الكود i = DMax("Val([rep_year])", "report", "emp_id=" & x) ii = DMax("Val([rep_year])", "report", "emp_id=" & x) - 1 . والنتيجة تكون صحيحة: . جعفر 655.2.db1.mdb.zip 1
عبد الفتاح كيرة قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 49 دقائق مضت, jjafferr said: rep_year الى Val([rep_year]) فيصبح الكود i = DMax("Val([rep_year])", "report", "emp_id=" & x) كلامك على راسي معلمنا تنبيه بسيط لحضرتك أنا حملت ملف أبوخليل والكود فيه معدل كما ذكرت مع الدالة Val مع الشكر وكنت أود من حضرتكم شرح عملية الربط مع تكرار نفس الجدول و أى معلومات حولها وما الاحتياطات التى تراعى عند تكرار الجدول فى الاستعلام وما سبب الرسالة التى تأتى بأنه لا يوجد تطابق فى النوع فى التعبير
jjafferr قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 3 دقائق مضت, عبد الفتاح كيرة said: 1. أنا حملت ملف أبوخليل والكود فيه معدل كما ذكرت مع الدالة Val 2. وكنت أود من حضرتكم شرح عملية الربط مع تكرار نفس الجدول ، و أى معلومات حولها ، وما الاحتياطات التى تراعى عند تكرار الجدول فى الاستعلام 3. وما سبب الرسالة التى تأتى بأنه ، لا يوجد تطابق فى النوع فى التعبير حياك الله اخوي عبدالفتاح ، والطيبين دائما على راسي 1. كود اخي ابوخليل في المرفق هو نفسه الذي عرضه في المشاركة ، ولم يستخدم Val في امر Dmax ، وانما استخدمه في الاسطر التالية في الامر Dlookup 2. اضافة الجدول او الاستعلام مرة ثانية وثالثة و... في الربط يكون كأنك تتعامل مع جدول/استعلام جديد ، بشروطه ومعاييره ، ولا في اي شيء خاص ، ولكني للتجربة اضفت نفس الجدول 24 مرة ، فلاحظت في تأخير في الاستعلام 3. الرسالة تأتي لأنك تربط حقل رقم بحقل نص ، وهذا لا يقبله الاكسس وهذا الذي كنت اشير اليه في مشاركتي الثانية ، لهذا السبب قمت ببعض الخطوات الاضافية مثل Val و Int ، حتى يتم توحيد الحقول الى رقم ، ومنها يتم الربط جعفر 1
عبد الفتاح كيرة قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 تمام ظهرت الرؤيا وفقكم الله لكن هذا الحقل حقل العام يبدو أنه حقل ممسوس لأنى بعد أن حولته إلى حقل رقمى بقيت فيه آثار من النصية أفسدت الربط كان يجب حذفه و عمله من جديد ما رأيك هل هذا ممكن الحدوث 1
ابوخليل قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 انا قرأت ملاحظات الاستاذ جعفر قبل ان اضع الحل والدالة val سقطت سهوا لا حظوا اني كتبتها في اجزاء اخرى من الكود 8 ساعات مضت, عبد الفتاح كيرة said: الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة هذه حقيقة .. انا اتكلم عن -1 ( اذا كان Dmax = 2017 ) فـ -1 = 2016 لو فرضنا ان احدهم له تقييمين 2017 و 2015 فلن يظهر تقييم 2015 وسيعطي الكود خطأ
jjafferr قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 2 دقائق مضت, ابوخليل said: 1. والدالة val سقطت سهوا لا حظوا اني كتبتها في اجزاء اخرى من الكود 2. هذه حقيقة .. انا اتكلم عن -1 ( اذا كان Dmax = 2017 ) فـ -1 = 2016 لو فرضنا ان احدهم له تقييمين 2017 و 2015 فلن يظهر تقييم 2015 وسيعطي الكود خطأ 11 ساعات مضت, عبد الفتاح كيرة said: الكود يعمل بكفاءة بشرطين 2. الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة الموجودة فى الاقتباس 3. الثانى : ألا يكون للموظف تقرير واحد و هذا وارد (موظف جديد) 1. نعم أخوي ابوخليل هذا واضح 2. في الواقع انا لما انتقل للكود بدل الاستعلام ، فتصبح يدي وشهيتي مفتوحة بدل ان نأخذ اعلى قيمة ثم نأخذ اللي بعدها ، خلينا نفرز جميع القيم من الاكبر الى الاصغر ، مثلا للموظف رقم 2 . ولاحظ بأني حذفت السنة 1916 . وبتغيير في كود أخوي ابوخليل ، فتم الموضوع Private Sub cmd_update_Click() On Error GoTo err_cmd_update_Click Dim db As DAO.Database Dim rs As DAO.Recordset Dim rs_Report As DAO.Recordset Dim j, i, ii, x As Integer Dim r, rr As String Set db = CurrentDb Set rs = db.OpenRecordset("emp") rs.MoveLast rs.MoveFirst For j = 1 To rs.RecordCount x = rs!emp_id Set rs_Report = db.OpenRecordset("SELECT Val([rep_year]) as r_Year, rep, emp_id FROM Report WHERE emp_id =" & x & " ORDER BY Val([rep_year]) DESC") rs_Report.MoveLast: rs_Report.MoveFirst i = rs_Report!r_Year r = rs_Report!rep rs_Report.MoveNext ii = rs_Report!r_Year rr = rs_Report!rep rs.Edit rs!rep_last = r rs!rep_befor = rr rs.Update rs.MoveNext Next j MsgBox "??" Set db = Nothing rs.Close: Set rs = Nothing rs_Report.Close: Set rs_Report = Nothing Exit Sub err_cmd_update_Click: If Err.Number = 3021 Then ii = "" rr = "" Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description End If End Sub . 3. وهاي عالجناها بأنه اذا مافي سجل ، لا تعطينا لا خطأ والقيمة ستكون "" ، وكذلك تراها في السجل الرابع ، حيث جعلت له سجل واحد فقط جعفر 655.3.db1.mdb.zip 2
أبو إبراهيم الغامدي قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 السلام عليكم جميعا أعجبني طرحكم وتناولكم لطرق حل إعادة آخر سنتين! إليكم طريقة أخرى عن طريق محرر الاستعلام SELECT report.emp_id, report.rep_year, report.rep, * FROM report WHERE (((report.rep_year) In (select top 2 rep_year from report ORDER BY emp_id, rep_year DESC))); db1.zip
jjafferr قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 4 دقائق مضت, أبو إبراهيم الغامدي said: السلام عليكم جميعا أعجبني طرحكم وتناولكم لطرق حل إعادة آخر سنتين! إليكم طريقة أخرى عن طريق محرر الاستعلام SELECT report.emp_id, report.rep_year, report.rep, * FROM report WHERE (((report.rep_year) In (select top 2 rep_year from report ORDER BY emp_id, rep_year DESC))); db1.zip فكرة جميلة ولكن وقعت في نفس الفخ اخي أبو إبراهيم ففكرتك اذا كان الحقل رقم ، بينما الحقل نص بالاضافة الى ان الاستعلام يعطيك قيم سجل واحد فقط جعفر
عبد الفتاح كيرة قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 منذ ساعه, jjafferr said: بدل ان نأخذ اعلى قيمة ثم نأخذ اللي بعدها ، خلينا نفرز جميع القيم من الاكبر الى الاصغر ، مثلا للموظف رقم 2 هذا موضوع قيم جدا صارت عندنا أرصدة من الحلول الجزئية و الكلية وفقكم الله 1
jjafferr قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 10 ساعات مضت, عبد الفتاح كيرة said: لكن هذا الحقل حقل العام يبدو أنه حقل ممسوس لأنى بعد أن حولته إلى حقل رقمى بقيت فيه آثار من النصية أفسدت الربط كان يجب حذفه و عمله من جديد ما رأيك هل هذا ممكن الحدوث همممم في الواقع صادفت هذه المشكلة في البرنامج ، ولكن لما الحقول كانت نص!! هذا الرابط قد يعطيك فكرة عن الاشياء اللي يشوفها البرنامج ، وما تشوفها عيننا لكن في طريقة بلدية ممكن نعالج الممسوس ، شوية بخور ، وشيخ يعرف الطريقة ، بس ما ادري اذا يقدر على الحقل جعفر 1
أبو إبراهيم الغامدي قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 إليكم طريقة أخرى للحل Public Function Last2Records(id, Position) On Error Resume Next Dim RS As Recordset, L2R Set RS = CurrentDb.OpenRecordset("Select emp_id,CInt(rep_year) as RepYear,rep From report " _ & "Where emp_id=" & id _ & " ORDER BY emp_id,Cint(rep_year) Desc") L2R = RS.GetRows(2) Last2Records = L2R(1, Position) End Function بعد فرز البيانات تنازليا من السجلات العائدة من الاستعلام بشرط معرف الموظف نأخذ أول سجلين منها (تمثل أعلى قيمتين) عن طريق ()GetRows يعيد هذا المنهج مصفوفة ثائية الآبعاد؛ البعد الأول يمثل حقل البيانات، والآخر يمثل سطر البيانات تأخذ الوظيفة متغيرين الأول معرف الموظف، والثاني موضع السجل قيمة؛ بين (0 و 1) يصدر عن الوظيفة الخطأ (Out Of Range) إذا كانت اسطر البيانات أقل من أثنين.. يمكن تجاوزه بـ (Resume Next) استخدمت هذه الوظيفة في استعلام لجدول الموظفين؛ اسندت السجل الأول (0) إلى Rep_last باعتباره أعلى قيمة والسجل الثاني(1) إلى Rep_before باعتباره أدنى قيمة الرجاء مراجعة الاستعلام Last2Years db2.zip 2
jjafferr قام بنشر مايو 22, 2017 قام بنشر مايو 22, 2017 فكرة ممتازة في الواقع كنت اريد استخدم GetRows بدلا عن rs_Report.MoveNext ، ولكني لأني لم استخدمها سابقا ، اعطتني خطأ ، فتركتها واتبعت الطريقة المألوفة rs_Report.MoveNext جعفر 1
عبد الفتاح كيرة قام بنشر مايو 23, 2017 قام بنشر مايو 23, 2017 (معدل) زادكم الله علما ونفعنا بكم من أنفع المواضيع و أعظمها فائدة شكرا للجميع تم تعديل مايو 23, 2017 بواسطه عبد الفتاح كيرة
عبد الفتاح كيرة قام بنشر مايو 23, 2017 قام بنشر مايو 23, 2017 11 ساعات مضت, jjafferr said: في الواقع صادفت هذه المشكلة في البرنامج ، ولكن لما الحقول كانت نص!! الله يطمنك كده تمام إذن حذف الحقل و إنشاؤها أضمن و الله استفدنا منكم كثيرا وفقكم الله
عبد الفتاح كيرة قام بنشر مايو 23, 2017 قام بنشر مايو 23, 2017 يبدو أن هذا الموضوع لم ينته بعد قمت بتطبيق وظيفة الأخ @أبو إبراهيم الغامدي مع جزء من كود الأستاذ jjafferr لتحديث جدول EMP زر التحديث يعمل بكفاءة مع ملف MDB لكنه لا يعمل مع ملف ACCDB ما تفسير ذلك وما الحل مرفق الملفان ياللعجب! التطبيق كيرة.rar
رمهان قام بنشر مايو 24, 2017 قام بنشر مايو 24, 2017 (معدل) في 5/22/2017 at 23:43, jjafferr said: فكرة ممتازة في الواقع كنت اريد استخدم GetRows بدلا عن rs_Report.MoveNext ، ولكني لأني لم استخدمها سابقا ، اعطتني خطأ ، فتركتها واتبعت الطريقة المألوفة rs_Report.MoveNext جعفر معليش استاذ جعفر يمكن خارج الموضوع هذه المشاركة اعلاه جايه اول شي بعد الاستفسار وهي يوم الاثنين ثم تلاها مشاركات هل لانها حصلت اكثر اجابه ؟ فاذا كان صحيحا فنحن لم نستفد من التحديثات الاخيره ! فانا كمطلع جديد ليس بها اي معلومة تخص السؤال وهي مازالت اول الردود ؟ وحاولت اقرا الموضوع زي اول ولكن تشتت شويه فلا اعلم ماهي المشاركة الاولى تاريخيا ووقتا ؟ فتخيل لو كان هناك رد يقول في المشاركة السابقة او اعلاه وهي لم تعد سابقه او اعلاه لانها اخذت تصويت اكثر ؟ فكيف ؟ او لازم انه يعمل اقتباس ليحدد اي مشاركة يقصد !! تحياتي تم تعديل مايو 24, 2017 بواسطه رمهان
رمهان قام بنشر مايو 24, 2017 قام بنشر مايو 24, 2017 10 ساعات مضت, عبد الفتاح كيرة said: يبدو أن هذا الموضوع لم ينته بعد قمت بتطبيق وظيفة الأخ @أبو إبراهيم الغامدي مع جزء من كود الأستاذ jjafferr لتحديث جدول EMP زر التحديث يعمل بكفاءة مع ملف MDB لكنه لا يعمل مع ملف ACCDB ما تفسير ذلك وما الحل مرفق الملفان ياللعجب! التطبيق كيرة.rar في ال accdb تكون الريكورد ست معرفه بشكل صريح ك dao recordset فتكون التعريف في الوحدة النمطية dim rs as dao.recordset بالتوفيق 1
عبد الفتاح كيرة قام بنشر مايو 24, 2017 قام بنشر مايو 24, 2017 شكرا لك أستاذ رمهان نورت هذا الموضوع سأجرب معلومتك القيمة و أخبرك بالنتائج لكن تبين لى أن المشكلى فى ترتيب المكتبات لاحظ ترتيب مكتبة DAO 306 فمع هذا الترتيب لا يعمل الكود و هنا يعمل بعد تغيير الترتيب كلامك مضبوط 100% Public Function Last2Records(id, Position) On Error Resume Next Dim rs As DAO.Recordset, L2R 'نستطيع استخدام cint مكان cdate Set rs = CurrentDb.OpenRecordset("Select emp_id,CInt(rep_year) as RepYear,rep From report " _ & "Where emp_id=" & id _ & " ORDER BY emp_id,Cdate(rep_year) Desc") L2R = rs.GetRows(2) Last2Records = L2R(1, Position) End Function أشكرك على هذه الهدية القيمة و يا ليت أجد تفسيرا للصورتين السابقتين أعتقد أن ترتيب المكتبات يؤثر فى أى مكتبة ستفسر الكود و الله أعلم
رمهان قام بنشر مايو 30, 2017 قام بنشر مايو 30, 2017 مرحبا اخي عبدالفتاح وعذرا على التاخير فقد غاب عني هذا الموضوع بالنسبة لترتيب المكتبات لازم اعمل تست واعود لك وقد يكون فعلا له تاثير مع اعتقادي بان اصدار الاكسس هو الاهم كما احب المشاركة في هذا الموضوع بفكرة اعتقد سهلة جدا 1. لاستخراج اخر سجل DMax("id", "table1") 2. لاستخراج قبل الاخير DMax("id", "table1", "id<>" & DMax("id", "table1")) ويمكن توظيفهم في استعلام تحديث تحياتي للجميع 1
عبد الفتاح كيرة قام بنشر مايو 30, 2017 قام بنشر مايو 30, 2017 (معدل) هايل جدا فكرة مبتكرة لكن فى هذا الموضوع سنستخدم مع حقل السنة شاء الله أن يفيض هذا الموضوع بكنوز برمجة الأكسيس وفقكم الله جار التجربة وقد نعود إن شاء الله تم تعديل مايو 30, 2017 بواسطه عبد الفتاح كيرة
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.