أحمد العيسى قام بنشر منذ 5 ساعات قام بنشر منذ 5 ساعات السلام عليكم عندى قاعدة بيانات تحتوى على الكثير من الأرقام القومية فى الحقل National_Nr والمطلوب استخراج تاريخ الميلاد من كل منهم ووضعه فى حقل Birth من خلال استعلام تحديث وأن تكون باستخدام الوحدة النمطية بنفس القاعدة CalculateDate المثال المطلوب التعديل عليه بالمرفقات شكراً جزيلاً مقدماً db1.mdb
Foksh قام بنشر منذ 4 ساعات قام بنشر منذ 4 ساعات 29 دقائق مضت, أحمد العيسى said: السلام عليكم وعليكم السلام ورحمة الله وبركاته .. دون الحاجة لإستخدام وحدة نمطية ، كانت لي تجربة سابقة من خلال استعلام تحديث مباشر ، تم تعديله ليتعامل مع مسميات الحقول والجدول لديك ، جربه :- UPDATE tbl_student1 SET Birth = DateSerial( IIf(Left([National_Nr],1)="2",1900,2000) + Val(Mid([National_Nr],2,2)), Val(Mid([National_Nr],4,2)), Val(Mid([National_Nr],6,2)) ) WHERE Len([National_Nr])=14 AND IsDate(DateSerial( IIf(Left([National_Nr],1)="2",1900,2000) + Val(Mid([National_Nr],2,2)), Val(Mid([National_Nr],4,2)), Val(Mid([National_Nr],6,2)) )); 1
أحمد العيسى قام بنشر منذ 4 ساعات الكاتب قام بنشر منذ 4 ساعات شكراً أخى Foksh على سرعة الرد تم المطلوب ،وشكراً لك لكن للمعرفة فقط ، لو تم استخدام هذه الدالة من الوحدة النمطية المرفقة Date_Sex_Province([National_Nr], 1) كيف سيكون التصميم ؟ 1
تمت الإجابة Foksh قام بنشر منذ 4 ساعات تمت الإجابة قام بنشر منذ 4 ساعات 10 دقائق مضت, أحمد العيسى said: Date_Sex_Province([National_Nr], 1) كيف سيكون التصميم ؟ سؤال جميل .. بعد الإطلاع على الوحدة النمطية ، جرب هذا الاستعلام باستدعاء الدالة :- UPDATE tbl_student1 SET Birth = Date_Sex_Province([National_Nr], 1) WHERE Len([National_Nr]) = 14 AND IsDate(Date_Sex_Province([National_Nr], 1)); 1
منتصر الانسي قام بنشر منذ 1 ساعه قام بنشر منذ 1 ساعه ملاحظة بسيطة للأخ @أحمد العيسى في طريقة الأخ @Foksh إعتبر أن أي رقم قومي يبدأ بالرقم 2 فسيكون صاحبه من مواليد ماقبل عام 2000 مالم فسيكون من بعد عام 2000 وهذا لم يؤخذ بالإعتبار في الدالة Date_Sex_Province صراحة لا أعلم إذا ما كانت هذه الملاحظة ذات أهمية أم لا ولكن ذكرتها كتنبيه عن الاختلاف بين الحلين فإذا كان الإختلاف مهم فسيكون تأثيره كبير تحياتي 1
Foksh قام بنشر منذ 1 ساعه قام بنشر منذ 1 ساعه 49 دقائق مضت, منتصر الانسي said: صراحة لا أعلم إذا ما كانت هذه الملاحظة ذات أهمية أم لا ولكن ذكرتها كتنبيه عن الاختلاف بين الحلين فإذا كان الإختلاف مهم فسيكون تأثيره كبير فعلاً ، ملاحظتك صحيحة ومهمة جداً ، وأنت محق في التنبيه عليها .. وعليه فإنه يمكن تعديل الدالة الأصلية لتصبح :- Function Date_Sex_Province(MyNumber As Variant, MyTest As Byte) Dim MyProvinces As Variant Dim r As Integer Dim yy As String Dim ty As String * 1 Dim D As String * 2, m As String * 2, y As String * 2 _ , x As String * 2, xx As String * 2 '============================================== ' يمكنك إضافة المحافظات الاخرى الغير موجودة ' او تعديل الموجود في حالات الخطأ MyProvinces = Array("01/القاهرة", "02/الإسكندرية", "03/بورسعيد", "04/السويس", "11/دمياط", "12/الدقهلية", "13/الشرقية" _ , "14/القليوبية", "15/كفر الشيخ", "16/الغربية", "17/المنوفية", "18/البحيرة", "31/البحر الأحمر", "32/الوادى الجديد" _ , "19/الإسماعيلية", "21/الجيزة", "22/بني سويف", "23/الفيوم", "24/المنيا", "25/أسيوط", "34/شمال سيناء", "35/جنوب سيناء" _ , "26/سوهاج", "27/قنا", "28/أسوان", "29/الأقصر", "33/مطروح", "88/خارج مصر") '============================================== Date_Sex_Province = "" On Error GoTo 1 If Len(Trim(MyNumber)) = 0 Then GoTo 1 End If If Not IsNumeric(MyNumber) Or Len(MyNumber) <> 14 Then Date_Sex_Province = "Error_MyNumber" GoTo 1 End If If MyTest = 1 Then D = Mid(MyNumber, 6, 2) m = Mid(MyNumber, 4, 2) y = Mid(MyNumber, 2, 2) ty = Left(MyNumber, 1) Select Case ty Case "2": yy = "19" & y Case "3": yy = "20" & y Case Else: yy = "" End Select If yy <> "" Then Date_Sex_Province = DateSerial(yy, m, D) ElseIf MyTest = 2 Then If Left(Right(MyNumber, 2), 1) Mod 2 = 1 Then _ yy = "ذكر" Else yy = "انثى" Date_Sex_Province = yy ElseIf MyTest = 3 Then x = Mid(MyNumber, 8, 2) For r = LBound(MyProvinces) To UBound(MyProvinces) xx = MyProvinces(r) If x = xx Then Date_Sex_Province = Right(MyProvinces(r), Len(MyProvinces(r)) - 3) Exit For End If Next End If 1: End Function أي أن ما تم تعديله هو الجزء :- Select Case ty Case "2": yy = y Case "3": yy = "20" & y ليصبح :- Select Case ty Case "2": yy = "19" & y Case "3": yy = "20" & y جزاك الله خيراً أخي @منتصر الانسي ، عادة لا أقوم بالتعديل على أي جزء لم يتطرق له صاحب الطلب ( معتقداً انه يلبي حاجته دون التوسع في الإحتمالات 😅 ) 1
الردود الموصى بها
انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد
يجب ان تكون عضوا لدينا لتتمكن من التعليق
انشئ حساب جديد
سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .
سجل حساب جديدتسجيل دخول
هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.
سجل دخولك الان