حامل المسك قام بنشر مارس 1 قام بنشر مارس 1 السلام عليكم،، ومساؤكم سعيد،، وأسأل الله في هذه اللحظات لكم البركة في الأهل والمال والولد والتوفيق لكل خير.. أساتذتنا الكرام،، لدي جدول به أسماء أشخاص ولكل واحد منهم تاريخ بدء وتاريخ انتهاء.. مثلا محمد البداية من 1/8/2018 والانتهاء 5/8/2022 المطلوب كيف يمكن استخراج الأعوام بين التاريخين بمعنى أريد جدولا آخر أو استعلاما يظهر الآتي محمد 2018 2019 2020 2021 2022 فهذه الأعوام التي بين التاريخين،، وكذلك بقية الأسماء.. مع جزيل الشكر وعظيم الامتنان،، الأعوام بين تاريخين.accdb
Foksh قام بنشر مارس 1 قام بنشر مارس 1 (معدل) اخي الكريم لعدم معرفة اسماء الحقول والجدول ، هذا تصور خيالي ، واستبدل انت اسم الجدول واسم الحقول بما يناسبك SELECT [اسم حقل الإسم], Year([تاريخ البداية]) AS السنة FROM [اسم الجدول] WHERE Year([تاريخ البداية]) >= Year([تاريخ النهاية]) اذا لم تنجح ، فأرسل ملف 😊 تم تعديل مارس 1 بواسطه Foksh
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 أستاذنا @Foksh شكر الله عطاءك وجهدك ورضي عنك.. حاولت ولكن لم تضبط معي.. حيث لم تظهر الأعوام بين تاريخين.. ودونك المثال للتكرم علينا زادكم الله من واسع فضله،، الأعوام بين تاريخين.rar
Barna قام بنشر مارس 1 قام بنشر مارس 1 9 دقائق مضت, حامل المسك said: حاولت ولكن لم تضبط معي.. حيث لم تظهر الأعوام بين تاريخين.. الأعوام بين تاريخين.accdb 1
Foksh قام بنشر مارس 1 قام بنشر مارس 1 (معدل) الأستاذ @Barna قام باقتراح جميل . وهذه تجربة ثانية SELECT [اسم الحقل], [اسم جدول].[اسم الحقل تاريخ البداية] AS البداية, [اسم جدول].[اسم الحقل تاريخ النهاية] AS النهاية, Concat(Year([تاريخ البداية]), "/", Year([تاريخ النهاية])) AS [السنوات] FROM [اسم جدول]; تم تعديل مارس 1 بواسطه Foksh إضافة تجربة 1
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 لا أدري ماذا أقول بن طرفي الكريم والجمال.. الفكرة التي وضعها أستاذنا @Barna ممتازة لكني أريد أن تكون في عمود بحيث تكون على هذا النحو بحيث يتسنى ربطها بمعلومات أخرى،، والفكرة التي كانت من أستاذنا @Foksh تحتاج أن يكتمل العقد بها حيث يظهر أول التاريخ وآخره فقط دون التواريخ التي في المنتصف حيث كانت هذه النتيجة فنحتاج كرما أن تعديل الكود بحيث يكون كل عام مستخرج بين عامين في صف متسقل مع الاسم.. مع جزيل الشكر..
Barna قام بنشر مارس 1 قام بنشر مارس 1 22 دقائق مضت, حامل المسك said: الفكرة التي وضعها أستاذنا @Barna ممتازة لكني أريد أن تكون في عمود بحيث تكون على هذا النحو تفضل حسب طلبك ..... الأعوام بين تاريخين.accdb
Foksh قام بنشر مارس 1 قام بنشر مارس 1 وأيضاً جرب هذا التعديل SELECT [اسم الحقل], [اسم جدول].[اسم الحقل تاريخ البداية] AS البداية, [اسم جدول].[اسم الحقل تاريخ النهاية] AS النهاية, Concat(Year([تاريخ البداية]), "/", Year([تاريخ البداية])+1, "/", Year([تاريخ البداية])+2) AS [السنوات] FROM [اسم جدول];
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 23 دقائق مضت, Barna said: تفضل حسب طلبك ..... سلمت .. ممتاااز جدا لكن تبقى مشكلة التكرار حيث يكرر البيانات في كل مرة.. فإذا أضفت على الجدول بيانات جديدة يكرر السابق واللاحق،، 21 دقائق مضت, Foksh said: وأيضاً جرب هذا التعديل جربت لكن لم تضبط معي.. اعذروني أيها الكرام أثقلت عليكم،،
أفضل إجابة Barna قام بنشر مارس 1 أفضل إجابة قام بنشر مارس 1 32 دقائق مضت, حامل المسك said: لكن تبقى مشكلة التكرار حيث يكرر البيانات في كل مرة. 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 الكاتب قام بنشر مارس 1 سلمتم أيها الكرام.. كتب الله أجركم ورضي عنكم.. تمت الإجابة بتكامل بناء من أساتذتنا الكرام.. لكم صادق الدعوات كتب الله أجركم ورضي عنكم وأرضاكم،،
Foksh قام بنشر مارس 1 قام بنشر مارس 1 (معدل) عذراً في التأخر بالرد بسبب فصل الانترنت لدي فكرة اخرى مشاركة مع استاذي @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 بواسطه Foksh 1
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 (معدل) 11 دقائق مضت, Foksh said: أن تصل متأخراً ، خير من أن لا تصل أنت لم تصل متأخرًا بل أنت صاحب السبق الأول والأفضال السابقة -بعد فضل الله- والكرم الجم.. تم تطبيق الكود وهذه النتيجة الجميلة.. واكتمال للفائدة لتكون معلما جميلا لكم إن أمكن أن تكون على هيئة صفوف.. بحيث يكون هناك أكثر من خيار.. لو أنني أنشدت ألف قصيدة في حقكم لوجدتها لا لا لا لا لا لا لا لن تفي تم تعديل مارس 1 بواسطه حامل المسك
Foksh قام بنشر مارس 1 قام بنشر مارس 1 (معدل) امممممم بعض التعديلات كما يلي ، ونبدأ في المديول :- 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 بواسطه Foksh
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 30 دقائق مضت, Foksh said: جرب و وافني بالنتيجة 😊 طبعاً سيكون الإستخدام للمديول عاماً وليس خاصاً ، حيث تستطيع استخدامه لأكثر من جدول مع تغيير اسماء الحقول والجدول في الاستعلام في كل مرة 🤗 لم تضبط تحتاج شيئا من التعديل حيث لم يظهر عام البدء وعام الانتهاء ولم تكن في صفوف مستقلة
Foksh قام بنشر مارس 1 قام بنشر مارس 1 (معدل) طيب ، جرب التعديل الاخير على المديول اخي @حامل المسك 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 بواسطه Foksh
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 4 دقائق مضت, Foksh said: أخبرني بالنتيجة 😊 نفس النتيجة السابقة
Foksh قام بنشر مارس 1 قام بنشر مارس 1 الان, حامل المسك said: نفس النتيجة السابقة تم تعديل الأكواد في المشاركة الأخيرة
حامل المسك قام بنشر مارس 1 الكاتب قام بنشر مارس 1 ممتاز نتيجة جيدة .. هل يمكن أن يكون كل عام في صف؟..
Foksh قام بنشر مارس 1 قام بنشر مارس 1 (معدل) اعتذر منك اخوي على تجاربي التي تكاد تلمس نجاح فكرتك ، اقوم بقراءة الكود نظرياً لعدم وجودي قرب الكمبيوتر في الوقت الحالي سأقوم بتنفيذ الفكرة غداً سعياً لانجاح الفكرة ، فليس من طبعي الوقوف عند تجربة غير ناجحة والاستسلام لها. 🤗 تم تعديل مارس 2 بواسطه Foksh تمت التجربة والكود غير فعال 1
حامل المسك قام بنشر مارس 2 الكاتب قام بنشر مارس 2 5 ساعات مضت, Foksh said: اعتذر منك اخوي على تجاربي التي تكاد تلمس نجاح فكرتك ، اقوم بقراءة الكود نظرياً لعدم وجودي قرب الكمبيوتر في الوقت الحالي سأقوم بتنفيذ الفكرة غداً سعياً لانجاح الفكرة ، فليس من طبعي الوقوف عند تجربة غير ناجحة والاستسلام لها. تعتذر وانت صاحب الفضل.. هذا من طيب المنبع وحسن التربية وجمال الأخلاق فرحم الله رحما حملك وأبا رباك.. والعلم رحم بين أهله.. والحمد لله الفائدة حاصلة بدءا بجهودك الرائعة وبمشاركة أستاذنا @Barna وإنما التكامل هنا للإثراء بجمال المعلومات واختيار أفضل الطرق.. لتكون لنا ولمن بحث وكتب ومر على هذا المنتدى الرائع.. وهذا الأثر الذي يبقى نفعه ويعم خيره.. شكرا لك @Foksh شكرًا لك @Barna قدمتم فأجدتم وأحسنتم نفعا وتكاملا.. 1
Foksh قام بنشر مارس 2 قام بنشر مارس 2 (معدل) هدفي والحمد لله تم تحقيقه تم والحمد لله تعميم الفكرة بحيث يمكن استعمالها في أكثر من جدول ، وحسب الحاجة دون تقييد . أولا انشاء المديول العام :- 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.accdb تم تعديل مارس 2 بواسطه Foksh 1
ابوخليل قام بنشر مارس 2 قام بنشر مارس 2 السلام عليكم توافقت الكتابة مع مشاركة اخي فادي الأخيرة انا ارى ان حل اخونا البرناوي نموذجي .. ولمعالجة التكرار يتم حذف البيانات من الجدول قبل كل امر على النحو التالي Private Sub أمر0_Click() DoCmd.SetWarnings False DoCmd.RunSQL "DELETE TEMP_DATE.*, * FROM TEMP_DATE" DoCmd.SetWarnings True Call InsertYears End Sub 3الأعوام بين تاريخين.accdb 1
Foksh قام بنشر مارس 2 قام بنشر مارس 2 14 دقائق مضت, ابوخليل said: توافقت الكتابة مع مشاركة اخي فادي الأخيرة معلمنا الفاضل هذا من حسن حظي بلا شك لا شك أن ألأستاذ @Barna أنتج عمل جميل وذكي ، إلا أن فكرتي كانت بتوسيع المجال ليس إلا 1 2
ابوخليل قام بنشر مارس 2 قام بنشر مارس 2 ايضا انا استعجلت في الرد فهو قد عالج مسألة التكرار بنفس الطريقة التي بينتها .. ولكني لم انتبه لتحديثه 3
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.