السلام عليكم شباب منتدى فيجوال بيسك لكل العرب
بناء عاطلب بعض الاعضاء فى المنتدى
اليوم ان شاء الله هقوم بشرح كيفية تم تصميم مكتبة مكتبه علي سبايسى بيانات (alysbisydata)
و لكن فى الاول ما هو سبب لدفعنى لتصميم هذى المكتبة ؟ السؤال ده لى و ليكم منتدى فيجوال برضو!
فى الاول انا مبرمج عادى جدا كنت اقوم بتصميم برامج و موقع و بعد ذلك قاعدة مش بعمل حاجة ولا لقى شغل لحد ما يجى حد تانى عايز برامج او موقع و طبع كنت كل فترة انزل اخر اصدر للفيجوال و ازاى ما بيقولو اجرى ورا كل حاجة جديد تنزل لشركة ميكروسوفت فى الفيجوال لحد ما فى مره بصرحة ([b]تخنقت) يعنى هفضل طول عمرى استنى لحد الشركة ما تنزل حاجة جديد و ابد تعلم طريق الاستخدم لحد ما وصلت ان انا مبرمج بقيت ازاى المستخدم العادى لى بيستخدم البرامج بتعى بس الفرق ان انا بيعملو ازاى يستخدم البرامج بتعى و ميكروسوفت بتعملنى ازاى استخدم الفيجوال و كل حاجة جديد لحد ما وصلت برضو فى الاخر ان انا مبرمج و مستخدم احنا الاتنين بنجرى ورا شركة ميكروسوفت فى كل حاجة جديد بتنزل منها و فى الاخر الشركة دلوقتى عايزها تخلى المستخدم بطريقة غير مباشرة يقدر يستخدم الفيجوال عن طريق المعالج لى دلوقتى فى الفيجوال 2012 بيعمل حاجات كتير جدا كل ما هو مطلوب هو اضغط التالى و اختار لى عايز و فى الاخر تلقى الاكود مكتوب لوحدها و من اليوم قرار ابطل تصميم برامج او موقع تانى و ابد فى تصميم ادوات و اطور فيجوال نفسو و اشوف بقى انا ولا ميكروسوفت [/b]
انا عربى ابن عربى مسلم ومسيحى اخوات نحب السلام لمن يريد السلام
طريق استخدم المكتبة فيديو
فتح الفيجوال ايه اصدر المهم ان يكون دوت نت و بعد ذلك افتح مشروع جديد ثم اضافة كلاس جديد
ثم نقوم باضافة الكود التالى
كود :
Public Sub addtodatasources(ByVal Controlsww As System.Windows.Forms.Form, ByVal strcon As String, ByVal Table60 As String
شرح الكود السابق:-
طبعا الغنى عن التعريف Public Sub
هذا اسم الاستدعاء addtodatasources
هذا المتغير من نوع فروم علشان اقدر اجيب اسم الفروم Controlsww
وهذا المتغير من نوع نص علشان اقدر اجيب اسم نص الاتصال strcon
و ده اخر متغير علشان اقدر اجيب اسم الجدوال Table60
طيب لو واحد جديد مش عايز يشوف الروبط لى فوق دى و ادخل شوفت الموضوع عطول هيقولى طيب ازاى هتجيب اسم الفروم و نص الاتصال و اسم الجدوال هقولك طبعا لو حاضرتك شوفت طريقة استخدم المكتبة كنت هتعرف بس برضو هقولك ازاى نشوف الكود ده
هذا اسم الاستدعاء addtodatasources
هذا المتغير من نوع فروم علشان اقدر اجيب اسم الفروم Controlsww
وهذا المتغير من نوع نص علشان اقدر اجيب اسم نص الاتصال strcon
و ده اخر متغير علشان اقدر اجيب اسم الجدوال Table60
طيب لو واحد جديد مش عايز يشوف الروبط لى فوق دى و ادخل شوفت الموضوع عطول هيقولى طيب ازاى هتجيب اسم الفروم و نص الاتصال و اسم الجدوال هقولك طبعا لو حاضرتك شوفت طريقة استخدم المكتبة كنت هتعرف بس برضو هقولك ازاى نشوف الكود ده
كود :
Dim aly As New alysbisydata.Class1
aly.addtodatasources(Me, "اسم الجدوال", "نص الاتصال")
شرح الكود السابق:
هنا بدل ما تكتب اسم الفروم بتعتك لكل فروم لا هتكتب فقط Me
ده هنا هتكتب نص الاتصال بقاعدة البيانات بتعتك نص الاتصال
و بعد كده اسم الجدوال لى عايز تتعامل معا اسم الجدوال
ده هنا هتكتب نص الاتصال بقاعدة البيانات بتعتك نص الاتصال
و بعد كده اسم الجدوال لى عايز تتعامل معا اسم الجدوال
و طبعا كده لى بيستخدم المكتبة فرحان اوى بيتم الاضافة عطول من غير ما يكتب كود كبير و فى نفس الوقت هو مش عارف ايه لى بيحصل علشان المكتبة دى تقدر تدخل البيانات لوحدها من غير ما تكون تعرف اسماء الادوات ولا اسماء الجدوال بس هو عندك حاجة مش متاكد منها و هى ان من شروط المكتبة ان اسم الكنتروال فى موجود فى الفروم يكون نفس اسم الحقل فى قاعدة البيانات تعالو نعرف هنا بقى هنا ايه السبب فى الشرح النهاره ان شاء الله
تعالو نعمل متغير جديد
كود :
Dim con As New System.Data.OleDb.OleDbConnection(strcon)
شرح الكود السابق:
و طبعا هنا قولت ان فى متغير جديد اسمو con و ده من نوع OleDbConnection طيب المتغير ده هيجيب البيانات بتعو من المتغير strcon و ده المتغير لى فوق فى الاول الكود لى المبرمج بيكتب نص الاتصال جوها
كود :
Try
If con.State = ConnectionState.Open Then con.Close()
Catch ex As Exception
MsgBox("يوجد خطاء فى نص الاتصال")
End Try
Try
شرح الكود السابق:
طبعا فى واحد هيقولى انا عارف ان Try بيستخدمها علشان فى حالة حصل مشكلة فى الكود البرامج يفضل شغل و يكامل مش يقف و يقفل بس انا ليه استخدمها فى المكتبة هقوله لنفس السبب هقولى ازاى هقولك علشان الكود ده بيشوف اذا كان الاتصال مفتوح ولا لا و لو مفتوح يقفلو طيب لو نص الاتصال غلاط البرامج هقف و يقفل برضو لكن فى حالى استخدم Try هتظهر رسائل تقولك نص الاتاصل غير صحيح
تعالو نشوف الكود لى بعد كده
كود :
con.Open()
Dim da As New System.Data.OleDb.OleDbDataAdapter("select * from " + Table60, con)
Dim ds As New DataSet
Dim cm As New System.Data.OleDb.OleDbCommandBuilder(da)
da.Fill(ds, Table60).ToString()
Dim dr As DataRow = ds.Tables(Table60).NewRow
شرح الكود السابق:
طبعا الكود السابق المفروض معروف للجميع بس هشرح حاجات
هنا بيقول ان هجيب اسم الجدوال من المتغير Table60
هنا بيقول ان هجيب اسم الجدوال من المتغير Table60
تعالو نشوف الكود التالى
كود :
For i As Integer = 0 To Controlsww.Controls.Count - 1
Try
If TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.TextBox Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.DateTimePicker Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.RichTextBox Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.MaskedTextBox Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.NumericUpDown Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.Label Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.LinkLabel Or TypeOf (Controlsww.Controls(i)) Is System.Windows.Forms.DomainUpDown Then
Dim s As String = Controlsww.Controls(i).Name
Dim w As Object = (Controlsww.Controls(i).Text)
dr.Item(s) = w
End If
Catch ex As Exception
End Try
Next
شرح الكود السابق:
طبعا هنا استخدمت For و ده علشان اقدر اجيب كل اسماء الادوات من الفروم و ده و طبعا بجيب كل البيانات لى بيكون بخد منها البيانات عن طريق text مثلا زاى textbox1.text و كده ايه اده بخدا منها البيانات ازاى التكست هتلقى اسمها فى الكود ده
و بطعا هتعمل تنين متغير و هم W و S و دوال علشان واحد اجيب بيها اسم الاداه من الفروم و التانى علشان كتب مع اسم الكنتروال .text و بعد كده S ده بيكون اسم الحقل فى الجدوال لى موجود فى قاعدة البيانات و W ده بيكون اسم الكنترو علشان كده بجبر المبرمج ان يكون اسم الكنترول نفس اسم الحقل فى قاعدة البيانات
و بطعا هتعمل تنين متغير و هم W و S و دوال علشان واحد اجيب بيها اسم الاداه من الفروم و التانى علشان كتب مع اسم الكنتروال .text و بعد كده S ده بيكون اسم الحقل فى الجدوال لى موجود فى قاعدة البيانات و W ده بيكون اسم الكنترو علشان كده بجبر المبرمج ان يكون اسم الكنترول نفس اسم الحقل فى قاعدة البيانات
طيب و الكنتروال Checked ده مش بخد منو البيانات من text بخد منو عن طريق Checked تمام هيكون الكود بتعو كده
كود :
For Each chyk In Controlsww.Controls.OfType(Of System.Windows.Forms.RadioButton)()
Try
Dim ssp As String = chyk.Name
Dim wwp As Object = chyk.Checked
dr.Item(ssp) = wwp
Catch ex As Exception
End Try
Next
شرح الكود السابق:
الكود ده نفس الكود لى فوق
نجبى للكود التالى
كود :
For Each chkr In Controlsww.Controls.OfType(Of System.Windows.Forms.PictureBox)()
Try
If chkr.Image Is Nothing Then
Else
Dim dir As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("~\alysbisyimg")
If dir.Exists = True Then
System.IO.File.Copy(chkr.ImageLocation, "~\alysbisyimg\" + IO.Path.GetFileName(chkr.ImageLocation))
Else
System.IO.Directory.CreateDirectory("~\alysbisyimg")
System.IO.File.Copy(chkr.ImageLocation, "~\alysbisyimg\" + IO.Path.GetFileName(chkr.ImageLocation))
End If
Dim ssb As String = chkr.Name
Dim wwb As Object = "~/alysbisyimg/" + (IO.Path.GetFileName(chkr.ImageLocation))
dr.Item(ssb) = wwb
End If
Catch ex As Exception
End Try
Next
شرح الكود السابق:
فى الكود ده بتعامل مع الاداه PictureBox بس بطرقتى شوية
يعنى فى الكود ده بدور ازاى ما قولنها قبل كده على ايه اداه من نوع PictureBox و بعد كده بدرو فى ملفات المشروع او البرامج او الموقع عن مجلد بالاسم ~\alysbisyimg لو موجود بعمل نسخ للصور فى المجلد ده و لو مش موجود بيعنل انشاء مجلد جديد و بعد كده انسخ برضو الصور و بعد كده احط المسار كامل فى الحقل يعنى بحط الرمز و اسم المجلد و اسم الصور فى الحقل كامل طيب ايه حكايت الرمز ده ~ ده علشان ممكن ان يكون البرامج عايز مجلد بنفس الانفس قولت احط رمز الاول و بعد كده اعمل مجلد باسم جود الامجلد الاول
طيب تعالى نشوف الكود التالى
كود :
For Each ctrl In Controlsww.Controls.OfType(Of System.Windows.Forms.GroupBox)()
Try
For Each ctrl2 In ctrl.Controls.OfType(Of System.Windows.Forms.TextBox)()
Try
Dim sqwe As String = ctrl2.Name
Dim wqwe As Object = ctrl2.Text
dr.Item(sqwe) = wqwe
Catch ex As Exception
End Try
Next
Catch ex As Exception
End Try
Next
شرح الكود السابق:
طبعا هتقولى ليه الكود ده اكبر من السابق هقولك علشان هنا انا بجيب الكنترول من دخل الاداه GroupBox علشان كده كان لازم اعمل اكتر من For بس المره دى كان For Each و كنت بجيب اسم GroupBox و بعد كده اجيب اسم الكنتروال من جوها و بالطريقة دى قدر اجيب اسم التكست لى موجودها جوها الكنترول GroupBox
و طبعا نجيى لاخر كود فى المكتبة
كود :
ds.Tables(Table60).Rows.Add(dr)
da.Update(ds, Table60)
con.Close()
MsgBox("تمام الاضافة بنجاح", MsgBoxStyle.Information, "Email:mrsv_42@hotmail.com")
Catch ex As Exception
MsgBox("يرجى التأكد من نص الاتصال واسم جدول قاعدة البيانات وأسماء الأدوات بشكل صحيح ", MsgBoxStyle.Exclamation, "Email:mrsv_42@hotmail.com")
End Try
شرح الكود السابق:
طبعا الكود ده مش عايز ايه شرح علشان ده كود عادى جدا بيسخدم فى الااضافة لقاعدة البيانات
كل لى بيحصل فى الكود كده ان بقفل الاكود المستخدمها فى قاعدة البيانات و بقفل End Try لى عملها فى اول الكود فوق
و فى الخطاء باكد عليها ان بقوله تاكد من يكون اسم الكنترول يكون نفس اسم الحقل
كل لى بيحصل فى الكود كده ان بقفل الاكود المستخدمها فى قاعدة البيانات و بقفل End Try لى عملها فى اول الكود فوق
و فى الخطاء باكد عليها ان بقوله تاكد من يكون اسم الكنترول يكون نفس اسم الحقل
المكتبة مفتوحة المصدر فى المرفقات
فى انتظار تعلقاتكم
يَامَعْشَرَ الْجِنِّ وَالإِنسِ إِنْ اسْتَطَعْتُمْ أَنْ تَنفُذُوا مِنْ أَقْطَارِ السَّمَاوَاتِ وَالأَرْضِ فَانفُذُوا لا تَنفُذُونَ إِلاّ بِسُلْطَانٍ(33) سورة الرحمن