تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشروع التعامل مع قواعد البيانات من خلال الكلاسس
#4
السلام عليكم و رحمة الله و بركاته
الاخ الكريم,
بما ان المثال لديك اعتمد على الجداول في مثالي السابق , فلن اتكلم كثيراً عنه.
لكن ما الفائدة من كتابة نمط ثابت اقصد طريقة انشاء Properitys عن طريقة كتابتها يدوياً في الكود البرمجي.
ليس من فائدة تذكر لانك تستطيع استخدام زر التاب مرتين و يقوم المحرر بانشاء الخصائص بسرعة لك او عن طريق المؤشر الذكي في المحرر.
ما يهمني صراحة هو استخدام الفئات المتقدمة في قلب اللغة لتقوم هي بانشاء الخصائص و الانواع و كل شيئ احتاجه عن طريق فئة قاعدية انا اقوم ببرمجتها و توريثها و هي تتكفل بباقي العمل  (Reflection) هي الحل لهذا الموضوع 
بطريقة بسيطة يمكنني اختصار الكثير مما سبق في مثالي وفق مثال ساقدم شرح بسيط عنه هنا.
من جهة اخرى يجب ان تمتلك طريقة لتقوم وحدها بالتعرف على الجدول و حقوله و انواع الحقول فيه و تقوم هي نفسها باجراء عمليات التحويل لتتطابق مع انواع اللغة و ما يقابلها  (اعرف انك تملك الطريقة) و انتظر منك ان تقوم بها بالشكل الاوسع في مثالك القادم.
ما رايته في المثال بسيط و هو بمثابة كتابة اسطر و نسخها الى الواجهة (لديك اكثر من ذلك) فقط افرج عنه  Dodgy
----------------------------------------------------------------------
بالنسبة للمثال الذي اقصده تابع معي هذه الكلاسات البسيطة و ستعرف ما اقصده عند دراسته.
مثلاً لدي برنامج لاحد الاخوة و هو يخص عمله (المثال هنا مختصر).
يتالف من 3 جداول (جدول تصنيفات-جدول محتوى - جدول حلقات او اجزاء)
البرنامج لهاوي مسلسلات و افلام بالمختصر

الجداول الثلاثة تنشئ عبر كلاسات بسيطة وفق ما يلي.
PHP كود :
Public Class tblCategory
    Public id 
As Integer
    Public CategoryName 
As String
End 
Class 
PHP كود :
Public Class tblSubVideo
    Public id 
As Integer
    Public SubVideo 
As String
    Public LinkVideo 
As String
    Public VideoId 
As Integer
End 
Class 
PHP كود :
Public Class tblVideo
    Public id 
As Integer
    Public VideoName 
As String
    Public CategoryId 
As Integer
End 
Class 
كما تلاحظ لم ادخل في اي نوع من الخصائص او غيرها مجرد حقول بسيطة.
الان ننتقل الى الفئة القاعدية المسؤولة عن العمل
PHP كود :
Imports System.Reflection
Public Class Cls_TableBase(Of Cls_TableBase)
 
   Public TableName As String
    Public Entry 
As String
    Public Table 
As DataTable

    Public Sub 
New()
 
       TableName GetType(Cls_TableBase).Name
        Entry 
TableName.Remove(03)
 
       TableFromFileds()
 
   End Sub




    Private 
Function TableFromFileds() As DataTable
        Dim Types
() As String = {"Int32""Int64""String""Object""DateTime""Date"}
 
       Table = New DataTable(GetType(Cls_TableBase).Name)

 
       Dim MyField As FieldInfo() = GetType(Cls_TableBase).GetFields()
 
       For i As Integer 0 To MyField.Length 1

            If Types
.Contains(MyField(i).FieldType.NameThen
                Dim Column 
As New DataColumn With {.ColumnName MyField(i).Name, .DataType MyField(i).FieldType}
 
               If Not Table.Columns.Contains(Column.ColumnNameThen
                    If MyField
(i).Name "id" And MyField(i).FieldType.Name "Int32" Then
                        With Column
                            
.AutoIncrement True
                            
.AutoIncrementSeed 1
                            
.AutoIncrementStep 1
                            
.AllowDBNull False
                        End With
                    End 
If
 
                   Table.Columns.Add(Column)
 
               End If

 
           End If
 
       Next i

        Return Table
    End 
Function 
اضف مديول (Module) كما بالشكل التالي , المديول ليس لها علاقة بعملنا و فكرتنا و لكن ليعمل معك المثال فقط

PHP كود :
Module ML_MyExten
    Dim Myds 
As New DataSet()
 
   Public Function GenrateDataset(Table As DataTable) As DataSet
        Myds
.Namespace = "AboLayla"
 
       If Not (Myds.Tables.Contains(Table.TableName)) Then
            Myds
.Tables.Add(Table)
 
       End If
 
       Return Myds
    End 
Function


 
   <Runtime.CompilerServices.Extension>
 
   Public Sub GenrateRelations(DS As DataSet)
 
       If Myds.Tables.Count 3 Then
            Dim Relation1 
As DataRelation = New DataRelation("Re1"Myds.Tables(0).Columns("id"), Myds.Tables(1).Columns(2))
 
           Myds.Relations.Add(Relation1)
 
           Dim foreignKey1 As ForeignKeyConstraint Relation1.ChildKeyConstraint
            foreignKey1
.DeleteRule Rule.Cascade
            foreignKey1
.UpdateRule Rule.Cascade
            foreignKey1
.AcceptRejectRule AcceptRejectRule.Cascade

            Dim Relation2 
As DataRelation = New DataRelation("Re2"Myds.Tables(1).Columns("id"), Myds.Tables(2).Columns(3))
 
           Myds.Relations.Add(Relation2)
 
           Dim foreignKey2 As ForeignKeyConstraint Relation2.ChildKeyConstraint
            foreignKey2
.DeleteRule Rule.Cascade
            foreignKey2
.UpdateRule Rule.Cascade
            foreignKey2
.AcceptRejectRule AcceptRejectRule.Cascade

        End 
If
 
   End Sub

End Module 
الان ناتي الى النموذج , ادرج نموذج و ضع عليه 3 كائنات  DataGridView 
كل واحد يخص جدول محدد

كود النموذج

PHP كود :
Imports System.Xml

Public Class Form1
    Dim Catogary 
As New Cls_TableBase(Of tblCategory)
 
   Dim Video As New Cls_TableBase(Of tblVideo)
 
   Dim SubVideo As New Cls_TableBase(Of tblSubVideo)
 
   Dim Path As String Application.StartupPath "\DB.xml"
 
   Shared DS As New DataSet
    Dim BnCat
BnVideoBnSubvideo As New BindingSource


    Private Sub BtnSaveXml_Click
(sender As ObjectAs EventArgsHandles BtnSaveXml.Click
        DS
.WriteXml(Path)
 
   End Sub

    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        DS 
GenrateDataset(Catogary.Table)
 
       DS GenrateDataset(Video.Table)
 
       DS GenrateDataset(SubVideo.Table)
 
       DS.GenrateRelations()


 
       If Not IO.File.Exists(PathThen
            DS
.WriteXml(Path)
 
       End If


 
       BnCat.DataSource DS.Tables(Catogary.TableName)
 
       BnVideo.DataSource BnCat
        BnVideo
.DataMember "Re1"

 
       BnSubvideo.DataSource BnVideo
        BnSubvideo
.DataMember "Re2"

 
       DataGridView1.DataSource BnCat
        DataGridView2
.DataSource BnVideo
        DataGridView3
.DataSource BnSubvideo


        If IO
.File.Exists(PathThen
            DS
.ReadXml(Path)
 
       End If

 
       GenrateDataGridViewStyle(DataGridView1, {"id"})
 
       GenrateDataGridViewStyle(DataGridView2, {"id""CategoryId"})
 
       GenrateDataGridViewStyle(DataGridView3, {"id""VideoId"})

 
   End Sub

    Private Sub CreateDoc
()
 
       If Not IO.File.Exists(Application.StartupPath "\DB.xml"Then

            Dim Doc 
As New XmlDocument

            Doc
.AppendChild(Doc.CreateElement("tblCategory"))
 
           For Each column As DataColumn In Catogary.Table.Columns
                Doc
.DocumentElement.AppendChild(Doc.CreateElement(column.ColumnName))
 
           Next
            Doc
.Save(Application.StartupPath "\DB.xml")
 
           Doc Nothing
        End 
If

 
   End Sub


    Private Sub GenrateDataGridViewStyle
(Dgv As DataGridViewColumnsToHide() As String)
 
       Dgv.AutoSizeRowsMode DataGridViewAutoSizeRowsMode.AllCells
        If Dgv
.Columns.Count 0 Then
            For Each column 
As DataGridViewColumn In Dgv.Columns
                If ColumnsToHide
.Contains(column.NameThen
                    column
.Visible False
                Else
                    column
.AutoSizeMode DataGridViewAutoSizeColumnMode.Fill
                End 
If
 
           Next
        End 
If

 
   End Sub


End 
Class 
الكود يتعامل مع قاعدة بيانات Xml لكي لا ندخل في قواعد بيانات
الكود هنا مبسط لغرض انارة حول تقنية Reflection .

ادرس Reflection جيدأ و سترى اكوادك اصبحت قادرة على انجاز اشياء لم تتصورها بهذه السهولة.

من الاضافات الجميلة استخدمتها في احد المشاريع 
اذا كنت تحب التجميل

اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: viv , sendbad100


الردود في هذا الموضوع
RE: مشروع التعامل مع قواعد البيانات من خلال الكلاسس - بواسطة ابو ليلى - 10-05-18, 01:12 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مثال حفظ البيانات حسب النوع مصمم هاوي 4 552 13-10-25, 05:06 PM
آخر رد: justforit
  [مشروع] مشروع إدارة الأقساط قابل للتعديل musalem 7 2,120 07-02-25, 08:09 PM
آخر رد: الورد2
  [VB.NET] مشروع لارسال اشعارات مثل push notifications للهواتف ميدو الفنان 1 840 30-01-25, 12:42 AM
آخر رد: Mina Botros
  [مشروع] مشروع ادارة المراكز الطبية رضوان الجماعي 9 4,722 05-11-24, 03:48 PM
آخر رد: hum100
  برنامج التعامل مع السكانر وتحويل الصور إلى PDF F.H.M 0 655 04-11-24, 02:08 PM
آخر رد: F.H.M
Wink [مشروع] مشروع انشاء برنامج يقوم بالتقاط اللون من اسفل المؤشر وتحويلة للهكس كود وار جي بي ahmadpal 2 1,755 01-10-24, 05:33 PM
آخر رد: مصمم هاوي
  ربط ملف قاعدة بيانات اكسيس بالويب من خلال فيجوال بيسك دوت نت بسهولة ggtt17121985 0 713 19-07-24, 05:07 PM
آخر رد: ggtt17121985
  مشروع ضغط و صيانة قاعدة بيانات vb.net sql server غزة العزة 1 727 03-06-24, 05:12 PM
آخر رد: salamandal
  مشروع تكبير حجم الخط عند جعل الفورم max في سي شارب العتيق 0 426 02-06-24, 10:24 PM
آخر رد: العتيق
  [سلسلة تعليمية] مشروع برنامج بحث وحذف وتحديث البيانات في فايربيس vb . net الجزء الثاني ahmadpal 1 2,274 10-04-24, 04:36 AM
آخر رد: emadahmed1995

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم