حامل المسك قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 السلام عليكم،، ومساؤكم سعيد،، وأسأل الله في هذه اللحظات لكم البركة في الأهل والمال والولد والتوفيق لكل خير.. أساتذتنا الكرام،، لدي جدول به أسماء أشخاص ولكل واحد منهم تاريخ بدء وتاريخ انتهاء.. مثلا محمد البداية من 1/8/2018 والانتهاء 5/8/2022 المطلوب كيف يمكن استخراج الأعوام بين التاريخين بمعنى أريد جدولا آخر أو استعلاما يظهر الآتي محمد 2018 2019 2020 2021 2022 فهذه الأعوام التي بين التاريخين،، وكذلك بقية الأسماء.. مع جزيل الشكر وعظيم الامتنان،، الأعوام بين تاريخين.accdbFetching info...
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 (معدل) اخي الكريم لعدم معرفة اسماء الحقول والجدول ، هذا تصور خيالي ، واستبدل انت اسم الجدول واسم الحقول بما يناسبك SELECT [اسم حقل الإسم], Year([تاريخ البداية]) AS السنة FROM [اسم الجدول] WHERE Year([تاريخ البداية]) >= Year([تاريخ النهاية]) اذا لم تنجح ، فأرسل ملف 😊 تم تعديل مارس 1, 2024 بواسطه Foksh
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 أستاذنا @Foksh شكر الله عطاءك وجهدك ورضي عنك.. حاولت ولكن لم تضبط معي.. حيث لم تظهر الأعوام بين تاريخين.. ودونك المثال للتكرم علينا زادكم الله من واسع فضله،، الأعوام بين تاريخين.rarFetching info...
Barna قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 في 1/3/2024 at 17:40, حامل المسك said: حاولت ولكن لم تضبط معي.. حيث لم تظهر الأعوام بين تاريخين.. Expand الأعوام بين تاريخين.accdbFetching info... 1
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 (معدل) الأستاذ @Barna قام باقتراح جميل . وهذه تجربة ثانية SELECT [اسم الحقل], [اسم جدول].[اسم الحقل تاريخ البداية] AS البداية, [اسم جدول].[اسم الحقل تاريخ النهاية] AS النهاية, Concat(Year([تاريخ البداية]), "/", Year([تاريخ النهاية])) AS [السنوات] FROM [اسم جدول]; تم تعديل مارس 1, 2024 بواسطه Foksh إضافة تجربة 1
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 لا أدري ماذا أقول بن طرفي الكريم والجمال.. الفكرة التي وضعها أستاذنا @Barna ممتازة لكني أريد أن تكون في عمود بحيث تكون على هذا النحو بحيث يتسنى ربطها بمعلومات أخرى،، والفكرة التي كانت من أستاذنا @Foksh تحتاج أن يكتمل العقد بها حيث يظهر أول التاريخ وآخره فقط دون التواريخ التي في المنتصف حيث كانت هذه النتيجة فنحتاج كرما أن تعديل الكود بحيث يكون كل عام مستخرج بين عامين في صف متسقل مع الاسم.. مع جزيل الشكر..
Barna قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 في 1/3/2024 at 18:12, حامل المسك said: الفكرة التي وضعها أستاذنا @Barna ممتازة لكني أريد أن تكون في عمود بحيث تكون على هذا النحو Expand تفضل حسب طلبك ..... الأعوام بين تاريخين.accdbFetching info...
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 وأيضاً جرب هذا التعديل SELECT [اسم الحقل], [اسم جدول].[اسم الحقل تاريخ البداية] AS البداية, [اسم جدول].[اسم الحقل تاريخ النهاية] AS النهاية, Concat(Year([تاريخ البداية]), "/", Year([تاريخ البداية])+1, "/", Year([تاريخ البداية])+2) AS [السنوات] FROM [اسم جدول];
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 في 1/3/2024 at 18:36, Barna said: تفضل حسب طلبك ..... Expand سلمت .. ممتاااز جدا لكن تبقى مشكلة التكرار حيث يكرر البيانات في كل مرة.. فإذا أضفت على الجدول بيانات جديدة يكرر السابق واللاحق،، في 1/3/2024 at 18:38, Foksh said: وأيضاً جرب هذا التعديل Expand جربت لكن لم تضبط معي.. اعذروني أيها الكرام أثقلت عليكم،،
تمت الإجابة Barna قام بنشر مارس 1, 2024 تمت الإجابة قام بنشر مارس 1, 2024 في 1/3/2024 at 19:00, حامل المسك said: لكن تبقى مشكلة التكرار حيث يكرر البيانات في كل مرة. Expand Sub InsertYears() Dim rsSource As DAO.Recordset Dim rsTarget As DAO.Recordset Dim StartDate As Date Dim EndDate As Date Dim iYear As Integer DoCmd.SetWarnings False DoCmd.RunSQL "DELETE TEMP_DATE.* FROM TEMP_DATE;" DoCmd.SetWarnings True Set rsSource = CurrentDb.OpenRecordset("date1") Set rsTarget = CurrentDb.OpenRecordset("TEMP_DATE") Do Until rsSource.EOF StartDate = rsSource!t2 EndDate = rsSource!t3 For iYear = Year(StartDate) To Year(EndDate) rsTarget.AddNew rsTarget!t2 = CStr(iYear) rsTarget!t1 = rsSource!t1 rsTarget.Update Next iYear rsSource.MoveNext Loop rsSource.Close rsTarget.Close Set rsSource = Nothing Set rsTarget = Nothing End Sub 1
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 سلمتم أيها الكرام.. كتب الله أجركم ورضي عنكم.. تمت الإجابة بتكامل بناء من أساتذتنا الكرام.. لكم صادق الدعوات كتب الله أجركم ورضي عنكم وأرضاكم،،
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 (معدل) عذراً في التأخر بالرد بسبب فصل الانترنت لدي فكرة اخرى مشاركة مع استاذي @Barna بحيث لا تتكرر البيانات ابداً . في مديول ضع هذا الكود :- Function GetYearsBetweenDates(startDate As Date, endDate As Date) As String Dim yearString As String Dim currentYear As Integer yearString = Year(startDate) currentYear = Year(startDate) Do While currentYear < Year(endDate) currentYear = currentYear + 1 yearString = yearString & "/" & currentYear Loop GetYearsBetweenDates = yearString End Function ثم استخدم هذا الاستعلام Sql SELECT [t1] AS [اسم الحقل], [date1].[t2] AS [البداية], [date1].[t3] AS [النهاية], GetYearsBetweenDates([t2], [t3]) AS [السنوات] FROM [date1]; 😁 أن تصل متأخراً ، خير من أن لا تصل تم تعديل مارس 1, 2024 بواسطه Foksh 1
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 (معدل) في 1/3/2024 at 19:59, Foksh said: أن تصل متأخراً ، خير من أن لا تصل Expand أنت لم تصل متأخرًا بل أنت صاحب السبق الأول والأفضال السابقة -بعد فضل الله- والكرم الجم.. تم تطبيق الكود وهذه النتيجة الجميلة.. واكتمال للفائدة لتكون معلما جميلا لكم إن أمكن أن تكون على هيئة صفوف.. بحيث يكون هناك أكثر من خيار.. لو أنني أنشدت ألف قصيدة في حقكم لوجدتها لا لا لا لا لا لا لا لن تفي تم تعديل مارس 1, 2024 بواسطه حامل المسك
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 (معدل) امممممم بعض التعديلات كما يلي ، ونبدأ في المديول :- Function GetYearsBetweenDatesForPerson(personName As String, startDate As Date, endDate As Date) As String Dim yearString As String Dim currentYear As Integer yearString = "" currentYear = Year(startDate) Do While currentYear <= Year(endDate) If yearString <> "" Then yearString = yearString & vbCrLf End If yearString = yearString & personName & ": " & currentYear currentYear = currentYear + 1 Loop GetYearsBetweenDatesForPerson = yearString End Function ثم الاستعلام سيكون على هذا الشكل :- SELECT GetYearsBetweenDatesForPerson([t1], [t2], [t3]) AS [السنوات] FROM [date1]; جرب و وافني بالنتيجة 😊 طبعاً سيكون الإستخدام للمديول عاماً وليس خاصاً ، حيث تستطيع استخدامه لأكثر من جدول مع تغيير اسماء الحقول والجدول في الاستعلام في كل مرة 🤗 تم تعديل مارس 1, 2024 بواسطه Foksh
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 في 1/3/2024 at 20:28, Foksh said: جرب و وافني بالنتيجة 😊 طبعاً سيكون الإستخدام للمديول عاماً وليس خاصاً ، حيث تستطيع استخدامه لأكثر من جدول مع تغيير اسماء الحقول والجدول في الاستعلام في كل مرة 🤗 Expand لم تضبط تحتاج شيئا من التعديل حيث لم يظهر عام البدء وعام الانتهاء ولم تكن في صفوف مستقلة
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 (معدل) طيب ، جرب التعديل الاخير على المديول اخي @حامل المسك Function GetYearsBetweenDatesForPerson(personName As String, startDate As Date, endDate As Date) As String Dim yearString As String Dim currentYear As Integer yearString = "" currentYear = Year(startDate) Do While currentYear <= Year(endDate) If yearString <> "" Then yearString = yearString & ", " End If yearString = yearString & currentYear currentYear = currentYear + 1 Loop ' إرجاع السلسلة المكونة من سنوات GetYearsBetweenDatesForPerson = personName & ": " & yearString End Function والاستعلام SELECT [t1] AS [اسم الشخص], [t2] AS [تاريخ البداية], [t3] AS [تاريخ النهاية], GetYearsBetweenDatesForPerson([t1], [t2], [t3]) AS [السنوات] FROM [date1]; وأخبرني بالنتيجة 😊 تم تعديل مارس 1, 2024 بواسطه Foksh
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 في 1/3/2024 at 21:07, Foksh said: أخبرني بالنتيجة 😊 Expand نفس النتيجة السابقة
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 في 1/3/2024 at 21:12, حامل المسك said: نفس النتيجة السابقة Expand تم تعديل الأكواد في المشاركة الأخيرة
حامل المسك قام بنشر مارس 1, 2024 الكاتب قام بنشر مارس 1, 2024 ممتاز نتيجة جيدة .. هل يمكن أن يكون كل عام في صف؟..
Foksh قام بنشر مارس 1, 2024 قام بنشر مارس 1, 2024 (معدل) اعتذر منك اخوي على تجاربي التي تكاد تلمس نجاح فكرتك ، اقوم بقراءة الكود نظرياً لعدم وجودي قرب الكمبيوتر في الوقت الحالي سأقوم بتنفيذ الفكرة غداً سعياً لانجاح الفكرة ، فليس من طبعي الوقوف عند تجربة غير ناجحة والاستسلام لها. 🤗 تم تعديل مارس 2, 2024 بواسطه Foksh تمت التجربة والكود غير فعال 1
حامل المسك قام بنشر مارس 2, 2024 الكاتب قام بنشر مارس 2, 2024 في 1/3/2024 at 21:46, Foksh said: اعتذر منك اخوي على تجاربي التي تكاد تلمس نجاح فكرتك ، اقوم بقراءة الكود نظرياً لعدم وجودي قرب الكمبيوتر في الوقت الحالي سأقوم بتنفيذ الفكرة غداً سعياً لانجاح الفكرة ، فليس من طبعي الوقوف عند تجربة غير ناجحة والاستسلام لها. Expand تعتذر وانت صاحب الفضل.. هذا من طيب المنبع وحسن التربية وجمال الأخلاق فرحم الله رحما حملك وأبا رباك.. والعلم رحم بين أهله.. والحمد لله الفائدة حاصلة بدءا بجهودك الرائعة وبمشاركة أستاذنا @Barna وإنما التكامل هنا للإثراء بجمال المعلومات واختيار أفضل الطرق.. لتكون لنا ولمن بحث وكتب ومر على هذا المنتدى الرائع.. وهذا الأثر الذي يبقى نفعه ويعم خيره.. شكرا لك @Foksh شكرًا لك @Barna قدمتم فأجدتم وأحسنتم نفعا وتكاملا.. 1
Foksh قام بنشر مارس 2, 2024 قام بنشر مارس 2, 2024 (معدل) هدفي والحمد لله تم تحقيقه تم والحمد لله تعميم الفكرة بحيث يمكن استعمالها في أكثر من جدول ، وحسب الحاجة دون تقييد . أولا انشاء المديول العام :- Function CreateYearsRecords(sourceTableName As String, employeeFieldName As String, startDateFieldName As String, _ endDateFieldName As String, targetTableName As String, targetEmployeeFieldName As String, targetStartDateFieldName As String, targetEndDateFieldName As String, targetYearsFieldName As String) Dim sourceRS As DAO.Recordset Dim targetRS As DAO.Recordset Dim recordStartDate As Date Dim recordEndDate As Date Dim currentYear As Integer DoCmd.SetWarnings False DoCmd.RunSQL "DELETE " & targetTableName & ".* FROM " & targetTableName & ";" DoCmd.SetWarnings True Set sourceRS = CurrentDb.OpenRecordset(sourceTableName) Set targetRS = CurrentDb.OpenRecordset(targetTableName) Do Until sourceRS.EOF recordStartDate = sourceRS.Fields(startDateFieldName) recordEndDate = sourceRS.Fields(endDateFieldName) For currentYear = Year(recordStartDate) To Year(recordEndDate) targetRS.AddNew targetRS.Fields(targetEmployeeFieldName) = sourceRS.Fields(employeeFieldName) targetRS.Fields(targetStartDateFieldName) = sourceRS.Fields(startDateFieldName) targetRS.Fields(targetEndDateFieldName) = sourceRS.Fields(endDateFieldName) targetRS.Fields(targetYearsFieldName) = CStr(currentYear) targetRS.Update Next currentYear sourceRS.MoveNext Loop sourceRS.Close targetRS.Close Set sourceRS = Nothing Set targetRS = Nothing End Function ثانياً يمكن استدعاء الدالة كما يلي :- Call CreateYearsRecords("date1", "t1", "t2", "t3", "TEMP_DATE", "EmployeeName", "StartDate", "EndDate", "Years") بحيث يتم ادراج البيانات في جدول قابل للتغيير واسماء الحقول فيه أيضاً . Get Date.accdbFetching info... تم تعديل مارس 2, 2024 بواسطه Foksh 1
ابوخليل قام بنشر مارس 2, 2024 قام بنشر مارس 2, 2024 السلام عليكم توافقت الكتابة مع مشاركة اخي فادي الأخيرة انا ارى ان حل اخونا البرناوي نموذجي .. ولمعالجة التكرار يتم حذف البيانات من الجدول قبل كل امر على النحو التالي Private Sub أمر0_Click() DoCmd.SetWarnings False DoCmd.RunSQL "DELETE TEMP_DATE.*, * FROM TEMP_DATE" DoCmd.SetWarnings True Call InsertYears End Sub 3الأعوام بين تاريخين.accdbFetching info... 1
Foksh قام بنشر مارس 2, 2024 قام بنشر مارس 2, 2024 في 2/3/2024 at 10:43, ابوخليل said: توافقت الكتابة مع مشاركة اخي فادي الأخيرة Expand معلمنا الفاضل هذا من حسن حظي بلا شك لا شك أن ألأستاذ @Barna أنتج عمل جميل وذكي ، إلا أن فكرتي كانت بتوسيع المجال ليس إلا 1 2
ابوخليل قام بنشر مارس 2, 2024 قام بنشر مارس 2, 2024 ايضا انا استعجلت في الرد فهو قد عالج مسألة التكرار بنفس الطريقة التي بينتها .. ولكني لم انتبه لتحديثه 3
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.