تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول
#1
كاتب الموضوع : silverlight

مقال: كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول
اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم

في الواقع سبب كتابة هذا المقال أنني قد لاحظت ان الكثير من الزملاء وخصوصا المبتدئين في عالم البرمجة يعانون قليلا مع الداتا بيز لذلك ارد أن أوضح لهم كيف يمكن الإستغناء عن الداتا بيز التقليدية واستبدالها بطرق أخري

عندما نريد تخزين أو تجميع ثم استعادة بيانات بشكل عام فإن أول شئ سوف يخطر ببالنا هو استخدام الداتا بيز وبناء ملفات ببرامج الداتا بيز الشهيرة ومن ثم نقوم بربطها ببرامجنا ونتعامل معها من حيث عرض وتخزين واسترجاع البيانات الموجودة في الداتا بيز

ومن أشهر الأنظمة التي نستخدمها في برامج الداتا بيز هي SQL, MS Access, and Oracle بالإضافة الي بعض النظم الاخري مثل FireBird و MySQL و PostgreSQL وسنلاحظ هنا أن مايكروسوفت تملك نظامين مختلفين وهما الأكسس و SQL

السؤال: هل نحن بحاجه إلي التعامل مع تلك الأنظمة؟ و هل نحن بحاجه الي الاعتماد كليا علي مثل هذه الأنظمة في برامجنا؟ هل يمكن الاستغناء عن تلك الأنظمة؟ في الواقع إجابة مثل هذه الأسئلة مرتبط بك عزيز القارئ وبكيفية الطريقة التي تفكر بها وأيضا مرتبط مع شئ أخر مهم جدا هو قدراتك البرمجية وقدراتك علي التنويع والتخطيط ومن ثم تحديد ما تحتاجه بالفعل أو ما يحتاجه البرنامج الذي تكتبه

في الواقع إن استخدام الداتا بيز في برامجنا سوف يضيف نوع من الصعوبة الي البرنامج الذي تصممه وهذا قد يؤدي الي شيئين لا ثالث لهما إما أن يكون البرنامج ناجحا أو فاشلا والسبب أنه عليك أن تتعامل مع أشياء كثيرة مثل Security و database Structure و كيفية الدخول الي الداتا بيز واستدعاء البيانات ثم عرضها ثم تخزينها مرة أخري إلي أخر مثل هذه الأشياء.

ولكي لا نبخس ملفات الداتا بيز حقها تماما فإنه أحيانا يكون استخدام الداتا بيز هو أفضل اختيار ممكن استخدامه في عرض وتخزين البيانات داخل برامجنا لكن كل ذلك يعتمد علي حاجة البرنامج الذي نصممه وهل البيانات التي نتعامل معها كثيرة جدا أو تحديدا هل هي من النوع الي يطلق عليه Complex database عموما كل ذلك يعتمد علي الغرض من البرنامج الذي تصممه.

أيضا هناك سؤال هام جدا علينا أن نسأله لأنفسنا وهو ماذا كان يفعل المبرمجون قبل وجود برامج مثل Oracle وMS Access و SQL وغيرهم. من المؤكد أنه كانت هناك طرق أخري لعرض البيانات بدون الحاجة إلي استخدام مثل هذه الأنظمة.

عموما علينا أن لا ننسي أن هناك طرق أخري من الممكن إسخدامها لعرض البيانات وهي سوف تعوضنا عن استخدام الداتا بيز ومن هذه الطرق استخدام XML و Serialization و Text Files و Binary Files الي أخره من مثل هذه الأشياء

ولكي لا أطيل عليك عزيز القارئ هيا بنا نكتشف كيفية الاستغناء عن ملفات الداتا بيز التقليدية ولنبدأ هنا بأسهل الطرق وهي عرض البيانات التي هي عبارة عن Read-Only وهي البيانات التي من الممكن إضافتها الي برامجنا كنوع من الداتا بيز ولكن ليس علي المستخدم التعديل بها

الجزء الأول: عرض البيانات ReadOnly

لنفتح مشروعا جديدا في الفيجوال استوديو ونطلق عليه dbReadsOnly مثلا ثم نضيف الي المشروع Class سوف نطلق عليه Students مثلا.

طبعا ممكن إضافة الكلاس بشكل منفرد الي المشروع من قائمة Projects واختيار Add Class كما هوا موضح بالكود أدناه وهذه هي الطريقة الأفضل


كود :
Public Class Students


End Class
أو أننا نضيفه أو تحديدا نكتبه تحت الكلاس الخاص بالفورم رقم 1 كما هو موضح بالكود أدناه


كود :
Public Class Form1

End Class

Public Class Students

End Class
وفي الكلاس Students نقوم بتعريف مجموعة من المتغيرات وهي بطبيعة الحال ستكون عبارة عن الإسم الأول firstName للطالب و الإسم الثاني secondName مثلا وهذان المتغيران عبارة عن Strings وأيضا ممكن أن نضيف الإسم كاملا fullName وسيكون عبارة عن String أيضا ونضيف رقم مسلسل ID وسيكون عبارة عن Integer أو String عموما تخصيص نوع المتغير متروك لنا

طبعا من الممكن أن نضيف أي عدد من المتغيرات الأخري لكن لكي نعقد الأمر كثيرا سنضيف فقط المتغيرات التالية وهي ستكتب بالشكل التالي داخل الكلاس Students وكما تلاحظون أضفتها داخل Region Directive كنوع من التنظيم للكود ليس إلا


كود :
Public Class Students

#Region "Constants"

Private m_ID As Integer
Private m_firstName As String
Private m_secondName As String
Private m_fullName As String

#End Region

End Class
بعد ذلك نقوم بإضافة مجموعة من الصفات Properties إلي الكلاس Students وتلك الصفات سوف تعبر عن المتغيرات الأربعة التي قمنا بتعريفها أو تحديدا سنربطها مع المتغيرات الأربعة التي ذكرناها سابقا وهي الاسم الأول والثاني والاسم كاملا وأيضا الرقم المسلسل طبعا يتم كتابة أي Property عن طريق أن نكتب مثلا
Public Property FirstName () As String ثم نضغط علي مفتاح Enter وسيقوم الفيجوال استوديو بإضافة باق الكود بمجرد الضغط علي مفتاح Enter أي انه يضيف لها Get و End Get ثم (ByVal value As String) Set ثم End Set ثم أخيرا End Property وسيكون شكل Property كالأتي وهي كما نري لا تسترجع أي قيمة حتى الأن


كود :
Public Property FirstName() As String
Get

End Get
Set(ByVal value As String)

End Set
End Property
وهنا سوف يكون علينا فقط أن نربط هذه Property بالمتغير المناسب لها أي أننا سنربطها بالقيمة التي تخصها عن طريق استخدام Return بين جملة Get……End Get ومن ثم تحديد القيمة من تحت جملة Set…..End Set وبالتالي سيكون الكود كالتالي


كود :
Public Property FirstName() As String
Get
Return m_firstName
End Get
Set(ByVal value As String)
m_firstName = value
End Set
End Property
الأن نضيف باق Property الصفات الأخري ثم علينا أن نضيف أهم شئ الي الكلاس وهو Constructor الذي سيكون عبارة عن Public Sub New ومن داخلة نربط Properties المختلفة ويجب أن نلاحظ انه من الممكن أن نضيف أكثر من Constructor الي نفس الكلاس وبالتالي يكون الكود النهائي للكلاس Students كالتالي


كود :
Public Class Students

#Region "Constants"

Private m_ID As Integer
Private m_firstName As String
Private m_secondName As String
Private m_fullName As String

#End Region

#Region "Property"

Public Property ID() As Integer
Get
Return m_ID
End Get
Set(ByVal value As Integer)
m_ID = value
End Set
End Property

Public Property SecondName() As String
Get
Return m_secondName
End Get
Set(ByVal value As String)
m_secondName = value
End Set
End Property

Public Property FirstName() As String
Get
Return m_firstName
End Get
Set(ByVal value As String)
m_firstName = value
End Set
End Property

Public ReadOnly Property FullName() As String
Get
Return FirstName & " " & SecondName
End Get
End Property

#End Region

#Region "Constructor"

Public Sub New()

End Sub

Public Sub New(ByVal ID As Integer)
m_ID = ID

End Sub

Public Sub New(ByVal ID As Integer, ByVal fName As String)
m_ID = ID
m_firstName = fName
End Sub

Public Sub New(ByVal ID As Integer, ByVal fName As String, ByVal sName As String)
m_ID = ID
m_firstName = fName
m_secondName = sName
End Sub

Public Sub New(ByVal ID As Integer, ByVal fName As String, ByVal sName As String, ByVal FullName As String)
m_ID = ID
m_firstName = fName
m_secondName = sName
m_fullName = FullName
End Sub

#End Region

End Class

سنلاحظ في الكلاس أعلاه أن هناك صفة قد تم إضافتها علي أنها Read Only Property وهي الصفة الخاصة بالاسم كاملا والهدف منها أننا لن نضيفها ولكنه ستظهر اتوماتيكيا داخل الفورم أو الكونترول الذي سوف نستخدمه لعرض البيانات وسيتم ذلك بمجرد تعريف المتغيران اللذان يعبران عن الاسم الأول والاسم الثاني علي التوالي
أيضا سنلاحظ أننا قد أضفنا الكثير من Constructor الي الكلاس لتوضيح فقط كيف يتم ذلك

الأن كيف نربط الكلاس Students ونستخدمه في عرض بيانات داخل الفورم

تختلف عملية الربط بين الكلاس Students و الفورم بناء علي نوع الكونترول الذي سوف نستخدمه في إظهار البيانات للمستخدم وسوف أعطي أكثر من مثال لكي يتضح الأمر للقارئ طبعا أفترض أن قارئ هذا المقال لدية خلفية جيده في التعامل مع الكونترول المختلفة الموجودة داخل الفيجوال استوديو مثل الكومبوبوكس ComboBox و الداتا جريد فيو DataGridView و اللست بوكس ListBox إلي أخره من الكونترول
}}}
تم الشكر بواسطة:
#2
مثال رقم 1 كيفية استخدام الكلاس Students مع DataGridView

كل ما علينا فعله أن نضيف الي الفورم DataGridView Control وفي الحدث Load الخاص بالفورم نقوم بربط وتعريف الكلاس Students علي أنه DataSource الذي يخص هذا DataGridView ومن ثم نضع الأسماء والأرقام المسلسلة في Array والكود التالي يوضح كيفية ربط الكلاس مع DataGridViw1 التي أضفناها الي الفورم


كود :
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' do not allow user to write or delete data by
' make the dtagridview for readonly
DataGridView1.ReadOnly = True

' binding Students class to Datagridview
Dim StudentArray() As Students = _
{New Students(1, "عمرو", "أمين"), _
New Students(2, "أحمد", "عبدالله"), _
New Students(3, "محمود", "المصري")}

DataGridView1.DataSource = StudentArray

' Adjust the width of first Column in DataGridView
With DataGridView1.Columns(0)
.Width = 30
End With

End Sub

End Class
هناك مجموعة من الملاحظات الطريفة التي يجب أخذها في الاعتبار عند كتابة الكلاس Students

من الملاحظات الطريفة جدا في الكود اعلاه هو ترتيب الصفات Properties سنجد أن أول صفة هي الرقم المسلسل ID ثم الإسم الثاني ثم الإسم الأول ثم الإسم كاملا في الواقع هذا الترتيب مهم جدا وستري السبب عزيزي القارئ عندما نحاول أن نربط الكلاس Students مع بعض الكونترول وتحديدا DataGridView ستكتشف أن DatagridView سيعرض كل Property طبقا لترتيبها في الكلاس Students

من الملاحظات الطريفة أيضا سنجد أن DataGridView كونترول يعرض الأسماء في Header Columns كما تم كتابتها مثلا يعرض كلمة FullName كما هي إذن كيف نقوم بإظهار أسماء الأعمدة بشكل صحيح

لمن تابع الدروس الخاصة بموضوع تطوير الكونترول وتحديدا الموضوع الذي تحدثنا فيه عن Property Attributes ولقد ذكرت في هذا الموضوع أحد Attributes الهامة وهي DisplayName Attribute التي تسمح لنا بإضافة أي اسم نختاره الي Property وهي عبارة عن String

مثلا لو قمنا بإضافة هذه Attribute الي أي Property موجودة داخل الكلاس Studentsفإن الإسم الذي سنضعه فيها هو الذي سيتم عرضه داخل DataGridView Header Column

الكود التالي يوضح كيفية إضافة هذه Attribute إلي Property حيث أن كلمة "رقم" هي التي سوف تظهر داخل DatagridView1 Header Column


كود :
<DisplayName("رقم")> _
Public Property ID() As Integer
Get
Return m_ID
End Get
Set(ByVal value As Integer)
m_ID = value
End Set
End Property
مثال رقم 2 كيفية استخدام الكلاس Students مع ListView Control

في هذا المثال سنوضح كيف نربط بين الكلاس Student و ListView Control لذلك نضيف الي المشروع فورم جديد ونضيف لهذا الفورم أربعة من TextBox ثم نضيف أيضا ListView
والكود التالي يوضح الأمر


كود :
Public Class Form2


Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' مجموعة من التكست بوكس تم استخدامها لإستعراض البيانات
TextBox1.ReadOnly = True
TextBox2.ReadOnly = True
TextBox3.ReadOnly = True
TextBox4.ReadOnly = True

' حيث اننا نستخدم أسماء عربية من الأفضل ضبط خاصية من اليمين الي اليسار
ListBox1.RightToLeft = Windows.Forms.RightToLeft.Yes
TextBox1.RightToLeft = Windows.Forms.RightToLeft.Yes
TextBox2.RightToLeft = Windows.Forms.RightToLeft.Yes
TextBox3.RightToLeft = Windows.Forms.RightToLeft.Yes
TextBox4.RightToLeft = Windows.Forms.RightToLeft.Yes

' إضافة الكلاس الي الليست بوكس كونترول
Dim AmrAmin As New Students(1, "عمرو", "أمين")
Dim OmarAmin As New Students(2, "عمر", "أمين")
Dim AhmedMoustafa As New Students(3, "أحمد", "مصطفي")
Dim LilalElmasry As New Students(4, "ليلي", "المصري")
Dim HananElmasry As New Students(5, "حنان", "المصري")
Dim SamahElmasry As New Students(6, "سماح", "المصري")
Dim EmanElmasry As New Students(7, "إيمان", "المصري")
Dim SalmaElmasry As New Students(8, "سلمي", "المصري")
Dim SafwatElmasry As New Students(9, "صفوت", "المصري")
Dim SalemElmasry As New Students(10, "سالم", "المصري")

ListBox1.DisplayMember = "FullName"

' أضف جميع العناصر
ListBox1.Items.Add(AmrAmin)
ListBox1.Items.Add(OmarAmin)
ListBox1.Items.Add(AhmedMoustafa)
ListBox1.Items.Add(LilalElmasry)
ListBox1.Items.Add(HananElmasry)
ListBox1.Items.Add(SamahElmasry)
ListBox1.Items.Add(EmanElmasry)
ListBox1.Items.Add(SalmaElmasry)
ListBox1.Items.Add(SafwatElmasry)
ListBox1.Items.Add(SalemElmasry)

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
' تغيير البيانات في التكست بوكس بناء علي اختيار المستخدم
TextBox1.Text = (CType(ListBox1.SelectedItem, Students).ID)
TextBox2.Text = (CType(ListBox1.SelectedItem, Students).FirstName)
TextBox3.Text = (CType(ListBox1.SelectedItem, Students).SecondName)
TextBox4.Text = (CType(ListBox1.SelectedItem, Students).FullName)

End Sub

End Class
مثال رقم 3 كيفية استخدام الكلاس Students مع ComboBox Control

في هذا المثال سنوضح كيف نربط بين الكلاس Student و ComboBox Control لذلك نضيف الي المشروع فورم جديد ونضيف لهذا الفورم TextBox ثم نضيف أيضا ComboBox
والكود التالي يوضح الأمر


كود :
Public Class Form3

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

TextBox1.ReadOnly = True

Dim AmrAmin As New Students(1, "عمرو", "أمين")
Dim OmarAmin As New Students(2, "عمر", "أمين")
Dim AhmedMoustafa As New Students(3, "أحمد", "مصطفي")
Dim LilalElmasry As New Students(4, "ليلي", "المصري")

ComboBox1.Items.Add(AmrAmin.FullName)
ComboBox1.Items.Add(OmarAmin.FullName)
ComboBox1.Items.Add(AhmedMoustafa.FullName)
ComboBox1.Items.Add(LilalElmasry.FullName)

End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

TextBox1.Text = ComboBox1.SelectedItem

End Sub

End Class
هذه كانت مجرد أفكار بسيطة وسريعة عن كيفية الاستغناء عن ملفات الداتا بيز وخصوصا عندما نحتاج فقط أن نعرض البيانات بصورة بيانات Read-Only داخل الفورم وتحديدا عندما لا نحتاج من المستخدم أن يقوم بالتعديل في البيانات

وأعتقد عزيزي القارئ يمكنك الأن أن تتبع نفس الأسلوب وتضيف هذا النوع من البيانات بسهولة الي الفورم أو الي أي كونترول حاول تجرب كيف تفعل ذلك مع الكونترول الأخري مثل TreeView و ListView الي أخره من الكونترول التي من الممكن استخدامها لعرض بيانات

يمكنك انزال الكود كاملا من المرفقات الكود تم تنفيذه باستخدام نسخة الفيجوال استوديو 2008

بالتوفيق
أخوكم عمر


الملفات المرفقة
.rar   dbReadsOnly.rar (الحجم : 72.93 ك ب / التحميلات : 165)
}}}
تم الشكر بواسطة: العواد الصغير


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سلسلة تعليمية] شرح تفصيلي وكامل عن كيفية الاتصال بسيكوال وعمل اتاش برمجي وجلب اسماء السيرفرات ابو انس 3 3,633 25-02-22, 12:44 AM
آخر رد: atefkhalf2004
Photo كيفية اطهار جدول داخل الأخر alsouf 3 4,474 21-11-20, 09:15 AM
آخر رد: Anas Mahmoud
  لفهم كيفية الربط الذي يتم بين الجداول viv 4 5,001 03-10-20, 05:34 PM
آخر رد: Arfat007
  [VB.NET] كيفية استخدام اداوات ديف اكسبريس devexpressلادخال السجلات الى قاعدة بيانات نوع اكسس 13adam123 0 2,581 29-03-20, 12:50 PM
آخر رد: 13adam123
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 9 8,962 22-02-20, 12:58 PM
آخر رد: دمعة المقهور
Exclamation كيفية تجاوز ظهور الخطا في Global.WindowsApplication1.My.Resources الرائد 0 2,549 13-08-19, 11:40 PM
آخر رد: الرائد
  [درس فيديو] كيفية استخدام الجملة الشرطية if alims 1 3,335 22-07-19, 06:38 AM
آخر رد: سعود
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,161 30-06-19, 10:41 AM
آخر رد: invocker
  كيف تصنع نسخة إحتياطية لملفات الداتا بيز silverlight 1 3,445 29-05-19, 10:36 PM
آخر رد: egbest2
  كيفية عمل برنامج للأذان + قاعدة بيانات لـ 252 دولة و 9512 مدينة ! : مبرمج أوتار 4 23,539 21-01-19, 03:43 PM
آخر رد: elgokr

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


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