16-11-16, 02:50 AM
اهلا اخي شمس جدول المحتويات سيكون لكل المواضيع صممه بالشكل الذي تريد
اعرف ان الامور ستختلط عليك لان هذا النوع من العلاقات صعب جدا و التعامل معه مرير و لكن الهدف كان التوضيح فقط
لا عليك اخي شمس , باذن المولى عز و جل ساحاول ان اوجهك بطريقة جيدة لفهم الالية (حسب قدرتي)
سارفق لك ملف قاعدة البيانات و سابدأ بشرح مقتضب عبر مثال يعطيك القدرة على فهم الالية
ابدأ مشروع جديد وادرج فيه فورم (Form1) و ادرج ايضاً مديول وسميه (Connect)
سنضيف داخل المديول بعض الدوال البسيطة لتسهل علينا العمل (لكي لا نكرر كتابة الاكواد)
داخل المديول سنكتب هذه الاكواد
الاكواد بسيطة جدا و هي تقوم بالعمليات الاعتيادية (جلب البيانات وفق شرط و بدون شرط) ساقوم بشرحها الان
في هذا الكود انا اقوم بتاسيس اتصال مع القاعدة الموجودة في مجلد البرنامج و لدي دالتان واحدة تقوم بفتح الاتصال و الثانية تقوم بغلق الاتصال
الدوال
عمل هذه الدالة ان تقوم بجلب البيانات (الحقول) من جدول ما وفق شرط ما و تعود لي بكائن جدول (DataTable)
الوسائط المطلوبة (اسم الجدول و مصفوفة الحقول و الحقل الشرطي و قيمة الحقل الشرطي) لا عليك سترى مدى سهولتها عند استعمالها
سافرض انك تريد جلب الحقول (ID,Name) من الجدول TBL1 وفق شرط ان يكون الحقل (Name="العلوم")
فانت ستستخدم الدالة وفق الطريقة التالية
كما ترى صديقي العملية بسيطة و مختصرة بنفس الوقت تغنيني عن اعادة كتابة الاكواد
الدالة الثانية و الثالثة لهما نفس العمل مع اختلاف في الوسائط فمرة نحن نجلب وفق حقل نصي و مرة نجلب وفق حقل رقمي ومرة بدون شروط
و اما الدالة الاخيرة فهي تجلب بيانات حقل واحد بالاعتماد على شرط محدد
اتمنى ان يكون الشرح بسيط وسهل
الان ننتقل الى واجهة النموذج و نضيف اثنين كومبو بوكس(ComboBox) واحد للمواد و واحد للمجلدات
المواد=Cmb_M
المجلدات=Cmb_F
و نضيف (ListBox) نسميها (ListContent) سنستخدمها لعرض عناوين المواضيع من جدول المحتويات
اما محتويات الموضوع نستخدم لها (RichTextBox)
كما في الصورة التالية
الان الى كود النموذج
كما ترى العملية جدا بسيطة حاول تدرس الكود و شوف النتائج
بالنسبة لضبط الادخالات سيكون كالتالي
ادخال المواد في نموذج منفصل
و ادخال المجلدات في نموذج منفصل ايضاً
اما عملية اضافة المواضيع ستتم في صيغة (مجلد لكل مادة بدون تكرار في الجدول الرابط) و تحتها تندرج المواضيع
اعرف ان الامور ستختلط عليك لان هذا النوع من العلاقات صعب جدا و التعامل معه مرير و لكن الهدف كان التوضيح فقط
لا عليك اخي شمس , باذن المولى عز و جل ساحاول ان اوجهك بطريقة جيدة لفهم الالية (حسب قدرتي)
سارفق لك ملف قاعدة البيانات و سابدأ بشرح مقتضب عبر مثال يعطيك القدرة على فهم الالية
ابدأ مشروع جديد وادرج فيه فورم (Form1) و ادرج ايضاً مديول وسميه (Connect)
سنضيف داخل المديول بعض الدوال البسيطة لتسهل علينا العمل (لكي لا نكرر كتابة الاكواد)
داخل المديول سنكتب هذه الاكواد
PHP كود :
ImportsSystem.Data.OleDb
Module Connect
Public ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TestDb.accdb"
Public Con As New OleDbConnection(ConnectionString)
Public Sub CloseConnect()
If Con.State = ConnectionState.Open Then
Con.Close()
End If
End Sub
Public Sub OpenConnect()
If Con.State = ConnectionState.Closed Then
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Con.Open()
End If
End Sub
Public Function SelectWithString(ByVal TblNmae As String, ByVal Fileds() As String, ByVal CondFiled As String, ByVal Match As String) As DataTable
If Fileds.Length = 0 Then
MessageBox.Show("تاكد من ملئ مصفوفة الحقول")
Return Nothing
End If
Dim SelectStatement As String = "Select "
Dim SetFileds As String = ""
For Each str As String In Fileds
SetFileds += str + ","
Next
If SetFileds.EndsWith(",") Then SetFileds = SetFileds.Remove(SetFileds.Count - 1, 1)
SelectStatement += SetFileds & " From " & TblNmae & " Where " & CondFiled & " Like '" & Match & "' "
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Dim Cmd As New OleDbCommand(SelectStatement, Con)
Dim Dt As New DataTable
Dt.Clear()
Dim Da As New OleDbDataAdapter(Cmd)
If Con.State = ConnectionState.Closed Then Con.Open()
Da.Fill(Dt)
Cmd.Dispose()
Return Dt
End Function
Public Function SelectWithInteger(ByVal TblNmae As String, ByVal Fileds() As String, ByVal CondFiled As String, ByVal ID As Integer) As DataTable
If Fileds.Length = 0 Then
MessageBox.Show("تاكد من ملئ مصفوفة الحقول")
Return Nothing
End If
Dim SelectStatement As String = "Select "
Dim SetFileds As String = ""
For Each str As String In Fileds
SetFileds += str + ","
Next
If SetFileds.EndsWith(",") Then SetFileds = SetFileds.Remove(SetFileds.Count - 1, 1)
SelectStatement += SetFileds & " From " & TblNmae & " Where " & CondFiled & " Like '" & ID & "' "
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Dim Cmd As New OleDbCommand(SelectStatement, Con)
Dim Dt As New DataTable
Dt.Clear()
Dim Da As New OleDbDataAdapter(Cmd)
If Con.State = ConnectionState.Closed Then Con.Open()
Da.Fill(Dt)
Cmd.Dispose()
Return Dt
End Function
Public Function SelectFTableNormal(ByVal TblNmae As String, ByVal Fileds() As String) As DataTable
If Fileds.Length = 0 Then
MessageBox.Show("تاكد من ملئ مصفوفة الحقول")
Return Nothing
End If
Dim SelectStatement As String = "Select "
Dim SetFileds As String = ""
For Each str As String In Fileds
SetFileds += str + ","
Next
If SetFileds.EndsWith(",") Then SetFileds = SetFileds.Remove(SetFileds.Count - 1, 1)
SelectStatement += SetFileds & " From " & TblNmae
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Dim Cmd As New OleDbCommand(SelectStatement, Con)
Dim Dt As New DataTable
Dt.Clear()
Dim Da As New OleDbDataAdapter(Cmd)
If Con.State = ConnectionState.Closed Then Con.Open()
Da.Fill(Dt)
Cmd.Dispose()
Return Dt
End Function
Public Function GetFiled(ByVal ReturnFiled As String, ByVal Tbl As String, ByVal CondFiled As String, ByVal Id As String) As String
Dim serch As String = ""
serch = "Select " & ReturnFiled & " From " & Tbl & " Where " & CondFiled & " Like '" & Id & "' "
Dim Cmd As New OleDbCommand(serch, Con)
Dim ReturnResult As String = ""
OpenConnect()
Dim red As OleDbDataReader = Cmd.ExecuteReader
While red.Read
If red.HasRows Then
If Not (red(ReturnFiled) Is Nothing) Or red(ReturnFiled).ToString.Length > 0 Then
ReturnResult = red(ReturnFiled).ToString
Else
ReturnResult = 0
End If
End If
End While
red.Close()
Cmd.Dispose()
CloseConnect()
Return ReturnResult
End Function
End Module
الاكواد بسيطة جدا و هي تقوم بالعمليات الاعتيادية (جلب البيانات وفق شرط و بدون شرط) ساقوم بشرحها الان
PHP كود :
Public ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\TestDb.accdb"
Public Con As New OleDbConnection(ConnectionString)
Public Sub CloseConnect()
If Con.State = ConnectionState.Open Then
Con.Close()
End If
End Sub
Public Sub OpenConnect()
If Con.State = ConnectionState.Closed Then
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Con.Open()
End If
End Sub
الدوال
PHP كود :
Public Function SelectWithString(ByVal TblNmae As String, ByVal Fileds() As String, ByVal CondFiled As String, ByVal Match As String) As DataTable
If Fileds.Length = 0 Then
MessageBox.Show("تاكد من ملئ مصفوفة الحقول")
Return Nothing
End If
Dim SelectStatement As String = "Select "
Dim SetFileds As String = ""
For Each str As String In Fileds
SetFileds += str + ","
Next
If SetFileds.EndsWith(",") Then SetFileds = SetFileds.Remove(SetFileds.Count - 1, 1)
SelectStatement += SetFileds & " From " & TblNmae & " Where " & CondFiled & " Like '" & Match & "' "
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Dim Cmd As New OleDbCommand(SelectStatement, Con)
Dim Dt As New DataTable
Dt.Clear()
Dim Da As New OleDbDataAdapter(Cmd)
If Con.State = ConnectionState.Closed Then Con.Open()
Da.Fill(Dt)
Cmd.Dispose()
Return Dt
End Function
عمل هذه الدالة ان تقوم بجلب البيانات (الحقول) من جدول ما وفق شرط ما و تعود لي بكائن جدول (DataTable)
الوسائط المطلوبة (اسم الجدول و مصفوفة الحقول و الحقل الشرطي و قيمة الحقل الشرطي) لا عليك سترى مدى سهولتها عند استعمالها
سافرض انك تريد جلب الحقول (ID,Name) من الجدول TBL1 وفق شرط ان يكون الحقل (Name="العلوم")
فانت ستستخدم الدالة وفق الطريقة التالية
PHP كود :
Dim Fileds() As String = Nothing
Fileds = New String() {"ID", "Name"}
Dim TBL1 As New DataTable
TBL1=SelectWithString("TBL1", Fileds, "Name", "العلوم")
الدالة الثانية و الثالثة لهما نفس العمل مع اختلاف في الوسائط فمرة نحن نجلب وفق حقل نصي و مرة نجلب وفق حقل رقمي ومرة بدون شروط
و اما الدالة الاخيرة فهي تجلب بيانات حقل واحد بالاعتماد على شرط محدد
اتمنى ان يكون الشرح بسيط وسهل
الان ننتقل الى واجهة النموذج و نضيف اثنين كومبو بوكس(ComboBox) واحد للمواد و واحد للمجلدات
المواد=Cmb_M
المجلدات=Cmb_F
و نضيف (ListBox) نسميها (ListContent) سنستخدمها لعرض عناوين المواضيع من جدول المحتويات
اما محتويات الموضوع نستخدم لها (RichTextBox)
كما في الصورة التالية
الان الى كود النموذج
PHP كود :
Public Class TForm
Dim TB_M, TB_F, TB_Content As New DataTable
Dim Fileds() As String = Nothing
Private Sub M_Cmb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cmb_M.SelectedIndexChanged
Fileds = New String() {"MF_ID", "F_Nmae"}
TB_F = SelectWithString("TB_MF", Fileds, "M_Nmae", Cmb_M.Text)
Cmb_F.DataSource = TB_F
Cmb_F.DisplayMember = "F_Nmae"
Cmb_F.ValueMember = "MF_ID"
End Sub
Private Sub F_Cmb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Cmb_F.SelectedIndexChanged
Fileds = New String() {"Cont_ID", "Cont_Title"}
TB_Content = SelectWithInteger("TB_Content", Fileds, "MF_ID", Cmb_F.SelectedValue)
ListContent.DataSource = TB_Content
ListContent.DisplayMember = "Cont_Title"
ListContent.ValueMember = "Cont_ID"
End Sub
Private Sub ListContent_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListContent.SelectedIndexChanged
If Not TypeOf (ListContent.SelectedValue) Is DataRowView Then
RichTextBox1.Text = GetFiled("Content", "TB_Content", "Cont_ID", ListContent.SelectedValue)
End If
End Sub
Private Sub TForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Fileds = New String() {"M_ID", "M_Name"}
TB_M = SelectFTableNormal("TB_M", Fileds)
Cmb_M.DataSource = TB_M
Cmb_M.DisplayMember = "M_Name"
'
End Sub
End Class
كما ترى العملية جدا بسيطة حاول تدرس الكود و شوف النتائج
بالنسبة لضبط الادخالات سيكون كالتالي
ادخال المواد في نموذج منفصل
و ادخال المجلدات في نموذج منفصل ايضاً
اما عملية اضافة المواضيع ستتم في صيغة (مجلد لكل مادة بدون تكرار في الجدول الرابط) و تحتها تندرج المواضيع
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


