ان شاء الله اليوم اجهز المثال و ارفعه مع سكربت القاعدة , اتوقع مساءً عندما يتوفر لدي الوقت
و ان شاء الله نجهز الكلاس بالمزيد من الدوال الخاصة بالحسابات و التعدادات
الله يعطيك العافية ويزيدك من علمه وفضلة
ويجزيك الف خير عن كل حرف وعن كل ثانية
اطمع بكرمك ياليت كمان كلاس للبحث
(10-04-17, 11:13 PM)khodor1985 كتب : [ -> ]السلام عليكم ورحمة الله وبركاته
الشكر كل الشكر على جهود الأخ الحبيب أبو ليلي،
أخي العزيز سندباد نصيحة من أخ إلى أخ ابتعد عن لغة VB.Net وتعلم لغة C#، فعلى علمي أنك تسعى لتعلم هذه اللغة فلا تضيعها.
أتمنى لكم التوفيق
شكرل لك اخي / خضر شكرا على النصيحة الله يجزيك الف خير.
(11-04-17, 03:12 AM)ابو ليلى كتب : [ -> ]اخي السندباد , اتبع نصيحة الاخ خضر اذا كنت تنظر الى المستقبل فكما قال لك #C مستقبلها اكبر و دعمها اوسع
انا من ناحيتي لا اتبع نظام محدد اعمل على اكثر من لغة و في عملي البرمجة منطق لا يهمني كثيراً باي لغة تكتب الكود بقدر ما يهمني فهمي للكود و الية عمله و في النهاية الفارق بين اللغات هو طريقة كيفية كتابة الكود من ناحية المحرر
و اما الدعم و المكاتب فهي تتجه مع #C اكثر من غيرها من لغات منصة الدوت نت
بالنسبة للمثال سارفعه و ارفع معه سكربتين للقاعدة واحد على نسخة 2014 و الثاني على نسخة 2008
البرنامج على VS2015
بالنسبة للكلاس اضفنا له دوال جديدة خاصة بالبحث بطريقتين
الطريقة الاولى و هي خاصة بفحص قيمة اي حقل قبل الحفظ لكي لا تتكر لدينا المعلومات يمكنك تخصيصها في الكلاسات الفرعية مع اي حقل تريده و هي تعود بقيمة منطقية بوليانية تدل على تكرار القيمة من عدمها
و الطريقة الثانية و هي خاصة بالبحث العام و الحصول على نتيجة و وفقاً لها ننتقل الى السجل الموافق للبحث في شاشة العرض
و هي طريقة مرنة تقبل البحث باي حقل تحدده انت و يمكنك تخصيصها مع اي كلاس فرعي
و يمكنك بناء اي عدد من الحقول و البحث ضمنها بسهولة و يوجد لها ربط في برنامجنا
اضفنا للكلاس ايضأ دالة جديدة تقوم بعملية جمع قيم حقل رقمي وفق شرط و كذلك يمكن تخصيصها مع اي كلاس فرعي
قمنا بتخصيصها في جدول الدفعات مع حقل قيمة الدفعة لحساب مجموع دفعات كل طالب
اما من ناحية البرنامج فقد تم مراجعة و تنظيم الكود بطريقة فنية و تم ادراج معالجة للادخالات الفارغة و كذلك ضبط عمليات باقي العمليات بشكل متكامل
المثال مصغر و فيه تقريباً كل ما تحتاج له مع امكانية التوسيع .
بعد ان تكون قد ركبت القاعدة يتوجب عليك تغير اسم السيرفر في اعدادت البرنامج وفق الصورة
و بعدها شغل البرنامج و جرب العمليات
واجهة البرنامج
الف شكر اخي / ابو ليلى
على النصيحة وعلى كل الجهد والوقت المبذول.
الله يجزيك الف الف الف خير على كل ما قدمته.
بالنسبة للسي شارب باذن الله مواصل تقدمي بها ولكن على استحياء قليلا قليلا ووجدت تشابه في السي شارب والفجوال بيسك لذلك احاول الجمع بينها لاني اجد الفجوال اسهل لانها مطورة من اللغة القديمة فجوال بيسك 6 التي اجيد القليل منها.
الف الف الف شكر
الله يعطيك العافية والصحة يا ابا ليلى على المثال الرائع
وزادك الله من علمه
(13-04-17, 01:24 PM)Amir_alzubidy كتب : [ -> ]شكرا جزيلا اخي ابو ليلى
جزاكم الله خيرا و اسأل الله ان يرزقك ما تتمنى
و ان يبارك لك في علمك و عملك و اهلك و طاعتك و كل ما تحب و احببت .
اللهم آمين
شكراً لك اخي امير و جازاك الله خيراً على دعواتك .
شكرا جزيلا ساحاول ان افهم الكود لقد حولته على قاعدة بيانات FireBird ولم اغير الا نص الاتصال فقط وهذه ميزة العمل بشكل طبقات لا تحتاج الى تغيير الكثير من الكود
PHP كود :
csb.ServerType = FbServerType.Default
csb.Port = 3050
csb.Password = "masterkey"
csb.UserID = "sysdba"
csb.Database = "localhost"
csb.Dialect = 3
csb.Database = "Studants_Db.fdb"
SetConnectionString = csb.ConnectionString
هناك الذي لم أفهمه ، اي منطقيته من الوهلة الاولى
مثلا يتم تعبئة جدول الدفعات لكل الطلاب سواء للطالب الذي نعرض سجله الان او الذي لم ننتقل له ابدا
PHP كود :
Private Sub FillPayes()
Dt_Payes = Payes.FillTable(CType(Lb_ID.Text, Integer))
DG_Payes.DataSource = Dt_Payes
RenameGridColumns()
If Dt_Payes.Rows.Count > 0 Then
Txt_AllPayes.Text = Payes.Sum_Payes(CType(Lb_ID.Text, Integer))
Else
Txt_AllPayes.Text = 0
End If
End Sub
ومن تجربتي عندي قاعدة لا تعرض الا ما تحتاجه فقط ، ولا تجلب بيانات لا يراها المستخدم
وليست هذه المشكلة فحسب ان تعبئة جدول Payes يعود عدة مرات لعملية Fill واعتقد حتى في جدول Student لو كان هذا حقيقي وهذا ما افعله في احدى المنظومات التي تعمل على شبكة ستكون مشكلة كبيرة
حسنا لقد يتم تعبئة جدول Pa بكل البيانات لكل الطلاب هذه ملاحظة اذا لم تكن مشكلة فهي اذا ليست مشكلة
مع انني ارى ولست بمنزلة خبرتكم ان يتم احظار بيانات فقط اول سجل .
ايضا عند النقر على زر الحركة يتم الدخول للاجراء Fill_TableWithCoundition مرتين وليس مرة واحدة ولازلت ابحث عن سبب المشكلة ولماذا ومن اين جاء الامر او الايعاز بتعبئة البيانات مرة اخرى .
عفوا تصحيح جدول PayMents_TB لايوجد خيار تعديل
المشكلة في الحدث BnStudant_CurrentChanged وايضا BnStudant_CurrentChanged هما المسؤلان عن هذا التكرار لتعبئة الجدول مرتين
طبعا ان وجود الامر DS.clear يحل المشكلة ولكن المفترض ان يتم توحيد الحدثين وما فيهما يكون بحدت واحد منهما فقط لاجل كود نظيف
PositionChange يتشارك مع الحدث
CurrentChanged هنا تكمن المشكلة
وعندما الغيت الحدث
PositionChange سار كل شئ على مايرام الان
ايضا في زر الحفظ اجد اعادة ملئ البيانات من جديد
PHP كود :
'اعادة لملئ
Dt_Studant = Studant.FillTable
سواء في الاضافة او التعديل ، اليس من الافضل هو اضافة السجل الجديد الى الـ Table دون الحاجة الى ارسال امر تحديث او تعبئة من جديد .
طبعا لا مشكلة هنا على برنامج صغير وعلى جهاز محلي ولكن بحال كان الجهاز هذا جهاز طرفي ويتصل بسيرفر على بعد عدة حجرات بسلك طوله 20 متر ويجلب بيانات 100 ألف سجل فارى انها مشكلة والمفروض ان ننتج مثال جيد يصلح لكل الاحوال
في الحذف ايضا يوجد امر التعبئة
PHP كود :
'حذف الطالب
Pos = BnStudant.Position
Studant.Delete(CType(Lb_ID.Text, Integer))
'اعادة لملئ
Dt_Studant = Studant.FillTable
عند حذف سجل من جدول المؤشر يتوقف تلقائيا على اخر سجل فيه .
يعني ايضا لا حاجة للتعبئة ، وان كان هناك ما يحتاج الى ضبط يتم ضبطه يدويا .
بالنسبة لعملية الحذف من الممكن الغاء امر التعبئة واستخدام هذا الامر
PHP كود :
Dt_Studant.Rows(BnStudant.Position).Delete()
ايضا لحل مشكلة التعبئة في زر الحفظ لامر تعديل هو عدم التعبئة اطلاقا لان البيانات التي بالادوات هي نفسها التي تم حفظها ولا تحتاج الى اي تغيير
اما عند الاضافة فسوف اعود معكم بعد ساعة لانني خارج في مهمة خارج المنزل
اخ ابو ليلى وجدت ان الغاء هذه الاسطر كفيلة بحل مشكلة التعبئة من جديد حيث تغنينا عن التعبئة مرة اخرى
PHP كود :
'اعادة لملئ
Dt_Studant = Studant.FillTable
BnStudant.DataSource = Dt_Studant
'اعادة التوجيه
If Add_Edit = True Then
BnStudant.MoveLast()
Else
BnStudant.Position = Pos
End If
سواء للحفظ او الاضافة