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

Foksh

الخبراء
  • Posts

    3061
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    119

كل منشورات العضو Foksh

  1. نيابة عن الأستاذ الفاضل @ابو البشر ، وبعد محاولة فهم طريقة عمل الكود في مشاركته الأصلية ، تفضل الكود التالي أخي @figo82eg . في حدث عند النقر للزر :- Private Sub أمر1_Click() Dim db As DAO.Database Dim rsOld As DAO.Recordset Dim rsNew As DAO.Recordset Dim rsDifferences As DAO.Recordset Dim fld As DAO.Field Dim recordFound As Boolean Dim commonFields As Collection Dim fieldName As Variant Set db = CurrentDb Set rsOld = db.OpenRecordset("BASIC_DATE") Set rsNew = db.OpenRecordset("Sap_Data") Set rsDifferences = db.OpenRecordset("DifferencesTable", dbOpenDynaset) DoCmd.SetWarnings False DoCmd.RunSQL "DELETE FROM DifferencesTable;" DoCmd.SetWarnings True Set commonFields = New Collection For Each fld In rsOld.Fields On Error Resume Next If Not IsNull(rsNew.Fields(fld.Name).Name) Then If fld.Name <> "CRN" Then commonFields.Add fld.Name, fld.Name End If End If On Error GoTo 0 Next fld Do While Not rsOld.EOF recordFound = False rsNew.MoveFirst Do While Not rsNew.EOF If rsOld("CRN") = rsNew("CRN") Then recordFound = True For Each fieldName In commonFields If Nz(rsOld(fieldName), "") <> Nz(rsNew(fieldName), "") Then rsDifferences.AddNew rsDifferences("ID") = rsOld("CRN") rsDifferences("ChangeType") = "Modification" rsDifferences("FieldName") = fieldName rsDifferences("OldValue") = rsOld(fieldName) rsDifferences("NewValue") = rsNew(fieldName) rsDifferences.Update End If Next fieldName Exit Do End If rsNew.MoveNext Loop If Not recordFound Then rsDifferences.AddNew rsDifferences("ID") = rsOld("CRN") rsDifferences("ChangeType") = "Deletion" rsDifferences("FieldName") = "" rsDifferences("OldValue") = "Record Deleted" rsDifferences("NewValue") = "" rsDifferences.Update End If rsOld.MoveNext Loop rsNew.MoveFirst Do While Not rsNew.EOF recordFound = False rsOld.MoveFirst Do While Not rsOld.EOF If rsNew("CRN") = rsOld("CRN") Then recordFound = True Exit Do End If rsOld.MoveNext Loop If Not recordFound Then rsDifferences.AddNew rsDifferences("ID") = rsNew("CRN") rsDifferences("ChangeType") = "Addition" rsDifferences("FieldName") = "" rsDifferences("OldValue") = "" rsDifferences("NewValue") = "Record Added" rsDifferences.Update End If rsNew.MoveNext Loop rsOld.Close rsNew.Close rsDifferences.Close Set rsOld = Nothing Set rsNew = Nothing Set rsDifferences = Nothing Set db = Nothing MsgBox "تمت مقارنة الجداول وتم تخزين جميع التغييرات في DifferencesTable." DoCmd.OpenQuery "abo_1", acViewNormal End Sub الملف بعد التعديل : مقارنة بيانات.accdb
  2. أخي سامر ، دائماً ما نوجه الأخوة الذين يصادفهم مشاكل ألى ضرورة بناء الجداول بشكل سليم وصحيح ، وفي حالة مشروعك لا يسعني إلا تقديم المساعدة في الجزء الأول فقط . التعديل الذي رأيته صحيحاً بالنسبة لي ما يلي :- مصدر بيانات الكومبوبوكس المحول منه = رقم المخزن1 = سليم مع إضافة كود لتحديث الكومبوبوكس المحول اليه ( التوضيح لاحقاً ) مصدر بيانات الكومبوبوكس المحول اليه = رقم المخزن المحول اليه = مع إضافة شرط لإستعلام مصدر بياناته بحيث تم إضافة شرط في الحقل رقم المخزن كالآتي :- <>[Forms]![نموذج1]![المحول منه] بحيث يتم عرض المخازن التي ليست في المخزن المحول منه . الملف بعد التعديل Transfer (1).accdb وأضف على ما سلف ، هذا استعلام يعطيك اجمالي الكمية الواردة والمنصرفة لكل صنف حسب المخزن ، وطبعاً الشروط تستطيع إدارتها كما هي حاجة مشروعك ، قم بإنشاء استعلام جديد وألصق الكود التالي فيه ، واختر المخزن 1 أو 2 SELECT [حركة صنف].[رقم الصنف], Sum([حركة صنف].[الكمية الواردة]) AS إجمالي_الواردة, Sum([حركة صنف].[الكمية المنصرفة]) AS إجمالي_المنصرفة, الاصناف.[اسم الصنف] FROM الاصناف INNER JOIN [حركة صنف] ON الاصناف.[كود الصنف] = [حركة صنف].[رقم الصنف] WHERE ((([حركة صنف].[رقم المخزن2])=[Forms]![نموذج1]![المحول منه])) GROUP BY [حركة صنف].[رقم الصنف], الاصناف.[اسم الصنف];
  3. لا يظهر في التقرير ما ذكرته
  4. هكذا ؟؟ base_TN.accdb
  5. وعليكم السلام ورحمة الله وبركاته أخي @سامر محمود .. إضافةً لما تقدم به أستاذنا ومعلمنا ووالدنا الحبيب @ابوخليل ، اعتقد ان بنية الجداول لديك قد تكون الى حد ما غير سليمة أو غير مكتملة ,, وعليه فإن لي اقتراح بتنفيذ فكرة معلمي الحبيب بأن يكون لديك جدول واحد فقط للحركات ويضم عمليات البيع والشراء وحركة الأصناف ... إلخ كاملة في هذا الجدول . وللسير في تنفيذ ذلك قمت بالتعديل التالي ( رغم انني غير مقتنع بأن تكون أسماء الحقول باللغة العربية ) قمت بإنشاء جدول "الحركات" ويضم جميع الحركات السابق ذكرها ، مع ربط العلاقات بالشكل الذي رأيت أنه منطقي . الق نظرة على هذا التعديلات في المرفق التالي :- Transfer.accdb
  6. ظننت الأمر قد لا يحتاج إلى شرح . على العموم الفكرة بسيطة جداً وهي أن نتجه لأن يكون عدد التنبيهات في مربع نص ، ونستخدم التنسيق الشرطي كما في المثال المرفق التالي بحيث يصبح لون خلفية مربع النص أحمر إذا كان هناك عدد تنبيهات ، وأخضر إذا لم يكن هناك تنبيهات . base_TN.accdb
  7. جزاك الله خيراً أخي الكريم على مجهودك هدية مقبولة منك
  8. وعليكم السلام ورحمة الله وبركاته .. الأمر ان شاء الله يسير أخي الكريم @moho58 . بدايةً لتطبيق فكرتك يجب أن نضع شرط إضافي في استعلام مصدر سجلات النموذج frm_agenda_suive في الحقل oui_non = False ليتم إظهار السجلات الغير منجزة فقط . ثانياً بما انك تريد عرض عدد السجلات في اللليبل تسمية154 في النموذج wajiha ، هنا لا بد من جعل الاستدعاء لجلب العدد في حدث عند التحميل بحيث يصبح بالشكل التالي :- Private Sub Form_Load() Me.تسمية154.Caption = DCount("*", "tab_agenda_suive", "oui_non = False") End Sub وإذا عزمت على تحويله الى مربع نص غير منضم ، فاجعل قيمة مصدر بياناته بهذا الشكل :- =DCount("*", "tab_agenda_suive", "oui_non = False") بعد تعديل المشاركة هذه ( سهوت عن إضافة فكرة عدد الأيام المتبقية للإنجاز ) قمت أولاً بإنشاء استعلام جديد ، وأضفت فيه حقول الجدول كما في السابق ولكن مع إضافة حقل جديد ، وأضفته كمصدر سجلات النموذج بدلاً من استخدام الجدول كمصدر سجلات بشكل مباشر :- عدد الأيام المتبقية: DateDiff("d",Date(),tab_agenda_suive.date_fait) لحساب عدد الأيام المتبقية من تاريخ اليوم حتى تاريخ الإنجاز المتوقع . ثالثاً وأخيراً في زر الجرس اجعل الحدث عند النقر لفتح النموذج frm_agenda_suive مثالك بعد التعديل : base_TN.accdb
  9. مشكور ، والله يعطيك العافية على مجهودك.. اتفق معك تماما في المثال 2 ، ولا أخالفك الرأي في باقي الأمثلة أو التقليل من أهمية موضوعك لا سمح الله ، لكن في الريجستري يجب ان تكون ضليعاً في التعامل معه وبحذر - كما قلت - ولكن كموضوع تم طرحه ليست الفكرة ان نقوم بإنشاء أكواد فقط ، بل دعمها بأفكار تنفيذية حتى يثبت الموضوع جدارته في ما هو قادر على فعله . كمثال وليس الحصر ، هل تستطيع من خلال الكود التعرف على البرامج المثبتة على الكمبيوتر وجلب مسار تثبيت كل برنامج والإصدار له والمساحة التي استخدمها ( مساحة مجلد البرنامج ) ... إلخ ❗وجميع هذه النقاط أفضل طريق لها هو الريجستري 😉
  10. الله يعطيك العافية على مجهودك اخي الكريم @Ahmos . عندي نقطة اذا سمحت بتوضيحها لي وهي ؛ ما الهدف من الفكرة والذي سيحققه الكود من الريجستري !!!!!! ارجو التوضيح بشكل مبسط 😇
  11. وعليكم السلام ورحمة الله وبركاته.. ما يجب التحقق منه عدة نقاط ، أذكر منها :- 1. تحقق من لغة الـ Unicode في الويندوز . 2. تنسيقات الوقت والتاريخ في الويندوز . 3. نسخة الأوفيس وإصدارها . 4. بعد النقطة 3 اذا كان الملف مفتوح المصدر قم بضغط وإصلاح القاعدة على نفس الجهاز . 5. الأصل و قبل هذا كله ، التأكد من سلامة قاعدة البيانات والتنسيقات لهذه العناصر ( مربعات النص ) ومصادر بياناتها في الجداول . 💡 هذا من وجهة نظري والله أعلم.
  12. العفو يا صديقي ، إذا انتهت مشكلتك ووجدت الحل ، قم بإغلاق الموضوع باختيار افضل اجابة 🙏
  13. اخي الكريم ، اذا كان هدفك هو فتح النموذج بشرط السجل المحدد :- DoCmd.OpenForm "calculated_frm", , , "CustomerID = " & Me!CustomerID او ، قم بالتوضيح كونك قمت بتعديل طلبك في المشاركة الأولى
  14. أهلا بك أخونا Hema24 ، نرجو ان تجد ما تحتاجه من معلومة في عالمنا المتواضع هنا . بداية عليك ان تلتزم ببعض القوانين هنا ليسهل على ما يساعدك ايجاد الحل المناسب لك بحيث :- ارفاق ملف بسيط يساعد في فهم المطلوب الذي تريده . حاول الابتعاد عن المسميات العربية والتيتتضمن مسافات في اسماء الحقول والجداول والنماذج ... الخ , وكذلك ان لا تجعل أسماء الحقول والعناصر تبدأ بأرقام ، ولا تستخدم اسماء محوزة لآكسيس مثل (Name , Date , From , To .... إلخ ) . الشرح الوافي والكافي والواضح للمطلوب مستقبلاً كي تجعل الأمر سهلاً وعسيراً على من يقدم المساعدة لك . ايضاً اهتم بالعنوان ليكون ذا دلالة على المطلوب كعنوان . الآن فيما يخص طلبك :- على افتراض ان اسم النموذج : Form1 اسم مربع النص الذي تريد نقل قيمته والموجود في النموذج : TextBox1 اسم النموذج الثاني : Form2 اسم مربع النص الذي خصائصه غير ممكن ومخفى : TextBox2 الآن لنفترض انه من خلال الزر Command2 تريد فتح النموذج الثاني Form2 ، وعليه فإن كود الزر سيكون كما يلي :- DoCmd.OpenForm "Form2", acNormal Forms!Form2!TextBox2 = Me.TextBox1 طبعاً خصائص مربع النص غير ممكن و مخفي لا علاقة لها بالحل ، وهذا مرفق بسيط لتتوضح الصورة لديك :- Test.accdb
  15. وعليكم السلام ورحمة الله وبركاته أخي الكريم @2saad .. حاول جعل الشرط في الحقل id_student في استعلام النموذج يكون في الخانة Or بدلاً من الخانة Criteria .. ثم تأكد من مصدر مربعات النص التي لديك في النموذج حتى يتم عرض بيانات الطالب الذي اخترته . كما ارجو منك ان تتأكد من اسم الكومبوبوكس ComboSaf في الشرط الموجود في استعلام مصدر بيانات stud_id ، أو الصق الاستعلام التالي بدلاً منه SELECT Tbl_student.id_student, Tbl_student.Studentname, Tbl_student.alsaf_Id, * FROM Tbl_student WHERE (((Tbl_student.alsaf_Id)=[Forms]![frm_result_end_saf_ola]![ComboSaf])); وكذلك الأمر تأكد من مصدر بيانات جميع مربعات النص في النموذج بسبب وجود أخطاء في معظمها . ملفك بعد التعديل حسب رؤيتي وفهمي لمطلوبك البحث وتعديل درجات.zip
  16. وعليكم السلام ورحمة الله وبركاته أخي الكريم غسان بدايةً وبما انك قلت انك عضو سابق في المنتدى فهذا سبب كافي لفهمك أساسيات انشاء موضوع وشروط وسياسة المنتدى ، ففي البداية أتيت بطلب ضمن سطر ونصف فقط ، وعند تزويدك بملف مرفق كان الملف دون اي بيانات ، ومع ذلك تقدم معلمنا الجليل @ابوخليل بتقديم حل يسير لك غير معقد . وتبعه المهندس @Moosak بالتعديل على ملفك وإدراج بيانات فيه - مشكوراً - وقد أضاف الحل الى الملف . ثم تبعت خطاهم بتقديم حل لك يعتمد على فكرة الفلترة ، ومع هذا تأتي الآن بتوضيح غير الذي في طلبك الأول . وهذا ما يسبب مشكلة في حصول الأخوة على حلول تساعدهم معتقدين أن من يقرأ حروفهم قد يسمع أفكارهم التي فكروا بها أثناء الطلب . متأملاً منك ارفاق الجداول والاستعلام والنموذج الذي تريد الحصول فيه على ترقيم متسلسل حسب الفلترة التي تريدها .
  17. وعليكم السلام ورحمة الله وبركاته ,, بدايةً قمت بتغيير بعض اسماء العناصر من العربية الى الانجليزية ، ولكنها ليست ذات صلة بالحل . اجعل هذا الاستعلام مصدر سجلات التقرير SELECT tbl_info_fonctionnaire.grade_poste_actuel, Sum(IIf(tbl_info_fonctionnaire.sex="ذكر" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=0 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<30,1,0)) AS عدد_الذكور_أقل_من_30, Sum(IIf(tbl_info_fonctionnaire.sex="أنثى" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=0 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<30,1,0)) AS عدد_الإناث_أقل_من_30, Sum(IIf(tbl_info_fonctionnaire.sex="ذكر" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=30 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=40,1,0)) AS عدد_الذكور_بين_30_و_40, Sum(IIf(tbl_info_fonctionnaire.sex="أنثى" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=30 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=40,1,0)) AS عدد_الإناث_بين_30_و_40, Sum(IIf(tbl_info_fonctionnaire.sex="ذكر" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=41 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=50,1,0)) AS عدد_الذكور_بين_41_و_50, Sum(IIf(tbl_info_fonctionnaire.sex="أنثى" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=41 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=50,1,0)) AS عدد_الإناث_بين_41_و_50, Sum(IIf(tbl_info_fonctionnaire.sex="ذكر" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=51 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=55,1,0)) AS عدد_الذكور_بين_51_و_55, Sum(IIf(tbl_info_fonctionnaire.sex="أنثى" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=51 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=55,1,0)) AS عدد_الإناث_بين_51_و_55, Sum(IIf(tbl_info_fonctionnaire.sex="ذكر" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=56 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=59,1,0)) AS عدد_الذكور_بين_56_و_59, Sum(IIf(tbl_info_fonctionnaire.sex="أنثى" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=56 And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())<=59,1,0)) AS عدد_الإناث_بين_56_و_59, Sum(IIf(tbl_info_fonctionnaire.sex="ذكر" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=60,1,0)) AS عدد_الذكور_أكبر_من_60, Sum(IIf(tbl_info_fonctionnaire.sex="أنثى" And DateDiff("yyyy",tbl_info_fonctionnaire.date_naissance,Date())>=60,1,0)) AS عدد_الإناث_أكبر_من_60, Count(IIf(tbl_info_fonctionnaire.sex="أنثى",1,Null)) AS عدد_الإناث_حسب_الدرجة, Count(*) AS المجموع_الكلي FROM tbl_info_fonctionnaire GROUP BY tbl_info_fonctionnaire.grade_poste_actuel; الملف بعد التعديل base_S - Copy.accdb اعتذر ، لم أر تعليق الأستاذ @ابو البشر ، ولكن له الأصل في حق الإجابة كنت في الصفحة ولم اقم بعمل تحديث لها قبل الرد أثناء كتابة الاستعلام والتجارب عليه
  18. دي ما عنديش فيها مشكلة لأني فعلاً مسطب نسختين مختلفتي الإصدار والنواة على جهاز واحد . وده اللي حصل فعلاً
  19. ما شاء الله عليك أخي الكريم @Ahmos ، أبدعت في السيطرة على الفكرة وبلورتها حسب حاجتك جزاك الله خيراً ، وبارك الله فيك وزادك علماً نافعاً
  20. أهلاً مهندسنا الغالي .. بدايةً صدقاً ليس تعدياً ولكن كانت فكرتي ان يتم انشاء استعلام مبني على استعلام فرعي بحيث عند الفلترة على سبيل المثال في المرفق الذي وضعه أخونا غسان - ( مع إنه فارغ ولا بيانات ) وجزاك الله خيراً على طرحك للبيانات - يتم الترقيم حسب القيم الموجودة في الاستعلام النهائي . لذا في مديول بسيط نضع الكود التالي :- Dim Counter As Long Function GetSequentialNumber() As Long Counter = Counter + 1 GetSequentialNumber = Counter End Function وقمت بانشاء نموذج بسيط يحتوي مربع نص كمثال على الفلترة بالتاريخ في الحقل "تاريخ المباشرة" وزر لتنفيذ الأمر بأن يتم انشاء استعلام ( داخلي ) واستعلام مبني على الاستعلام الداخلي لعد السجلات وإدراج الترقيم التسلسلي في حقل جديد . في الزر ، وضعت هذا الكود ليقوم بالمهمة :- Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim sql As String Dim userCriteria As String Dim whereClause As String If Not IsNull(Me.Txt_Date) And Trim(Me.Txt_Date) <> "" Then userCriteria = Trim(Me.Txt_Date) whereClause = "WHERE M.[تاريخ المباشرة] = '" & Format(dateValue(userCriteria), "dd-mm-yyyy") & "'" Else whereClause = "" End If sql = "SELECT (SELECT COUNT(*) FROM Table1 AS T " & _ "WHERE T.ID IN (SELECT ID FROM Table1 AS M " & _ whereClause & " ) AND T.ID <= M.ID) AS [رقم تسلسلي], " & _ "M.ID, M.[اسم الموظف], M.[اسم الدائرة], " & _ "M.[تاريخ المباشرة], M.[العنوان الوظيفي], " & _ "M.[الدرجة الوظيفية] " & _ "FROM Table1 AS M " & _ whereClause & ";" Set db = CurrentDb On Error Resume Next db.QueryDefs.Delete "Foksh" On Error GoTo 0 Set qdf = db.CreateQueryDef("Foksh") qdf.sql = sql qdf.Close DoCmd.OpenQuery "Foksh" حيث يتم انشاء استعلام داخلي ( مع أو بدون المعيار ) ، ثم يتم انشاء استعلام جديد Foksh ويتم فتحه ليتم ترقيم السجلات بتسلسل حسب عددها وليس حسب رقمها في الجدول . الملف المرفق : Ghassan - 1.accdb
  21. المرفق في مشاركة المعلم @ابوخليل يعمل على إصدارين 2019 / 2010 وهنا النسخة محفوظة على 2010 مرة أخرى بدون ضغط 5تعديل بالنشاط.accdb
  22. لا حاجة لإرسال المشروع كاملاً .. فقط الاستعلام والجداول الخاصة به ( بدون النماذج أو العناصر التي ليست لها علاقة في المطلوب ) .
  23. على حسب ما أعرف فإنه عند تحويل الملف الى Accde فإنه يأخذ تشفير إصدار نسخة آكسيس التي قامت بحفظ الملف بهذه الصيغة . وعليه فإنه ليس من السهل ان يقوم إصدار 64 بت بتحويل الملف الى Accde لإصدار 32 بت . أرجو تصحيح معلومتي إن كانت غير صائبة أو أنني قد سلكت اتجاه آخر في فهمي للحديث ورزقنا وإيكم الصحة والتوفيق والثبات على الدين
  24. وعليكم السلام ورحمة الله وبركاته ,, وهذه مشاركة مع ومعلمي الحبيب @ابوخليل أيضاً . إذا أردت الحصول على ترقيم تسلسلي منتظم بغض النظر عن الفلاتر أو عوامل التصفية داخل الاستعلام سيتوجب عليك استخدام اسلوب الاستعلام المتداخل أو الفرعي ( استعلام داخل استعلام ) وهنا الحاجة لإرسالك ملف . هذا من وجهة نظري والله أعلم
×
×
  • اضف...

Important Information