الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس في ADO.NET 2005

مثبّترائج
بدأه yaseralshikh في 31 يوليو 2006 · 202 رد · 80,577 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#76

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

أرجو من الاخوة الكرام أعضاء ومشرفي المنتدى تقديم الحل إن أمكن :unsure:

#77

شكرا يا عزيزي محمد أنت نوارة الموضوع والمحرك الرئيسي له وأنا في انتظارك بعد رمضان وما تتحفنا به من أسئلة ومقالات

#78

اخي omran555 لقد أكتشفت المشكلة والحمد لله ، ولم يصبح لديك مشكله واي شرح للكود ان مستعد . وقبل ان اعطيك المشروع ، اريد أن أوضح ما هي المشكلة وما هو الحل ..

المشكلة تكمن في هذا الكود الخاص بربط الأداة DateTimePicker بالبيانات المتعلقه به في قاعدة البيانات حيث اني استخدمت القيمة Value ..

DateTimePicker1.DataBindings.Add(New Binding("Value", MailDS, "in_mail.no_date"))

والحل للمشكلة ان يكتب هذا الكود بهذه الطريقة :

DateTimePicker1.DataBindings.Add(New Binding("Text", MailDS, "in_mail.no_date"))

أما رابط المشروع بعد ان اصبح كاملاً بدو أخطاء فهو :

http://download.35mb.com/yaser95/Mail.zip

في الختام اقول الحمد لله رب العالمين .

قريباً سوف اقدم مجموعه من الإجرائات الفرعية التي توفر علينا كتابة الكود أكثر من مره ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#79

مشكوووووووووووووور جزيل الشكر أخي العزيز وأستاذي ياسر الشيخ

فعلا بعد أن تم التغيير للتصحيح المذكور عمل المشروع بطريقة ممتازة باركك الله وسدد خطاك وجعلها في ميزان حسناتك

علماً بأن الرابط الذي وضعته لا يعمل لدي

#80

تم تثبيت الموضوع..

رأس الحكمة الإيمان بالله

#81

أخي ياسر يعطيك ألف عافية

#82

أخي محمد عبد العليم شكراً على تثبيت الموضوع ، وإن شاء الله نتمكن من إصال المعلومات للجميع ...

اخي الحبيب واستاذي نوح انا مسرور بوجودك معنا ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#83

اخوتي

لقد قمت بتحميل جميع الصفحات على حاسوبي لكي ابدا بدراستها

لكن هل تعمل على الفيجوال بيسك دوت نت الاصدار 2003 ؟؟

لاني لا امتلك الاصدارة 2005

ارجوكم ساعدوني لاني بحاجة ماسة لهذا الدرس مع العلم انني ساحاول ولكن انقذوني جزاكم الله خيرا

#84

أخي ياسر الشيخ

ألف مبروك لنا جميعاً لتثبيت الموضوع والشكر لأخونا محمد عبدالعليم المشرف على المنتدى الذي قام بتثبيت الموضوع وهذا يدل على متابعته وإن كان تأخر قليلا ولكن تم تسجيله أخيرا والحمد لله حتى تعم الفائدة ونحن في انتظار المزيد من الأخ ياسر الشيخ والأخ إبراهيم بخش الذي أنقطع منذ فترة عن الموضوع آملين أن يكون المانع خيراً ونرجوا من جميع أعضاء المنتدى ممن لهم باع طويل في برمجة ADO.NET الدلو بدلوهم في بئر المعرفة ليسقوا به كل عطشان وجزاكم الله خيرا جيعا مساهمين ومطلعين وزائرين ومناقشين وسائلين

#85

82.gif

اخي عدي في علمي أنه ليس لديك مشكلة فلا تقلق لاننا نعمل بنفس الطريقه التي في 2003 وهي تعمل في 2005 بدون مشاكل والفروقات ليست كبيره ، سوا انه في 2005 توجد أشيا جديده ومثيره لم نتطرق لها بدراسه عميقه بعد ، لكنا سوف ندرسها قريباً بعد أن نصل إلى أرض صلبه نستطيع الوقوف عليها ، لذلك يمكنك ان تشارك معنا وأي سؤال أنا والاخوان على مختلف جنسياتنا لدينا هدف واحد وهو نشر العلم ، كي نلقا جواباً عندما نسأل عن علمنا ماذا عملنا به ..

فمرحباً بك اخاً في الدنيا ، وبإذن الله أخاً في الجنة ..

236.gif

تم تعديل هذه المشاركة بواسطة yaseralshikh في 8 أكتوبر 2006 في 20:04

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#86
اقتباس
أخي الغالي بالنسبة لي توقفت على شان رمضان ، وعلى شان الأستاذ ساسر وأستاذ إبراهيم بخش ما يقولو إيش هذا القلق فير رمضان كمان

بس أنا أوريك فيهم بعد رمضان ..

ماشاء الله تبارك الله ..

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

مثلاً التي تحتوي على Master Detail .

*** مثال : بيانات الأقسام والموظفين ( الجدول الأساسي يتضمن بيانات الأقسام الأساسية والتفاصيل يحدد فيها الموظفين بنفس القسم ).

أما النماذج التي تتطلب مثلاً إنشاء ريكوردات للتفاصيل بواسطة قيم ثابتة ومسبقة .

فأنا أفضل أن أستخدم DataSet تحتوي على كلا الجدولين منفصلين وأقوم بإنشاء أكواد الإضافة عليهما منفصلة طبعاً في هذه الحالة من الشاشات لا يتطلب تعديل إلا الجدول الأساسي .

*** مثال : بيانات العقود والكمبيالات تتطلب منا تلقائياً توزيع عدد معين من الكمبيالات (السجلات) في جدول التفاصيل وفي حالة وجود DataRelation لن تستطيع الإضافة تلقائياً بواسطة تضمين أمر الإضافة البسيط إلى الداتاسيت ضمن حلقة تكرار .

هذا والله أعلم .

وآسف على التأخير في الرد .

************************************

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

أو توجد طريقة أو حيلة كنت أنا أقوم بها وهي تعبئة داتاسيت بدون DataRelation مباشرة من DataAdapter ومن ثم أقوم بإنشاء DataSet جديده على نمط الأولى وأقوم بإضافة الDataRelation إليها وبعد الإنتهاء من التعديلات على الثانية أقوم بعمل Merge بين الجداول بالثانية إلى الأولى وأقوم بإستخدام CommandBuilder وأقوم بالحفظ والتعديل والحذف .

هذا والله أعلم ..

كم كنت أتمنى أن أرفق لكم مثالاً بسيطاً لما شرحته لكم بالأعلى ولكن للأسف أتحدث الآن من مقهى إنترنت .

ولايوجد لدي هنا Visual Studio.Net .

لذا أرغب من أحد الأخوة التكرم بوضع مثال لهذه الفكرة .

*************

وكل عام وأنتم بخير ..

*************

#87

أخي العزيز وأستاذي الفاضل ياسر الشيخ

جزاك الله خيراً على هذا المجهود الذي تبذله في سبيل الرفع من درجة علم أبناء عروبتنا وجعل الله كل حرف تكتبه في ميزان حسناتك

أستاذي الفاضل : في لغات البرمجة السابقة وبالتحديد التي تحت نظام Dos كنا نجد كتب REFRINCE التي تقوم بعرض كافة الأوامر الموجودة في اللغة وتضع لها أمثلة يسهل الرجوع إليها ودراستها ومعرفة كل أمر ماهيته وعمله وملحقاته والنتائج التي نتحصل عليها عند استخدامه ولرغبتي الأكيدة في تعلم لغة VB.Net فإنني أرجوك وأرجو كافة مرتادي هذا المنتدى ممن يعرف كتاب بهذا المعني للغة VB.Net أن يضع رابطه في هذا الموضوع حتى نتمكن من الاستفادة منه ونكون له من الشاكرين .

أستاذ ياسر

أود أن أعلمك بإنني غيرت بعض الترتيبات في المشروع والتي سوف أحملها لك في رابط ولكن هناك خطأ أو لن أقل خطأ إنما تباطؤ في تنفيذ التحديثات التي تحدث على بعض الحالات سأقوم بشرحها لاحقا

#88

أستاذ ياسر

إن التغييرات في ترتيب الأوامر الذي أجريته على المشروع بحيث يظهر أولا نموذج البحث ومن ثم يعرض بيانات لاسجل المحدد إذا وجده وإذا لم يجده يعرض النموذج رقم 1 خاليا من البيانات ومهيأة لإدخال بيانات سجل جديد

كان في جهاز البيت لا يقوم بتحديث البيانات إلا بعد الخروج من البرنامج "إيقاف تشغيله فقط " والرجوع إليه لتظهر التحديثات وكان السبب العبارات التالية

If NewRec = "T" Then

TextBox1.Text = NewNum

TextBox1.Enabled = False

NewRec = ""

End If

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

ولكن هذا الأمر لم يحدث في جهاز العمل الذي يحتوي على نفس المثال وقد أحترت في السبب

فهل من أحد من أساتذتنا معرفة السبب المتوقع لهذا الأمر أرجو الإفادة

عفوا أخواني لقد نسيت أن أضع لارابط وهذا هو

Mail.rar

#89

ياجماعه الموضوع هايل ولكن اين المشروع كل الاخوه اللي رفعوه الوصلات لا تعمل

وكمان احنا محتاجين قاعده البيانات ده عشان نشوف الدنيا ماشيه ازاي

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#90

بسم الله الرحمن الرحيم

أعتذر على التأخر بالرد أولاً ، وعلى عدم كتابة أي كود في المشاركات السابقه ثانياً ..

145.gif

*************

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

230.gif

************

أخي عمران بالنسبة للكتاب الذي ذكرت أعرف واحد يقوم بشرح أغراض عائلة DataSet وهو :

برمجة قواعد البيانات باستخدام Visual Basic.NET

تأليف : Rod Stephens

ترجمة المهندس : رأفت محمد عبد الحفيظ

ولا أعلم له رابط سوا أنك تقوم بشرائه من المكتبه ، ويوجد في مكتبة المأمون بجده وسعره حينما قمت بشرائه 62 ريال سعودي .

وأرجو من أخواننا في المنتدى أن يزودونا بأسما أو روابط كتب من هذا القبيل ، وذلك حتى يكون لدينا مكتبة من المراجع ..

225.gif

************

ومرة أخرى أخي عمران ، بالنسبة للمشاركة رقم 89 لم افهم المشكلة ولم افهم المطلوب ، مع العلم انه لي ملاحظات على الكود المكتوب في المشروع المرفق فهو يحتاج إلى مجموعة من التعديلات رغم انه يعمل ، ولكن من الافضل ان يعمل بطريقه اكثر تنظيم كي يحقق سرعة الاستجابه .. ولكن سوف نؤجل ذلك حتى توافينا بتوضيح المشكله والمطلوب ..

230.gif

***********

أخي HASHAD_MAHMOUD لقد تفقدت جميع روابطي التي أرفقت فيها الملفات وهي تعمل ما عدا أثنين من البداية قمت بحدفها واعطاء روابط جديده لها بسبب تحديث الكود ، المهم أخبرني برقم المشاركات التي لم تعمل روابطها وسوف أقوم بتحميلها في روابط جديده ..

230.gif

--------------------

كنت اتمنى أن يسمح لي برفع روابطي من خلا المنتدى ولكن كلما فعلت ذلت تأتيني هذه الرسالة " مجموع المساحة المطلوبة لرفع المرفقات تجاوزت الحد المسموحة به, الرجاء تقليل حجم أو عدد المرفقات " ..

يوجد حل اخر دلوني على موقع مضمون ارفق فيه ملفاتي كي انشرها في المنتدى ...

-------------------

وقبل ان اختم انا عند وعدي بخصوص مجموعه من الإجرائات الفرعية التي توفر علينا كتابة الكود أكثر من مره ، ولكني أعد للدرس وأحتاج لوقت ، رغم أن وقتي في هذا الشهر الفضيل ضيق للغايه ، أرجو أن تصبرو قليلاً ..

230.gif

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#91

السلام عليكم ورحمة الله وبركاته

الأستاذ ياسر بارك الله فيك على سرعة الرد وأود أن أعلمك بأن المشكلة حلت وقد كان السبب أن نسخة VB.Net المركبة في جهاز البيت غير النسخة التي تم تركيبها في جهاز العمل وقد تلافيت ذلك وأشتغل المشروع في كلتا الجهازين والحمد لله فلك الشكر والتقدير لإهتمامك

أما من حيث الترتيب فأنا سأشرح لك خطوات عمل البرنامج حسبما أريد أن أصل إليه وأرجو المساعدة في الطريقة المثلى لبناء هذا المشروع وبأقصر طريق دون اللجوء والاسراف في التفاصيل أي محاولة الاختصار في أسطر الكود لأقل ما يمكن فلنبدأ ببسم الله الشافي العافي :

عند تنفيذ المشروع نريد أن يظهر نموج حاوي MDIForm توجد به قائمة وبعض الأدوات إن أمكن تحتوي القائمة على التالي:

قائمة إدخال وتعديل والتي تحتوي على 3 قوائم فرعية هي : البريد الوارد - البريد الصادر - سنوات سابقة والتي بدورها تنقسم لقائمتين فرعيتين هما البريد الوارد السابق - البريد الصادر السابق .

قائمة البحث

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

قائمة الخروج

العمل

عند فتح قائمة إدخال وتعديل واختيار الأمر البريد الوارد يتم فتح النموذج FrmSearch ويكون نص العنوان إدخال وتعديل البريد الوارد للسنة الحالية وعند إدخال رقم التسجيل الذي سيتم البحث من خلاله والضغط على زر الأمر موافق يتم البحث عن السجل الذي تكون فيه قيمة الحقل (رقم التسجيل Num ) مساوياً للقيمة المدخلة وفي كلتا الحالتين سواء وجده أم لم يجده يعرض النموذج الخاص بإدخال البريد الوارد فإذا وجده تملأ بيانات السجل في وحدات النموذج حسب ما هو مبين في المشروع الذي تم ارفاقه سابقا وإذا لم يجده يعرض النموذج في حالة إدخال سجل جديد وهكذا.... ______________________.bmp

وعند تنفيذ أمر سابق يتم فتح خيارات كما في الصورة المرفقة __________.bmp

وهي واضحة ليتم تحديد الجدول المراد العمل عليه سواء بالإدخال أو التعديل أو البحث والتقارير

قائمة البحث يتم البحث إما بنص ويكون كما في الصورة المرفقة ......... لا يسمح لي بإرفاق أكثر من ذلك سوف أرفقها في مشاركة أخرى منفصلة

#92

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

اعذروني على التطويل الذي لابد منه

نستمر

عند تنفيذ أمر البحث يتم إظهار نموذج كما هو مبين في الصورة المرفقة post-48-1160491488_thumb.jpg

هذا طبعاً إذا كان البحث نصياً أي في حقل محتوياته نص

أما إذا كان الحقل المراد البحث فيه تاريخي فسيتم البحث ببداية التاريخ ونهايته كما في الصورة المرفقة التالية post-48-1160491525_thumb.jpg

عفوا لقد كنت غبيا أو ناسيا فقد كانت الصور من نوع bmp وهذه طبعا مشهورة بكبر حجمها ولم أغيرها إلى jpg فعذرا لذلك وأرجو المسامحة

#93

اخ yaseralshikh

انا اريد المشروع الذي طرحته في اول مشاركاتك واللذي ارفقت معه الصوره في اول مشاركه وشرحت كيفيه عمله بالخطوات

جميع الراوابط لا يوجد بها هذا المشروع والموجود مشروع اخر باسم mail

وليس الذي وضع في اول مشاركه

ارجوا ان ترفقه لان الشرح عجبني جدا ولكن انا تهت في قاعده البيانات

فلدريد المشروع كاملا حتي اعرف ماذا يحدث

وشكراااا

سبحان الله وبحمده سبحان الله العظيم

لا اله الا الله محمدا رسول الله

اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

حمل كريستال ريبورت 10 اربعه اصدارات

ww12kz.jpg

hashad.jpg

#94

أخي omran555 بعد أن أصبح لديك أساسيات التعامل مع قواعد البيانات ، من المهم وقبل أن تبدأ في المشروع يجب أن تحدد أهدافك ومن الجيد كتابتها لان الكتابة تفتح المدارك إلى أمور لا ننتبه لها في الضروف العادية . يلي ذلك حدد عدد انماذج التي تحتاجها وارسم رسم كروكي لها ، بعد ذلك ركز على تصميم قاعدة البيانات من جداول وحقول ومعايير الربط بين الجداول .. إلخ ، كما أنه من الجيد أن تستخدم MDIForm يكون مديراً لباقي النماذج الأبناء .

وأمضي في مشروعك وأكتب الكود اللازم حتى لوكان فيه أخطاء في البداية ، هنا يأتي دور الإستشاره والسؤال ولن نتأخر في مساعدتك فيما علمناه وما لم نعلمه سوف نبحث سوياً له عن حل ...

تم تعديل هذه المشاركة بواسطة yaseralshikh في 14 أكتوبر 2006 في 01:13

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#95

أخي HASHAD_MAHMOUD لقد رفعت الملف خصيصاً لك وبالطبع لأخواني بشكل عام ..

أرجوا أن ينجح ذلك ، علماً بأن كلمة السر التي سوف يطلبها الرابط التالي هي : yaser

http://www.webfile.ws/d/12843

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#96

مشكور أخي واستاذي ياسر على هذا التوجيه والنصح وأنا بالفعل أعمل به وفي طور تنفيذ بريميج صغير بهذا الشأن وسوف أثقل عليك بأسئلتي فأرجو أن تعذرني وتسامحني وتطول بالك علي .

جزاك الله خيرا ودمت

#97

بسم الله الرحمن الرحيم

وبه أبدا وأستعين ، وأختم بالصلاة والسلام على خاتم الأنبياء والمرسلين ، أما بعد ..

أسف على التأخير ..

اليوم أفي بوعدي بخصوص الإجراءات الفرعية ..

وقبل أن أبدأ بكتابتها والتعليق عليها أحب أن أنوه إلى أنني أفردت درساً خاصاً بالإجراءات الفرعية تجدونه في توقيعي بالأسفل ، شرحت فيه أمور أحب أن تلقوا نظرةً عليها قبل قراءة هذه المشاركة ، وخاصة من لا يجيد التعامل مع الإجراءات الفرعية بنوعيها ، وبالطبع أريد آرائكم واقتراحاتكم و تعليقاتكم البناءة ...

-- من المهم أن نكتب هذه الإجراءات في Module للمشاركة بها في جميع نماذج البرنامج ، وكتابة جميع التصاريح اللازمة ومن أهمها كائن الاتصال بقاعدة البيانات ..

********

في الإجراء التالي نقوم بفتح الاتصال بقاعدة البيانات وتعبة DataSet بالجدول المطلوب وتهيئة DataView و CurrencyManager للعمل وله ثلاث متغيرات أولها كتابة جملة الاستعلام والثاني أسم الجدول المراد الاستعلام عنه والثالث اسم النموذج الحالي ( الفورم ) .

	Public Sub Fill_DataSetAndDataView(ByVal StrSQL As String, ByVal TableName As String, ByVal MyForm As Form)
		Try

			If cn.State = ConnectionState.Closed Then cn.Open()
			MyDS = New DataSet()
			MyDS.Clear()
			daTheBankAndData = New OleDb.OleDbDataAdapter(StrSQL, cn)
			daTheBankAndData.Fill(MyDS, TableName)
			MyDataView = New DataView(MyDS.Tables(TableName))
			MyCurrencyManager = CType(MyForm.BindingContext(MyDataView),  
			CurrencyManager)
			cn.Close()
		Catch oExcept As Exception
			MessageBox.Show(oExcept.Message)
		End Try
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Call Fill_DataSetAndDataView("SELECT TheBank.id, TheBank.AskNumber FROM TheBank;", "TheBankTabel", Me)

********

هذا الإجراء أخذته من الأخ الفاضل أحمد المصري في إحدى مشاركاته ، وقمت ببعض التعديلات الصغيرة علية ..

في الإجراء نستخدم دالة تقوم بإرجاع عدد السجلات في جدول ما من قاعدة البيانات وتعتمد في عملها على دالة الاستعلام ولها متغير واحد فقط وهو اسم الجدول .

	Public Function CountOfFields(ByVal MyTable As String) As Integer
		Try
			Dim daTheBank As OleDb.OleDbDataAdapter
			Dim TheBankTable As DataTable = New DataTable
			Dim intLoop As Integer
			If cn.State = ConnectionState.Closed Then cn.Open()
			daTheBank = New OleDb.OleDbDataAdapter("SELECT * from " & MyTable & "", cn)
			daTheBank.Fill(TheBankTable)
			intLoop = TheBankTable.Rows.Count
			Return intLoop
			daTheBank.Dispose()
			TheBankTable.Dispose()
		Catch oExcept As OleDbException
			MessageBox.Show(oExcept.Message)
		End Try
	End Function

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Dim x As Byte = CountOfFields("theBank")

***********

في الإجراء نستخدم دالة تقوم بإرجاع قيمة أخر سجل تم إظافتة إلى قاعدة البيانات وفي حقل معين من جدول معين ولها متغيران الأول اسم الجدول والثاني اسم الحقل الذي نريد أن نعرف قيمة أخر سجل فيه .

	Public Function ValueOfField(ByVal MyTable As String, ByVal Field 
		   As String) As String
		Try
			Dim daTheBank As OleDb.OleDbDataAdapter
			Dim TheBankDataSet As DataSet = New DataSet
			Dim intLoop As Integer
			Dim CountMyTable As Integer
			If cn.State = ConnectionState.Closed Then cn.Open()
			daTheBank = New OleDb.OleDbDataAdapter("SELECT " & Field & " from " & MyTable & "", cn)
			daTheBank.Fill(TheBankDataSet, "Table")
			CountMyTable = TheBankDataSet.Tables("Table").Rows.Count
			intLoop = TheBankDataSet.Tables("Table").Rows(CountMyTable - 1).Item("id")
			Return intLoop
			daTheBank.Dispose()
			TheBankDataSet.Dispose()
		Catch oExcept As OleDbException
			MessageBox.Show(oExcept.Message)
		End Try
	  End Function

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Dim x As Byte = ValueOfField("Thebank", "ID")

*********

في الإجراء نستخدم نفس الإجراء السابق ولكن بطريقة ثانية .

	Public Function ValueOfField (ByVal MyTable As String, ByVal Field As String) As String
		Try
			Dim daTheBank As OleDb.OleDbDataAdapter
			Dim TheBankTable As DataTable = New DataTable
			Dim intLoop As String
			Dim CountMyTable As Integer
			If cn.State = ConnectionState.Closed Then cn.Open()
			daTheBank = New OleDb.OleDbDataAdapter("SELECT " & Field & "		 
			from " & MyTable & "", cn)
			daTheBank.Fill(TheBankTable)
			CountMyTable = TheBankTable.Rows.Count
			intLoop = TheBankTable.Rows(CountMyTable - 1).Item(Field)
			Return intLoop
			daTheBank.Dispose()
			TheBankTable.Dispose()
		Catch oExcept As OleDbException
			MessageBox.Show(oExcept.Message)
		End Try
	End Function

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Dim x As Byte = ValueOfField("Thebank", "ID")

********

في هذا الإجراء نقوم بعمل مسلسل من الأرقام بترتيب تصاعدي لحق معين من الجدول وله متغيران الأول اسم الجدول والثاني الحقل المستهدف .

		Public Sub FillIndixNumber(ByVal MyTable As String, ByVal MyField _ 
			   As String)
		Try
			Dim daTheBank As OleDb.OleDbDataAdapter
			Dim TheBankDataSet As DataSet = New DataSet
			Dim intLoop As Integer
			If cn.State = ConnectionState.Closed Then cn.Open()
			daTheBank = New OleDb.OleDbDataAdapter("SELECT * from " &  
			MyTable & "", cn)
			daTheBank.Fill(TheBankDataSet, MyTable)
			intLoop = TheBankDataSet.Tables(MyTable).Rows.Count
		   For i As Integer = 1 To intLoop
			   Dim CmdB As New OleDb.OleDbCommandBuilder(daTheBank) 
			   TheBankDataSet.Tables(MyTable).Rows(i - 1).Item(MyField) = i
			   daTheBank.Update(TheBankDataSet, MyTable)
		   Next
		Catch oExcept As OleDbException
			MessageBox.Show(oExcept.Message)
		End Try
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Call FillIndixNumber ("TheBank", "asknumber")

**************

في الإجراء نستخدم نفس الإجراء السابق ولكن بطريقة ثانية .

	Public Sub FillIndixNumber2(ByVal MyTable As String, ByVal MyField As String, ByVal MyCondition As String)
		Try
			Dim UpdateCommand As OleDbCommand = New OleDbCommand
			Dim daTheBank As OleDb.OleDbDataAdapter
			Dim TheBankDataSet As DataSet = New DataSet
			Dim intLoop As Integer
			daTheBank = New OleDb.OleDbDataAdapter("SELECT * from " & MyTable & "", cn)
			daTheBank.Fill(TheBankDataSet, MyTable)
			intLoop = TheBankDataSet.Tables(MyTable).Rows.Count
			For i As Integer = 1 To intLoop
				UpdateCommand.Connection = cn
				UpdateCommand.CommandText = ("UPDATE " & MyTable & " set " & MyField & "=? WHERE " & MyCondition & " =?")
				UpdateCommand.CommandType = CommandType.Text
				UpdateCommand.Parameters.Clear()
				UpdateCommand.Parameters.AddWithValue("?", i)
				UpdateCommand.Parameters.AddWithValue("?", TheBankDataSet.Tables(MyTable).Rows(i - 1).Item(MyCondition))
				If cn.State = ConnectionState.Closed Then cn.Open()
				UpdateCommand.ExecuteNonQuery()
			Next
			cn.Close()
		Catch oExcept As OleDbException
			MessageBox.Show(oExcept.Message)
		End Try
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Call FillIndixNumber2("TheBank", "asknumber", "id")

************

هذا الإجراء الفرعي يعطينا رقم السجل الحالي من عدد السجلات .

	Public Function ShowPosition() As String
		' Display the current position and the number of records
		Dim MyPosition As String
		MyPosition = MyCurrencyManager.Position + 1 & _
	   " of " & MyCurrencyManager.Count()
		Return MyPosition
	End Function

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

lblPosition.Text = ShowPosition()

*************

هذا الإجراء يقوم بحذف السجل الحالي من قاعدة البيانات وله ثلاثة متغيرات ، الأول اسم الجدول والثاني اسم الحقل الذي خصص كي يكون مفتاح أساسي والثالث قيمة السجل الحالي في هذا لحقل .

	Public Sub MyDeleteRecord(ByVal TABLE As String, ByVal FIELD As String, ByVal MyValue As String)
		Dim SQL As String = ""
		SQL = "DELETE FROM " & TABLE & " WHERE " & FIELD & "=?;"
		Dim CMD As OleDbCommand = New OleDbCommand
		CMD.CommandType = CommandType.Text
		CMD.Connection = cn
		If cn.State = ConnectionState.Close Then cn.Open ()
		CMD.CommandText = SQL
		CMD.Parameters.AddWithValue("?", MyValue)
		CMD.ExecuteNonQuery()
		cn.Close()
		'Dispose Declare local variables and objects
		CMD.Dispose()
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

Dim IdValue As String = BindingContext(MyDataView).Current("id")
MyDeleteRecord("thebank", "id", IdValue)

************

هذا الإجراء يقوم بحذف جميع سجلات جدول معين وله متغير واحد وهو اسم الجدول .

	Public Sub DeleteAllRecord(ByVal TABLE As String)
		Dim SQL As String = ""
		SQL = "DELETE * FROM " & TABLE & ";"
		Dim CMD As OleDbCommand = New OleDbCommand
		CMD.CommandType = CommandType.Text
		CMD.Connection = cn
		If cn.State = ConnectionState.Close Then cn.Open ()
		CMD.CommandText = SQL
		CMD.ExecuteNonQuery()
		cn.Close()
		'Dispose Declare local variables and objects
		CMD.Dispose()
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

DeleteAllRecord("thebank")

*************

هذا الإجراء يقوم بإفراغ مربعات والنص والقوائم المنسدلة من البيانات وفك ربطها من DataSet ،وله متغير واحد وهو اسم النموذج .

	Public Sub CLEARDATA1(ByVal frm As Form)
		Dim txt As Control
		For Each txt In frm.Controls
			If TypeOf txt Is TextBox Or TypeOf txt Is ComboBox Then
				' Clear any Text ...
				txt.Text = ""
				' Clear any previous bindings...
				txt.DataBindings.Clear()
			End If
		Next
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

CLEARDATA1(Me)

***********

هذا الإجراء يقوم بإفراغ مربعات والنص والقوائم المنسدلة من البيانات وفك ربطها من DataSet ،وله متغير واحد وهو اسم Panel الذي توجد بداخله مربعات والنص والقوائم المنسدلة .

	Public Sub CLEARDATA2(ByVal myPanel As Panel)
		Dim txt As Control
		'Dim chk As CheckBox
		For Each txt In myPanel.Controls
			If TypeOf txt Is TextBox Or TypeOf txt Is ComboBox Then
				' Clear any Text ...
				txt.Text = ""
				' Clear any previous bindings...
				txt.DataBindings.Clear()
			End If
		Next
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

CLEARDATA2(Me.Panel1)

*************

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

	Public Function NothingNullDATA(ByVal frm As Form) As Boolean  
		Dim txt As Control
		Dim NothingIsNull As Boolean = True
		For Each txt In frm.Controls
			If TypeOf txt Is TextBox Or TypeOf txt Is ComboBox Then
				If txt.Text = "" Then
					NothingIsNull = False
				End If
			End If
		Next
		Return NothingIsNull
	End Function

ولكي نستدعي الإجراء نكتب NothingNullDATA(Me) فقط ، في أي جزء من البرنامج . وذلك كما يلي لمثالنا هذا ...

If NothingNullDATA(Me) = True Then
   -
   --
   ---
Else
   MsgBox("يجب التأكد من أن جميع البيانات مدخلة")
End If

*************

هذا الإجراء يقوم بالبحث عن البيانات وهو مرن للغاية بحيث يمكنك أن تبحث في أي حقل من الجدول وله ثلاث متغيرات ، الأول اسم الجدول والثاني اسم الحقل المراد البحث فيه والثالث كلمة البحث .

	Public Function MySearch(ByVal TABLE As String, ByVal FIELD As String, ByVal MyValue As String) As String
		On Error Resume Next
		Dim sqlSearch As String
		Dim daSearch As New OleDb.OleDbDataAdapter
		Dim dsSearch As DataSet
		Dim TheValue As String
		sqlSearch = "SELECT " & FIELD & " FROM " & TABLE & " Where " & FIELD & " like ('" + Trim(MyValue) + "%');"
		If cn.State = ConnectionState.Closed Then cn.Open()
		daSearch.SelectCommand = New OleDbCommand(sqlSearch, cn)
		dsSearch = New DataSet(TABLE)
		If cn.State = ConnectionState.Open Then
			daSearch.Fill(dsSearch, TABLE)
		End If
		If dsSearch.Tables(TABLE).Rows.Count <> 0 Then
			TheValue = dsSearch.Tables(TABLE).Rows(0)(FIELD)
		End If
		Return TheValue
		sqlSearch = Nothing
		daSearch.Dispose()
		dsSearch.Dispose()
	End Function

ولاستدعاء هذا الإجراء والاستفادة منه ، نكتب على سبيل المثال ..

Dim strSearch As String = MySearch("TheBank", "AskNumber", txtFind.Text)
Dim intPosition As String = MyDataView.Find(strSearch)
If intPosition = -1 Then
   MsgBox("Record Not Found")
Else
   MsgBox("Record Found")
   MyCurrencyManager.Position = intPosition
End If
strSearch = Nothing

***********

هذا الإجراء يستخدم لتعبئة ListBox بالبيانات وهو يحتوي على ثلاث متغيرات ، الأول اسم الجدول والثاني اسم الحقل الذي يحتوي على البيانات والثالث من نوع أداة تحكم وهو هنا ListBox .

	Public Sub FillListBox(ByVal TABLE As String, ByVal FIELD As String, ByVal ListBox As Object)
		On Error Resume Next
		Dim BS As New BindingSource
		Dim DS As New DataSet
		Dim str As String = "SELECT DISTINCT " & FIELD & " FROM " & TABLE & " ORDER BY " & FIELD
		Dim ADP As New OleDbDataAdapter(str, cn)
		ADP.Fill(DS, TABLE)
		BS.DataSource = DS
		BS.DataMember = TABLE
		ListBox.Items.Clear()
		ListBox.DataSource = BS
		ListBox.DisplayMember = FIELD
		ListBox.ValueMember = FIELD
		ADP.Dispose()
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

FillListBox("data", "id", Me.ListBox1)

*************

هذا الإجراء يستخدم لتعبئة ComboBox بالبيانات وهو يحتوي على ثلاث متغيرات ، الأول اسم الجدول والثاني اسم الحقل الذي يحتوي على البيانات والثالث من نوع أداة تحكم وهو هنا ComboBox .

	Public Sub FILLCOMBOBOXITEMS(ByVal TABLE As String, ByVal FIELD As String, ByVal ComboBox As Object)
		Dim I As Integer
		Dim DS As New DataSet
		Dim str As String = "SELECT DISTINCT " & FIELD & " FROM " & TABLE & " ORDER BY " & FIELD
		Dim ADP As New OleDbDataAdapter(str, cn)
		DS.Clear()
		ADP.Fill(DS, TABLE)
		ComboBox.Items.Clear()
		For I = 0 To DS.Tables(TABLE).Rows.Count - 1
			ComboBox.Items.Add(DS.Tables(TABLE).Rows(I).Item(0))
		Next I
		ADP.Dispose()
	End Sub

ولاستدعاء هذا الإجراء نكتب على سبيل المثال ..

FILLCOMBOBOXITEMS("data", "id", Me.ComboBox1)

***************

هنا نصل إلى نهاية الإجراءات الفرعية العامة التي كتبتها حتى الآن ، وأعتذر عن القصور إن وجدتم أخطاء إملائية أو برمجية أو توضيحية ...

وأحب أن تشاركونا بنشر إجراءاتكم العامة كي تعم الفائدة للجميع ، وأتمنى ممن فهم طريقة كتابة الإجراءات أن يبتكر ما يراه مناسباً ويطلعنا علية ..

ياسر الشيخ :P

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#98

عند فتح التقرير يطلب كلمة مرور كيف يتم حل المشكلة

#99

مرحباً أخي .. اسأل الله أن يعينني على مساعدتك ..

في أعتقادي لو أنك ربط التقرير بـ DataSet لن تواجه هذه المشكلة ، وأريدك أن تشاهد هذا الكود لربما نفعك ..

	 Dim rpt As New rptCrystalReport1
	 rpt.Load(Application.StartupPath & "\" & "rptCrystalReport1.rpt")
	 rpt.SetDataSource(MyDS2.Tables("YourTable"))

جرب إذا نفع الحمد لله وإذا لم ينفع لسبب ما ، لن تفلت من أيدينا حتى نلقى لك حلاً ...

0523.gif

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#100

أخي العزيز ياسر الشيخ

أنت دائماً كما عرفناك كريم شهم معتز بعروبته وبدينه

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

مواضيع مشابهة