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

تحديث حقل بجدول طرف من جدول اطراف


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

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

لماذا استخدمت  دالة int  هنا ، مع أن الرقم صحيح

أخى  @jjafferr    لم أحصل على إجابة على هذا السؤال

دالة  int  للحصول على الرقم الصحيح من رقم به أرقام عشرية

مثلا   23.265 

تعطينا

23

وفقكم الله

 

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

15 ساعات مضت, ابوخليل said:

ii = DMax("rep_year", "report", "emp_id=" & x) - 1

الكود يعمل بكفاءة بشرطين  @ابوخليل

الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة الموجودة فى الاقتباس

الثانى : ألا يكون للموظف تقرير واحد و هذا وارد (موظف جديد)

تم تعديل بواسطه عبد الفتاح كيرة
رابط هذا التعليق
شارك

4 ساعات مضت, عبد الفتاح كيرة said:

الكود يعمل بكفاءة بشرطين  @ابوخليل

الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة الموجودة فى الاقتباس

الثانى : ألا يكون للموظف تقرير واحد و هذا وارد (موظف جديد)

ما شاء الله .. دقة ومتابعة وكأن العمل يخصك , نعم مر بخاطري  -1 هذا  لذا قلت تطبيق لفكرة الاستاذ جعفر

فكرت في Dlast  ان كنا سنتعامل مع السجلات وليس القيم ولكني لم اجرب

لذا تظهر هنا جليا فائدة الترقيم التلقائي كمفاتيح للجداول

اما مسألة تقرير واحد فلم يخطر ببالي ,,  يعني تحتاج شرط .  صح ؟

 

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

بارك الله فى أستاذنا و معلمنا @ابوخليل

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

و العكس صحيح

أرجو مراجعة فكرتى فى الحل

تم تعديل بواسطه عبد الفتاح كيرة
رابط هذا التعليق
شارك

السلام عليكم:smile:

 

انا عملت التنبيه مرتين باللون البني:

في 5/20/2017 at 21:26, jjafferr said:

ولكن في شيء لم انتبه له البارحة لما وضعت جوابي ، وهو ان السنة في الجدول emp هو نص وليس رقم ، والذي معناه اننا يجب ان نحوله الى رقم قبل ان نأخذ Max ، وإلا فلن نحصل على السنة الصحيحة (صحيح ان النتائج الان ستكون صحيحة ، ولكننا نعرف ان تسلسل النص يكون غير صحيح ، وتسلسل الرقم يكون صحيح)

ومرة اخرى هنا

20 ساعات مضت, jjafferr said:

3. نستخدم حقل النص str_Numbers مع الامر Max ، ونرى انها ليست النتائج الصحيحة ، وهذا الذي كنت احذر منه في ملاحظتي في مشاركتي السابقة ، وللأسف وقع أخي ابوخليل في هذا الفخ (جرب الكود على الارقام التي وضعتها انا وسترى قصدي):')

.

ولكن الظاهر لم تنتبهوا لها ، فاعذروني اثبته لكم:smile:

المشكلة كلها اننا نتعامل مع حقل نص وليس رقم:

20 ساعات مضت, jjafferr said:

اذن ، كل هذه الخطوات عملناها ، بسبب ان السنة في المرفق الاصل هو حقل نص وليس حقل رقم ،

 

لذلك كود أخي ابوخليل يحتاج تعديل ، وملاحظة اخي عبدالفتاح غير دقيقة:

6 ساعات مضت, عبد الفتاح كيرة said:

الكود يعمل بكفاءة بشرطين  @ابوخليل

 

.

الى الاثبات:

1. حقل التاريخ في الجدول هو نص

655.2.Clipboard04.jpg.8ff970782c740679deda1564c1a28d64.jpg

.

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

655.2.Clipboard01.jpg.67b2d86a67259d1ac8faf094eb2cefa6.jpg

.

بينما اذا استعملنا التواريخ التالية ، فنرى ان الكود يعطي نتائج غير صحيحة ،

والسبب هو طريقة فرز الارقام يبدأ من الصغير الى الكبير ،

بينما فرز النص يختلف ، فالفرز يكون بالحرف الاول ، والحرف 9 يكون دائما اكبر من الحرف 1 (1 و 12 و 100 و 1000 ، اول حرف لها هو 1)

655.2.Clipboard03.jpg.32be22f90ad45de8b9dfb538eae07ebe.jpg

.

لعلاج هذه المشكلة ، يجب ان نأخذ القيمة الرقمية لحقل التاريخ ، وليس قيمته كما هو في الجدول (قيمة نصّية) ، فعليه يصبح كود اخي ابوخليل:

بدل
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.Clipboard05.jpg.37ad7534a3729610ee710f19492fa2f5.jpg

.

جعفر

655.2.db1.mdb.zip

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

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

rep_year الى Val([rep_year]) فيصبح الكود i = DMax("Val([rep_year])", "report", "emp_id=" & x)

كلامك على راسي معلمنا

تنبيه بسيط لحضرتك

أنا حملت ملف أبوخليل والكود فيه معدل كما ذكرت مع الدالة Val

مع الشكر

وكنت أود من حضرتكم

شرح عملية الربط مع تكرار نفس الجدول

و أى معلومات حولها

وما الاحتياطات التى تراعى عند تكرار الجدول فى الاستعلام

وما سبب الرسالة التى تأتى بأنه

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

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

3 دقائق مضت, عبد الفتاح كيرة said:

1. أنا حملت ملف أبوخليل والكود فيه معدل كما ذكرت مع الدالة Val

2. وكنت أود من حضرتكم شرح عملية الربط مع تكرار نفس الجدول ، و أى معلومات حولها ، وما الاحتياطات التى تراعى عند تكرار الجدول فى الاستعلام

3. وما سبب الرسالة التى تأتى بأنه ، لا يوجد تطابق فى النوع فى التعبير

حياك الله اخوي عبدالفتاح ، والطيبين دائما على راسي:smile:

 

1. كود اخي ابوخليل في المرفق هو نفسه الذي عرضه في المشاركة ،

ولم يستخدم Val في امر Dmax ، وانما استخدمه في الاسطر التالية في الامر Dlookup :smile:

2. اضافة الجدول او الاستعلام مرة ثانية وثالثة و... في الربط يكون كأنك تتعامل مع جدول/استعلام جديد ، بشروطه ومعاييره ، ولا في اي شيء خاص ،

ولكني للتجربة اضفت نفس الجدول 24 مرة ، فلاحظت في تأخير في الاستعلام:wink2:

3. الرسالة تأتي لأنك تربط حقل رقم بحقل نص ، وهذا لا يقبله الاكسس:smile:

وهذا الذي كنت اشير اليه في مشاركتي الثانية ، لهذا السبب قمت ببعض الخطوات الاضافية مثل Val و Int ، حتى يتم توحيد الحقول الى رقم ، ومنها يتم الربط:smile:

 

جعفر

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

تمام

ظهرت الرؤيا

وفقكم الله

لكن هذا الحقل حقل العام

يبدو أنه حقل ممسوس

لأنى بعد أن حولته إلى حقل رقمى

بقيت فيه آثار من النصية

أفسدت الربط

كان يجب حذفه و عمله من جديد

ما رأيك

هل هذا ممكن الحدوث

 

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

انا قرأت ملاحظات الاستاذ جعفر  قبل ان اضع الحل   والدالة val  سقطت سهوا  لا حظوا اني كتبتها في اجزاء اخرى من الكود

8 ساعات مضت, عبد الفتاح كيرة said:

الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة

هذه حقيقة ..  انا اتكلم  عن  -1    ( اذا كان Dmax = 2017 )  فـ  -1  = 2016

لو فرضنا ان احدهم  له تقييمين  2017 و 2015

فلن يظهر تقييم 2015  وسيعطي الكود خطأ

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

2 دقائق مضت, ابوخليل said:

1. والدالة val  سقطت سهوا  لا حظوا اني كتبتها في اجزاء اخرى من الكود

2. هذه حقيقة ..  انا اتكلم  عن  -1    ( اذا كان Dmax = 2017 )  فـ  -1  = 2016

لو فرضنا ان احدهم  له تقييمين  2017 و 2015

فلن يظهر تقييم 2015  وسيعطي الكود خطأ

 

11 ساعات مضت, عبد الفتاح كيرة said:

الكود يعمل بكفاءة بشرطين

2. الأول : أن تكون آخر سنتين متتابعتين و إلا لن يجد القيمة الموجودة فى الاقتباس

3. الثانى : ألا يكون للموظف تقرير واحد و هذا وارد (موظف جديد)

 

1. نعم أخوي ابوخليل هذا واضح:smile:

2. في الواقع انا لما انتقل للكود بدل الاستعلام ، فتصبح يدي وشهيتي مفتوحة :smile:

بدل ان نأخذ اعلى قيمة ثم نأخذ اللي بعدها ، خلينا نفرز جميع القيم من الاكبر الى الاصغر ، مثلا للموظف رقم 2

655.3.Clipboard01.jpg.8daf2e2511882476d84d3ee2cfcad0e5.jpg

.

ولاحظ بأني حذفت السنة 1916

655.3.Clipboard03.jpg.b82a1b153c6dae1c5eeba270b159312d.jpg

.

وبتغيير في كود أخوي ابوخليل ، فتم الموضوع:smile:


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. وهاي عالجناها بأنه اذا مافي سجل ، لا تعطينا لا خطأ والقيمة ستكون ""  ، وكذلك تراها في السجل الرابع ، حيث جعلت له سجل واحد فقط:smile:

 

جعفر

655.3.db1.mdb.zip

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

السلام عليكم جميعا

أعجبني طرحكم وتناولكم لطرق حل إعادة آخر سنتين!

إليكم طريقة أخرى عن طريق محرر الاستعلام

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

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

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

فكرة جميلة:smile:

ولكن وقعت في نفس الفخ اخي أبو إبراهيم :wink2:

ففكرتك اذا كان الحقل رقم ، بينما الحقل نص:biggrin:

 

بالاضافة الى ان الاستعلام يعطيك قيم سجل واحد فقط:smile:

 

جعفر

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

منذ ساعه, jjafferr said:

بدل ان نأخذ اعلى قيمة ثم نأخذ اللي بعدها ، خلينا نفرز جميع القيم من الاكبر الى الاصغر ، مثلا للموظف رقم 2

هذا موضوع قيم جدا

صارت عندنا أرصدة من الحلول الجزئية و الكلية

وفقكم الله

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

10 ساعات مضت, عبد الفتاح كيرة said:

لكن هذا الحقل حقل العام

يبدو أنه حقل ممسوس

لأنى بعد أن حولته إلى حقل رقمى

بقيت فيه آثار من النصية

أفسدت الربط

كان يجب حذفه و عمله من جديد

ما رأيك

هل هذا ممكن الحدوث

 

 

همممم

في الواقع صادفت هذه المشكلة في البرنامج ، ولكن لما الحقول كانت نص!!

هذا الرابط قد يعطيك فكرة عن الاشياء اللي يشوفها البرنامج ، وما تشوفها عيننا

 

لكن في طريقة بلدية ممكن نعالج الممسوس ، شوية بخور ، وشيخ يعرف الطريقة ، بس ما ادري اذا يقدر على الحقل:wink2:

 

جعفر

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

إليكم طريقة أخرى للحل

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

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

فكرة ممتازة:smile:

في الواقع كنت اريد استخدم GetRows بدلا عن rs_Report.MoveNext ، ولكني لأني لم استخدمها سابقا ، اعطتني خطأ ، فتركتها واتبعت الطريقة المألوفة rs_Report.MoveNext:smile:

 

جعفر

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

11 ساعات مضت, jjafferr said:

في الواقع صادفت هذه المشكلة في البرنامج ، ولكن لما الحقول كانت نص!!

الله يطمنك

كده تمام

إذن حذف الحقل و إنشاؤها أضمن

و الله استفدنا منكم كثيرا

وفقكم الله

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

يبدو أن هذا الموضوع لم ينته بعد

قمت بتطبيق وظيفة الأخ    @أبو إبراهيم الغامدي                                        

مع جزء من كود الأستاذ jjafferr

 

لتحديث جدول EMP

زر التحديث يعمل بكفاءة مع ملف

MDB

لكنه لا يعمل مع ملف

ACCDB

ما تفسير ذلك

وما الحل

مرفق الملفان

ياللعجب!

التطبيق كيرة.rar

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

في 5/22/2017 at 23:43, jjafferr said:

فكرة ممتازة:smile:

في الواقع كنت اريد استخدم GetRows بدلا عن rs_Report.MoveNext ، ولكني لأني لم استخدمها سابقا ، اعطتني خطأ ، فتركتها واتبعت الطريقة المألوفة rs_Report.MoveNext:smile:

 

جعفر

معليش استاذ جعفر 

يمكن خارج الموضوع

هذه المشاركة اعلاه جايه اول شي بعد الاستفسار وهي يوم الاثنين ثم تلاها مشاركات

هل لانها حصلت اكثر اجابه ؟ فاذا كان صحيحا فنحن لم نستفد من التحديثات الاخيره ! فانا كمطلع جديد ليس بها اي معلومة تخص السؤال وهي مازالت اول الردود ؟

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

تحياتي

 

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

10 ساعات مضت, عبد الفتاح كيرة said:

يبدو أن هذا الموضوع لم ينته بعد

قمت بتطبيق وظيفة الأخ    @أبو إبراهيم الغامدي                                        

مع جزء من كود الأستاذ jjafferr

 

لتحديث جدول EMP

زر التحديث يعمل بكفاءة مع ملف

MDB

لكنه لا يعمل مع ملف

ACCDB

ما تفسير ذلك

وما الحل

مرفق الملفان

ياللعجب!

التطبيق كيرة.rar

في ال accdb تكون الريكورد ست معرفه بشكل صريح ك dao recordset

فتكون التعريف في الوحدة النمطية

dim rs as dao.recordset

بالتوفيق

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

شكرا لك أستاذ رمهان

نورت هذا الموضوع

سأجرب معلومتك القيمة و أخبرك بالنتائج

لكن تبين لى أن المشكلى فى ترتيب المكتبات  لاحظ ترتيب مكتبة DAO 306

فمع هذا الترتيب لا يعمل الكودno.PNG.1f1a622a00f7a430e2428ed4404137c1.PNG

و هنا يعمل بعد تغيير الترتيب

592542aba809f_ACCDB.PNG.cc588dbc1104bd959bdfb529bbf31656.PNG

 

كلامك مضبوط 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

أشكرك على هذه الهدية القيمة

و يا ليت أجد تفسيرا للصورتين السابقتين

أعتقد أن ترتيب المكتبات يؤثر فى أى مكتبة ستفسر الكود

و الله أعلم

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

مرحبا اخي عبدالفتاح وعذرا على التاخير فقد غاب عني هذا الموضوع

بالنسبة لترتيب المكتبات لازم اعمل تست واعود لك وقد يكون فعلا له تاثير مع اعتقادي بان اصدار الاكسس هو الاهم

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

1. لاستخراج اخر سجل

DMax("id", "table1")

2. لاستخراج قبل الاخير

DMax("id", "table1", "id<>" & DMax("id", "table1"))

ويمكن توظيفهم في استعلام تحديث 

تحياتي للجميع

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

هايل جدا

فكرة مبتكرة

لكن فى هذا الموضوع سنستخدم مع حقل السنة

شاء الله أن يفيض هذا الموضوع بكنوز برمجة الأكسيس

وفقكم الله

جار التجربة

وقد نعود إن شاء الله

تم تعديل بواسطه عبد الفتاح كيرة
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information