تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الحلقة 2 من السلسلة 167
#1
كاتب الموضوع : FlyToAbd

الحين بدينا بالجد

انا احب هذا المنتدى من زمان واحترم واعتز بالزملاء اللي فيه واعاني من قلة تعليقات الزملاء ولذلك قررت ان اتقدم بموضوع يكون متكامل بحيث تعم الفائدة للجميع

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

الموضوع هو تقديم (قالب) Template لنظام قواعد بيانات كامل بالتقارير مع السيت اب وسيكون المثال المطبق عليه نظام مخازن مبسط للتركيز على القالب وسيكون عام بحيث يمكن ان يطبق فيه اي نظام قواعد بيانات، مستخدما احدث الطرق بالواجهات (Interface) بصفتي استاذ في هذه المادة ومن اوائل من درسها بالوطن العربي ومؤسس منهجها

سأستخدم بهذا القالب المميزات التالية
قواعد بيانات في SQL
الاداة Property Grid للتعديل في قيود قاعدة البيانات
الاداة TreeView والاداة ListView في استعراض البيانات
تقليد شريط ادوات اوفيس 2007 (ToolBar Office 2007) للاوامر
الكائن Report الموجود في الفيجوال بيسك 2005 ولن استخدم الكريستال ريبورت
Object Oriented Programming OOP
DataSet
Enums

مكونات المشروع
Stores.mdf ملف قاعدة البيانات منتجة من داخل الفيجوال موقعه Bin\Debug
يتكون المشروع من المجلدات التالية
المجلد Central نضع بداخله الكائن الرئيسي والنموذج الرئيسي والوحيد وDataSet الخاصة بالنظام وDataSet الخاصة بالتقرير
المجلد Components نضع فيه الكائنات التي تستخدم في القالب وتكون عامة بحيث لا تختلف من نظام لاخر
المجلد Entities يكون فيه كائنات النظام وتتغير خصائصها حسب الكائن

مكونات المجلد Central
Manager.vb كائن عام يتخصص بفتح قاعدة البيانات ويولد جميع الخدمات المشتركة في النظام
frmMain.vb النموذج الوحيد وواجبه استعراض البيانات والتعديل عليها واستدعاء التقارير المطلوبة
StoresDataSet.xsd هيكل قاعدة البيانات المخازن
DataReport.xsd هيكل لبيانات التقارير

مكونات المجلد Components
Enums.vb ملف فيه اي مرقمات في النظام
IDs.vb اكثر الكائنات استخداما وهو عام يتكرر في جميع انظمة قواعد البيانات يحمل مجموعة من الارقام التي هي عبارة عن مفاتيح قيود في قاعدة البيانات ليتم التعامل معها
Report.vb كائن متخصص باستقبال بيانات تقرير ويعرذ ذلك التقرير

مكونات Entities
فيه كائن يقابل جدول في قاعدة البيانات وهو يحمل قيد واحد في كل نسخة مسؤوليته توفير جميع بيانات العرض والتعديل والتقارير لذلك الكائن

Company.vb شركة وهو يمثل الشركات التي يتم شراء المواد منها للمخزن
Employee.vb موظف وهو يمثل اي موظف من حقه استلام او ارجاع مادة
Item.vb مادة وهي المواد الموجودة بالمخزن
Invoice.vb فاتورة استلام مادة من قبل موظف

هذا عرض للقالب ونموذج للمثال اللي راح نتابعه
ارجو من الاساتذة والطلبة المهتمين بيان تعليقاتهم لكي نقرر المباشرة بشرح هذا القالب
الرد }}}
تم الشكر بواسطة:
#2
سأبدأ بشرح هذا الفئة لانه مستقل تماما عن المشروع ويمكن استخدامه بأي مشروع قاعدة بيانات وهو عباره عن تجمع من الارقام الصحيحة التي تمثل مفاتيح مجموعة من القيود في جدول معين في قاعدة البيانات
الفرق بين المصطلح فئة (نوع) Class والمصطلح كائن Object هو ان الفئة هي الكود والكائن هو المتغير الذي نعلنه من نوع تلك الفئة

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Class[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2][color=#0000ff]Inherits[/color][/SIZE][SIZE=2] CollectionBase[/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2]()[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2]([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Table [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataTable, [/SIZE][SIZE=2][color=#0000ff]Optional[/color][/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Filter [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#0000ff]Optional[/color][/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Sort [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#0000ff]Optional[/color][/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] ColumnName [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Rows() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow = Table.Select(Filter, Sort)[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow[/SIZE]
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] ColumnName = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Rows[/SIZE]
[SIZE=2]list.Add(Row(0))[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]Else[/color][/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Rows[/SIZE]
[SIZE=2]list.Add(Row(ColumnName))[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]If[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
يرث CollectionBase وهو عبارة عن تجمع من الارقام
ماهو التجمع Collection: ان المصفوفة Array عبارة عن مجموعة محددة من القيم ذات النوع الواحد ويتم الوصول الى اي قيمة بواسطة تسلسلها والتجمع تطوير للمصفوفة حيث اصبحت عدد القيم التي فيها غير محددة ويوجد ما هو احدث من التجمع وهو القاموس Dictionary وهو تطوير للتجمع فالوصول لاي عنصر من عناصره يتم لوصول اليه بواسطة مفتاح وهو من نوع كائن ايضا مثلا نص

الاجراء New وهذا الاجراء يتنفذ عند انشاء اي متغير من هذه الفئة نرى ان هذا الاجراء فاضي وهذا يعني اننا يمكن اعلان متغير من هذا النوع (فئة) بدون اي كود

الاجراء New هذه طريقة ثانية لبناء متغير من هذا النوع وهو بتمرير الاتي
Table As DataTable جدول من قاعدة البيانات وهو الجدول الذي نرغب من هذا الكائن ان يحمل مفاتيح مجموعة من قيوده
Filter As String نص يمثل الشروط التي نرغب بتجميع مفاتيح القيود التي تتوافق مع هذا الشرط
Sort As String نص نضع فيه اسم الحقل الذي نرغب بان تكون القيود مرتبه عليه
ColumnName As String نص نضع فيه الحقل الذي نرغب بوجوده بدل المفتاح واستخدامه قليل
المصطلح Optional الذي يسبق المتغير المرر للاجراء معناه ان هذا المتغير اختياري التمرير اي من الممكن عدم تمرير هذا المتغير وهو سيأخذ القيمة الافتراضية له الموجوده بعده
يحتوي هذا الاجراء على الكود التالي

كود :
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Rows() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow = Table.Select(Filter, Sort)[/SIZE]
اعلان عن مصفوفه من القيود من نوع DataRow وتساوي الاجراء Select من الجدول المرر ونسلم للاجراء Select الشروط وحقل الترتيب ويرجع مصفوفة من DataRow التي تنتمي لهذه الشروط

كود :
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow[/SIZE]
نعلن عن متغير من نوع قيد بيانات

كود :
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] ColumnName = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE]
اذالم نكن قد سلمنا اسم الحقل المراد تجمعه سيتنفذ الكود التالي

كود :
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Rows[/SIZE]
[SIZE=2]list.Add(Row(0))[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
هذا التكرار يتحرك على جميع قيود البيانات الموجودة في المصفوفة ويضيف قيمة الحقل الاول من كل قيد في المتغير List وهو من مكونات ال CollectionBase الذي ورثناه وهو الذي يحمل القيم الموجودة في التجمع

كود :
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Rows[/SIZE]
[SIZE=2]List.Add(Row(ColumnName))[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
والا سنضيف الى المتغير List الحقل المطلوب تعبئته
الخاصية Item

كود :
[SIZE=2][color=#0000ff]Default[/color][/SIZE][SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]ReadOnly[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE][SIZE=2] Item([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] index [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]CType[/color][/SIZE][SIZE=2](List.Item(index), [/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE]
Default تعني افتراضي وهذا يجعل هذه الخاصية هي الافتراضية حيث اذا كتبنا المتغير فقط كأنه استدعينا هذه الخاصية
تستلم تسلسل المفتاح المطلوب وترجع قيمته
الدالة CType هي اختصار لـ ConvertType وهذه الدالة تحول من اي نوع الى نوع ثاني اذا كان بالامكان تغييره فهي الان تحول القيمة الموجوده الى رقم من نوع Long عدد صحيح كبير

الخاصية IndexOf

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]ReadOnly[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE][SIZE=2] IndexOf([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] ID [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] List.IndexOf(ID)[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE]
خاصية للقراءة فقط نسلم لها القيمة وتسلمنا تسلسلها وتفيد للبحث

الخاصية CountIDs

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]ReadOnly[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE][SIZE=2] CountIDs() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]CType[/color][/SIZE][SIZE=2](List.Count, [/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE]
ترجع عدد المفاتيح الموجودة

الخاصية Contains

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]ReadOnly[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE][SIZE=2] Contains([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] ID [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Boolean[/color][/SIZE]
[SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] List.Contains(ID)[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Get[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Property[/color][/SIZE]
ترجع صح اذا المفتاح المسلم لها موجود وخطأ اذا لم يكن موجودا

الدالة AddID

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] AddID([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] ID [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2]List.Add(ID)[/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]Me[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
لاضافة مفتاح الى موجودات التجمع

الدالة AddIDs

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] AddIDs([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] IDs [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] i [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] i [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2]List.Add(i)[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]Me[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
لاضافة تجمع مفاتيح الى التجمع الحالي

الدالة RemoveID والدالة RemoveIDs لالغاء مفتاح واحد او تمجع من المفاتيح من التجمع الحالي

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] RemoveID([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] ID [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] List.Contains(ID) [/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE]
[SIZE=2]List.Remove(ID)[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]If[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]Me[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] RemoveIDs([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] IDs [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] i [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] i [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2]RemoveID(i)[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]Me[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
الرد }}}
تم الشكر بواسطة:
#3
الدالة Sort لترتيب المفاتيح من الاصغر الى الاكبر

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] Sort() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2]InnerList.Sort()[/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][color=#0000ff]Me[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
الدالة Text ترجع المفاتيح على شكل نص يفيد استدعائها بمراجعة القيم الموجودة في عملية تصحيح الاخطاء

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] Text() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] i [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Ret [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2] i = 0 [/SIZE][SIZE=2][color=#0000ff]To[/color][/SIZE][SIZE=2] List.Count - 1[/SIZE]
[SIZE=2]Ret &= List(i) & vbCrLf[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] Ret[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
vbCrLf يمثل سطر جديد بالنص

الدالة RemoveDuplicates لالغاء المفاتيح المتكررة من التجمع

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] RemoveDuplicates() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] RetIDs [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] IDs[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] i [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Long[/color][/SIZE]
[SIZE=2][color=#0000ff]Me[/color][/SIZE][SIZE=2].Sort()[/SIZE]
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] List.Count > 0 [/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE][SIZE=2] RetIDs.AddID(List(i))[/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2] i = 0 [/SIZE][SIZE=2][color=#0000ff]To[/color][/SIZE][SIZE=2] List.Count - 2 [/SIZE][SIZE=2][color=#008000]' To Befor Last[/color][/SIZE]
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] List(i) <> List(i + 1) [/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE]
[SIZE=2]RetIDs.AddID(List(i + 1))[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]If[/color][/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] RetIDs[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Class[/color][/SIZE]
تم الكائن

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

كما سنلاحظ ان هذا الكائن سيكون البديل عن تعامل النظام مع جمل SQL التي نضطر لمراجعتها كل ما تم تغيير اسم احد الحقول او الجداول

في امامنا الكثير من النقاش
الرد }}}
تم الشكر بواسطة:
#4
هذه الفئة نعلن على متغير واحد من نوعها ومسؤوليتها جميع خدمات قاعدة البيانات بالاضافة الى بعض الخدمات التي نحتاجها في بناء النظام
وهذا الكائن مستقل عن المشروع ويمكن تكراره مع اي مشروع مع تغييرات بسيطة

كود :
[SIZE=2][color=#0000ff]Imports[/color][/SIZE][SIZE=2] System.Data.SqlClient[/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Module[/color][/SIZE][SIZE=2] World : [/SIZE][SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2] Our [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] Manager : [/SIZE][SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Module[/color][/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Class[/color][/SIZE][SIZE=2] Manager[/SIZE]
[SIZE=2][color=#0000ff]Private[/color][/SIZE][SIZE=2] Cnn [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlConnection([/SIZE][SIZE=2][color=#800000]"Data Source=.\SQLEXPRESS;AttachDbFilename='"[/color][/SIZE][SIZE=2] & Application.StartupPath & [/SIZE][SIZE=2][color=#800000]"\Stores.Mdf';Integrated Security=True;User Instance=True"[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2] Data [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] StoresDataSet[/SIZE]
[SIZE=2][color=#0000ff]Private[/color][/SIZE][SIZE=2] SystemKey [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Integer[/color][/SIZE]
[SIZE=2][color=#0000ff]Private[/color][/SIZE][SIZE=2] LicenceKey [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2] Path [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = Application.StartupPath[/SIZE]
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2] ApplicationName [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE]
سنبدا باستيراد الكائن SqlClient الذي يتكون من جميع كائنات قاعدة البيانات

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Module[/color][/SIZE][SIZE=2] World : [/SIZE][SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2] Our [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] Manager : [/SIZE][SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Module[/color][/SIZE]
هذا الكود يعلن عن متغير من نوع الفئة Manager واسمه Our
(وكنت قبل الفيجوال 2005 اسميه My وقد استخدم هذا المتغير في اصل اللغة وغيرته الى Our وقد احدثت هذه الحادثة مفاجأه لطلابي لانهما متشابهان بالعمل)

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Class[/color][/SIZE][SIZE=2] Manager[/SIZE]
[SIZE=2][color=#0000ff]Private[/color][/SIZE][SIZE=2] Cnn [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlConnection([/SIZE][SIZE=2][color=#800000]"Data Source=.\SQLEXPRESS;AttachDbFilename='"[/color][/SIZE][SIZE=2] & Application.StartupPath & [/SIZE][SIZE=2][color=#800000]"\Stores.Mdf';Integrated Security=True;User Instance=True"[/color][/SIZE][SIZE=2])[/SIZE]
المتغير Cnn من نوع SqlConnection كائن الاتصال بقاعدة البيانات ونتوقع ان تضع قاعدة البيانات بجانب البرنامج اي الملف Exe واسم قاعدة البيانات Stors

المتغير Data المعلن من نوع StoresDataSetالتي هيكل قاعدة البيانات
المتغيرات SystemKey, LicenceKey تخص حماية النظام من النسخ وفي مشروعنا هذا لم نعمل حماية له وسيكون موضوع احد الحلقات القادمة من السلسلة
المتغير Path يحمل موقع البرنامج وقاعدة البيانات ويفيد في ايجاد الملفات المرفقة ان وجدت
المتغير ApplicationName يحمل اسم التطبيق

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2]()[/SIZE]
[SIZE=2]ReadDate()[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
عند انشاء الكائن نستدعي الاجراء المختص بقراءة البيانات

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2] ReadDate()[/SIZE]
[SIZE=2]Data = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] StoresDataSet[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Adp [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] SqlDataAdapter[/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] aTable [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataTable [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Data.Tables[/SIZE]
[SIZE=2]Adp = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlDataAdapter([/SIZE][SIZE=2][color=#800000]"Select * From "[/color][/SIZE][SIZE=2] & aTable.TableName, Cnn)[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Cmdbld [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlCommandBuilder(Adp)[/SIZE]
[SIZE=2]Adp.Fill(aTable)[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
يجدد المتغير العام Data ويعلن عن متغير من نوع SqlDataAdapter وهذا الكائن هو حلقة الوصل بين Connection و DataSet فهو يعبيء DataSet او اي جزء منها من خلال Cnn

لجميع جداول الموجودة في DataSet نسلم لل Adapter جملة SQL جميع الحقول وجميع القيود في الجدول
نبني SqlCommandBuilder وهو باني الاوامر ونسلم له Adp ثم نستدعي هذا المتغير لتعبئة الجدول ببياناته

الاجراء WriteData المختص بحفظ البيانات وهو مشابه للاجراء قراءة بيانات

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2] WriteData()[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Adp [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] SqlDataAdapter[/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] aTable [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataTable [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Data.Tables[/SIZE]
[SIZE=2]Adp = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlDataAdapter([/SIZE][SIZE=2][color=#800000]"Select * From "[/color][/SIZE][SIZE=2] & aTable.TableName, Cnn)[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Cmdbld [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlCommandBuilder(Adp)[/SIZE]
[SIZE=2]Adp.Update(aTable)[/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
الاجراء Run لتشغيل اي ملف او برنامج خارجي

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2] Run([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Path [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][color=#0000ff]Try[/color][/SIZE]
[SIZE=2]Process.Start(Path)[/SIZE]
[SIZE=2][color=#0000ff]Catch[/color][/SIZE][SIZE=2] ex [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] Exception[/SIZE]
[SIZE=2]MessageBox.Show([/SIZE][SIZE=2][color=#800000]"The file "[/color][/SIZE][SIZE=2] & Path & [/SIZE][SIZE=2][color=#800000]" Can't be found..."[/color][/SIZE][SIZE=2] & vbCrLf & [/SIZE][SIZE=2][color=#800000]"Try again latter..."[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Run..."[/color][/SIZE][SIZE=2], MessageBoxButtons.OK, MessageBoxIcon.Error)[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Try[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
الاجراء NewRow المتخصص باضافة قيد جديد لاي جدول بيانات

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Shared[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] NewRow([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Table [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataTable) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Integer[/color][/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] ID [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Integer[/color][/SIZE][SIZE=2] = 1[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] TmpIDs [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] IDs(Table)[/SIZE]
[SIZE=2]TmpIDs = TmpIDs.Sort[/SIZE]
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] TmpIDs.Count > 0 [/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE][SIZE=2] ID = TmpIDs(TmpIDs.Count - 1) + 1[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Rw [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow = Table.NewRow[/SIZE]
[SIZE=2]Rw = FillDefaultData(Rw)[/SIZE]
[SIZE=2]Rw(0) = ID[/SIZE]
[SIZE=2]Table.Rows.Add(Rw)[/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] ID[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
يستلم هذا الاجراء جدول بيانات يكون اعلى مفتاح للقيد المراد انشاءه وهو عدد قيود الجدول مضاف لو 1
يكون القيد الجديد ويسدعي الدالة FillDefaultData لكي تعبئه بالقيم الافتراضية ويضيفه للجدول

الدالة FillDefaultData تستلم قيد وتمر على الحقول التي فيه وتعبئها بقيم افتراضية

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Shared[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] FillDefaultData([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Row [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataRow[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Cln [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataColumn[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Typ [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE]
[SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] Cln [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] Row.Table.Columns[/SIZE]
[SIZE=2][color=#0000ff]If[/color][/SIZE][SIZE=2] IsDBNull(Row(Cln)) [/SIZE][SIZE=2][color=#0000ff]Then[/color][/SIZE]
[SIZE=2]Typ = Cln.DataType.ToString.Substring(7) [/SIZE][SIZE=2][color=#008000]' For Cut [System.][/color][/SIZE]
[SIZE=2][color=#0000ff]Select[/color][/SIZE][SIZE=2][color=#0000ff]Case[/color][/SIZE][SIZE=2] Typ[/SIZE]
[SIZE=2][color=#0000ff]Case[/color][/SIZE][SIZE=2][color=#800000]"String"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Char"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Object"[/color][/SIZE]
[SIZE=2]Row(Cln) = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE]
[SIZE=2][color=#0000ff]Case[/color][/SIZE][SIZE=2][color=#800000]"DateTime"[/color][/SIZE]
[SIZE=2]Row(Cln) = Now.Date[/SIZE]
[SIZE=2][color=#0000ff]Case[/color][/SIZE][SIZE=2][color=#800000]"Byte"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Integer"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Long"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Short"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Int16"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Int32"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Int64"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Decimal"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Single"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Double"[/color][/SIZE]
[SIZE=2]Row(Cln) = 0[/SIZE]
[SIZE=2][color=#0000ff]Case[/color][/SIZE][SIZE=2][color=#800000]"Boolean"[/color][/SIZE]
[SIZE=2]Row(Cln) = [/SIZE][SIZE=2][color=#0000ff]False[/color][/SIZE]
[SIZE=2][color=#0000ff]Case[/color][/SIZE][SIZE=2][color=#0000ff]Else[/color][/SIZE]
[SIZE=2]InputBox([/SIZE][SIZE=2][color=#800000]"Insert This Type to FillDefault Function"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]"Call Programmer"[/color][/SIZE][SIZE=2], Typ)[/SIZE]
[SIZE=2][color=#0000ff]Stop[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Select[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]If[/color][/SIZE]
[SIZE=2][color=#0000ff]Next[/color][/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] Row[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
بسيط لا يحتاج لشرح
الرد }}}
تم الشكر بواسطة:
#5
الاجراء Edit وهو اجراء يفيد في تصحيح الاخطاء ففي وقت معين تحتاج لترى خصائص كائن معين اثناء التنفيذ وتعدل بها فما عليك الا استدعاء هذا الاجراء وتمرر له المتغير المطلوب

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2] Edit([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] EditableObject [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Object[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] frm [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] Form[/SIZE]
[SIZE=2][color=#0000ff]With[/color][/SIZE][SIZE=2] frm[/SIZE]
[SIZE=2].Font = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] System.Drawing.Font([/SIZE][SIZE=2][color=#800000]"Tahoma"[/color][/SIZE][SIZE=2], 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, [/SIZE][SIZE=2][color=#0000ff]CType[/color][/SIZE][SIZE=2](178, [/SIZE][SIZE=2][color=#0000ff]Byte[/color][/SIZE][SIZE=2]))[/SIZE]
[SIZE=2].ClientSize = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] System.Drawing.Size(288, 406)[/SIZE]
[SIZE=2].ShowInTaskbar = [/SIZE][SIZE=2][color=#0000ff]False[/color][/SIZE]
[SIZE=2].StartPosition = System.Windows.Forms.FormStartPosition.CenterParent[/SIZE]
[SIZE=2].Text = EditableObject.GetType.ToString & [/SIZE][SIZE=2][color=#800000]" Property"[/color][/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Pry [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] PropertyGrid[/SIZE]
[SIZE=2][color=#0000ff]With[/color][/SIZE][SIZE=2] Pry[/SIZE]
[SIZE=2].Dock = DockStyle.Fill[/SIZE]
[SIZE=2].SelectedObject = EditableObject[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]With[/color][/SIZE]
[SIZE=2].Controls.Add(Pry)[/SIZE]
[SIZE=2].ShowDialog()[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]With[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
يكون نموذج جديد ويضبط خصائصه
Font هذه الطريقة لتوليد متغير لبناء خط
حجم النموذج
ولا يظهر في شريط المهام
واول ظهور له في وسط نموذج المشروع
وعنوان النموذج يكون كلمة (خصائص) يليها اسم الكائن المطلوب عرض خصائصه


كود :
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Pry [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] PropertyGrid[/SIZE]
[SIZE=2][color=#0000ff]With[/color][/SIZE][SIZE=2] Pry[/SIZE]
[SIZE=2].Dock = DockStyle.Fill[/SIZE]
[SIZE=2].SelectedObject = EditableObject[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]With[/color][/SIZE]
نعلن عن متغير من نوع الاداة PropertyGrid ونجعلها تمليء النموذج من خلال الخاصية Dock ونعلم الاداة بالكائن المطلوب استعراضه
نضيف الاداة للنموذج وننظهر النموذج

الاجراء Execute لتنفيذ اي SQL

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE][SIZE=2] Execute([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] SQL [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]Cnn.Open()[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Cm [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlCommand(SQL, Cnn)[/SIZE]
[SIZE=2]Cm.ExecuteNonQuery()[/SIZE]
[SIZE=2]Cnn.Close()[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Sub[/color][/SIZE]
هنا يجب الانتباه الى انه يجب حفظ البيانات قبل استدعاء هذا الاجراء

الاجراء Calculate لتنفيذ اي SQL ترجع نتيجة

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] Calculate([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] SQL [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Double[/color][/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Ret [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]Double[/color][/SIZE]
[SIZE=2]Cnn.Open()[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Cm [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlCommand(SQL, Cnn)[/SIZE]
[SIZE=2][color=#0000ff]Try[/color][/SIZE]
[SIZE=2]Ret = Cm.ExecuteScalar[/SIZE]
[SIZE=2][color=#0000ff]Catch[/color][/SIZE][SIZE=2] ex [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] Exception[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Try[/color][/SIZE]
[SIZE=2]Cnn.Close()[/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] Ret[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
الدالة Viewer ترجع DataViewer اذا رغبنا

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] Viewer([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] Table [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataTable, [/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] strFilter [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#0000ff]Optional[/color][/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] strSort [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataView[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Ret [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] DataView = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] DataView(Table, strFilter, strSort, DataViewRowState.CurrentRows)[/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] Ret[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
الدالة Reader ترجع DataReader

كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] Reader([/SIZE][SIZE=2][color=#0000ff]ByVal[/color][/SIZE][SIZE=2] SQL [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2]) [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] SqlDataReader[/SIZE]
[SIZE=2]Cnn.Open()[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Cm [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] SqlCommand(SQL, Cnn)[/SIZE]
[SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Ret [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] SqlDataReader = Cm.ExecuteReader(CommandBehavior.CloseConnection)[/SIZE]
[SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] Ret[/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE]
[SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][color=#0000ff]Class[/color][/SIZE]
تم الكائن
الرد }}}
تم الشكر بواسطة:
#6
الرد }}}
تم الشكر بواسطة:
#7
http://vb4arb.com/vb/uploaded/18_01349179658.zip

هذا فيه الكود اللي شرحناه
الرد }}}
تم الشكر بواسطة:
#8
http://vb4arb.com/vb/uploaded/18_01349179887.zip
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الحلقة السابعة من السلسلة 167- استخراج جميع معلومات الجهاز RaggiTech 5 4,502 29-06-21, 05:29 AM
آخر رد: kebboud
  برامج 167 للبرمجة الحلقة الاولى RaggiTech 0 1,773 03-10-12, 01:38 AM
آخر رد: RaggiTech
  الحلقة صفر من السلسلة 167 للبرمجة RaggiTech 0 1,853 02-10-12, 04:32 PM
آخر رد: RaggiTech
  الحلقة العاشرة من السلسلة 167 - اضافة المخطط (Chart) الى التقرير RaggiTech 0 2,009 02-10-12, 04:31 PM
آخر رد: RaggiTech
  الحلقة السادسة من السلسلة 167 (المبلغ كتابتا) RaggiTech 0 1,857 02-10-12, 04:29 PM
آخر رد: RaggiTech
  الحلقة الرابعة من السلسلة 167 - حل مشكلة Socket مع مثال شات RaggiTech 0 2,176 02-10-12, 04:24 PM
آخر رد: RaggiTech
  الحلقة الخامسة من السلسلة 167 كود برنامج مسنجر كامل على الشبكة المحلية RaggiTech 0 1,902 02-10-12, 04:18 PM
آخر رد: RaggiTech
  الحلقة الثامنة من السلسلة 167- دارسة في الألوان RaggiTech 0 1,889 02-10-12, 04:17 PM
آخر رد: RaggiTech
  الحلقة التاسعة من السلسلة 167 حفظ الصور في تطبيق قواعد بيانات RaggiTech 0 2,207 02-10-12, 04:15 PM
آخر رد: RaggiTech

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


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