مشكووووووور أستاذي ياسر على هذا المجهود وفعلا أمر الاضافة لم يعمل
أرجو من الاخوة الكرام أعضاء ومشرفي المنتدى تقديم الحل إن أمكن :unsure:
مشكووووووور أستاذي ياسر على هذا المجهود وفعلا أمر الاضافة لم يعمل
أرجو من الاخوة الكرام أعضاء ومشرفي المنتدى تقديم الحل إن أمكن :unsure:
شكرا يا عزيزي محمد أنت نوارة الموضوع والمحرك الرئيسي له وأنا في انتظارك بعد رمضان وما تتحفنا به من أسئلة ومقالات
اخي 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
مشكوووووووووووووور جزيل الشكر أخي العزيز وأستاذي ياسر الشيخ
فعلا بعد أن تم التغيير للتصحيح المذكور عمل المشروع بطريقة ممتازة باركك الله وسدد خطاك وجعلها في ميزان حسناتك
علماً بأن الرابط الذي وضعته لا يعمل لدي
أخي ياسر يعطيك ألف عافية
أخي محمد عبد العليم شكراً على تثبيت الموضوع ، وإن شاء الله نتمكن من إصال المعلومات للجميع ...
اخي الحبيب واستاذي نوح انا مسرور بوجودك معنا ..
1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .
2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .
-------------------------------------------------------
درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005
اخوتي
لقد قمت بتحميل جميع الصفحات على حاسوبي لكي ابدا بدراستها
لكن هل تعمل على الفيجوال بيسك دوت نت الاصدار 2003 ؟؟
لاني لا امتلك الاصدارة 2005
ارجوكم ساعدوني لاني بحاجة ماسة لهذا الدرس مع العلم انني ساحاول ولكن انقذوني جزاكم الله خيرا
===========================
زكاة العلم نشره
المهندس
عدي ياسين
من مواضيعي :
برمجة وتصميم المواقع باستخدام ASp.NET & VB.NET
ASP.NET نقل المعلومات بين صفحات الموقع باستخدام طريقة Server.Transfer
أخي ياسر الشيخ
ألف مبروك لنا جميعاً لتثبيت الموضوع والشكر لأخونا محمد عبدالعليم المشرف على المنتدى الذي قام بتثبيت الموضوع وهذا يدل على متابعته وإن كان تأخر قليلا ولكن تم تسجيله أخيرا والحمد لله حتى تعم الفائدة ونحن في انتظار المزيد من الأخ ياسر الشيخ والأخ إبراهيم بخش الذي أنقطع منذ فترة عن الموضوع آملين أن يكون المانع خيراً ونرجوا من جميع أعضاء المنتدى ممن لهم باع طويل في برمجة ADO.NET الدلو بدلوهم في بئر المعرفة ليسقوا به كل عطشان وجزاكم الله خيرا جيعا مساهمين ومطلعين وزائرين ومناقشين وسائلين

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

تم تعديل هذه المشاركة بواسطة yaseralshikh في 8 أكتوبر 2006 في 20:04
1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .
2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .
-------------------------------------------------------
درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005
اقتباسأخي الغالي بالنسبة لي توقفت على شان رمضان ، وعلى شان الأستاذ ساسر وأستاذ إبراهيم بخش ما يقولو إيش هذا القلق فير رمضان كمانبس أنا أوريك فيهم بعد رمضان ..
ماشاء الله تبارك الله ..
مجهود رائع وأكثر من رائع .... ولكن لي ملاحظة بسيطة بالنسبة للـ DataRelation وهي أنها بسيطة ولكن من وجهة نظري الخاصة لا أفضل أن أستخدمها في جميع النماذج فقط في النماذج التي أجد أنها غير معقدة .
مثلاً التي تحتوي على Master Detail .
*** مثال : بيانات الأقسام والموظفين ( الجدول الأساسي يتضمن بيانات الأقسام الأساسية والتفاصيل يحدد فيها الموظفين بنفس القسم ).
أما النماذج التي تتطلب مثلاً إنشاء ريكوردات للتفاصيل بواسطة قيم ثابتة ومسبقة .
فأنا أفضل أن أستخدم DataSet تحتوي على كلا الجدولين منفصلين وأقوم بإنشاء أكواد الإضافة عليهما منفصلة طبعاً في هذه الحالة من الشاشات لا يتطلب تعديل إلا الجدول الأساسي .
*** مثال : بيانات العقود والكمبيالات تتطلب منا تلقائياً توزيع عدد معين من الكمبيالات (السجلات) في جدول التفاصيل وفي حالة وجود DataRelation لن تستطيع الإضافة تلقائياً بواسطة تضمين أمر الإضافة البسيط إلى الداتاسيت ضمن حلقة تكرار .
هذا والله أعلم .
وآسف على التأخير في الرد .
************************************
بالنسبة لأوامر الإضافة والتعديل والحذف في حالة إستخدام DataRelation فكما ذكرت أنت أخي ياسر من الضروري أن تقوم أنت بإنشائها بواسطة الكود .
أو توجد طريقة أو حيلة كنت أنا أقوم بها وهي تعبئة داتاسيت بدون DataRelation مباشرة من DataAdapter ومن ثم أقوم بإنشاء DataSet جديده على نمط الأولى وأقوم بإضافة الDataRelation إليها وبعد الإنتهاء من التعديلات على الثانية أقوم بعمل Merge بين الجداول بالثانية إلى الأولى وأقوم بإستخدام CommandBuilder وأقوم بالحفظ والتعديل والحذف .
هذا والله أعلم ..
كم كنت أتمنى أن أرفق لكم مثالاً بسيطاً لما شرحته لكم بالأعلى ولكن للأسف أتحدث الآن من مقهى إنترنت .
ولايوجد لدي هنا Visual Studio.Net .
لذا أرغب من أحد الأخوة التكرم بوضع مثال لهذه الفكرة .
*************
وكل عام وأنتم بخير ..
*************
Oracle 10g >>> ماذا تعرف عنه ؟ ؟؟
عمل Compile لجميع الكائنات الـ inviled لديك بقاعدة البيانات
OCP: Oracle Certified Professional 10gR2 Database Administration
أخي العزيز وأستاذي الفاضل ياسر الشيخ
جزاك الله خيراً على هذا المجهود الذي تبذله في سبيل الرفع من درجة علم أبناء عروبتنا وجعل الله كل حرف تكتبه في ميزان حسناتك
أستاذي الفاضل : في لغات البرمجة السابقة وبالتحديد التي تحت نظام Dos كنا نجد كتب REFRINCE التي تقوم بعرض كافة الأوامر الموجودة في اللغة وتضع لها أمثلة يسهل الرجوع إليها ودراستها ومعرفة كل أمر ماهيته وعمله وملحقاته والنتائج التي نتحصل عليها عند استخدامه ولرغبتي الأكيدة في تعلم لغة VB.Net فإنني أرجوك وأرجو كافة مرتادي هذا المنتدى ممن يعرف كتاب بهذا المعني للغة VB.Net أن يضع رابطه في هذا الموضوع حتى نتمكن من الاستفادة منه ونكون له من الشاكرين .
أستاذ ياسر
أود أن أعلمك بإنني غيرت بعض الترتيبات في المشروع والتي سوف أحملها لك في رابط ولكن هناك خطأ أو لن أقل خطأ إنما تباطؤ في تنفيذ التحديثات التي تحدث على بعض الحالات سأقوم بشرحها لاحقا
أستاذ ياسر
إن التغييرات في ترتيب الأوامر الذي أجريته على المشروع بحيث يظهر أولا نموذج البحث ومن ثم يعرض بيانات لاسجل المحدد إذا وجده وإذا لم يجده يعرض النموذج رقم 1 خاليا من البيانات ومهيأة لإدخال بيانات سجل جديد
كان في جهاز البيت لا يقوم بتحديث البيانات إلا بعد الخروج من البرنامج "إيقاف تشغيله فقط " والرجوع إليه لتظهر التحديثات وكان السبب العبارات التالية
If NewRec = "T" Then
TextBox1.Text = NewNum
TextBox1.Enabled = False
NewRec = ""
End If
التي وضعتها في إجراء تحميل الفورم رقم 1 والتي تختبر ما إذا كان نتيجة البحث لم يجد سجل بالرقم المحدد فإنه يقوم بإدخال الرقم الذي تم البحث عليه في مكان خانة رقم التسجيل وجعل هذه الخانة غير متاحة حتى لا يقوم المشغل بتغيير الرقم بعد الخروج من عملية البحث مما قد يسبب في خطأ وجود سجل بهذا الرقم
ولكن هذا الأمر لم يحدث في جهاز العمل الذي يحتوي على نفس المثال وقد أحترت في السبب
فهل من أحد من أساتذتنا معرفة السبب المتوقع لهذا الأمر أرجو الإفادة
عفوا أخواني لقد نسيت أن أضع لارابط وهذا هو
ياجماعه الموضوع هايل ولكن اين المشروع كل الاخوه اللي رفعوه الوصلات لا تعمل
وكمان احنا محتاجين قاعده البيانات ده عشان نشوف الدنيا ماشيه ازاي
سبحان الله وبحمده سبحان الله العظيم
لا اله الا الله محمدا رسول الله
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
حمل كريستال ريبورت 10 اربعه اصدارات

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

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

************
أخي عمران بالنسبة للكتاب الذي ذكرت أعرف واحد يقوم بشرح أغراض عائلة DataSet وهو :
برمجة قواعد البيانات باستخدام Visual Basic.NET
تأليف : Rod Stephens
ترجمة المهندس : رأفت محمد عبد الحفيظ
ولا أعلم له رابط سوا أنك تقوم بشرائه من المكتبه ، ويوجد في مكتبة المأمون بجده وسعره حينما قمت بشرائه 62 ريال سعودي .
وأرجو من أخواننا في المنتدى أن يزودونا بأسما أو روابط كتب من هذا القبيل ، وذلك حتى يكون لدينا مكتبة من المراجع ..

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

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

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

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .
2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .
-------------------------------------------------------
درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005
السلام عليكم ورحمة الله وبركاته
الأستاذ ياسر بارك الله فيك على سرعة الرد وأود أن أعلمك بأن المشكلة حلت وقد كان السبب أن نسخة VB.Net المركبة في جهاز البيت غير النسخة التي تم تركيبها في جهاز العمل وقد تلافيت ذلك وأشتغل المشروع في كلتا الجهازين والحمد لله فلك الشكر والتقدير لإهتمامك
أما من حيث الترتيب فأنا سأشرح لك خطوات عمل البرنامج حسبما أريد أن أصل إليه وأرجو المساعدة في الطريقة المثلى لبناء هذا المشروع وبأقصر طريق دون اللجوء والاسراف في التفاصيل أي محاولة الاختصار في أسطر الكود لأقل ما يمكن فلنبدأ ببسم الله الشافي العافي :
عند تنفيذ المشروع نريد أن يظهر نموج حاوي MDIForm توجد به قائمة وبعض الأدوات إن أمكن تحتوي القائمة على التالي:
قائمة إدخال وتعديل والتي تحتوي على 3 قوائم فرعية هي : البريد الوارد - البريد الصادر - سنوات سابقة والتي بدورها تنقسم لقائمتين فرعيتين هما البريد الوارد السابق - البريد الصادر السابق .
قائمة البحث
قائمة الأدوات وتنقسم إلى عدة قوائم فرعية يتم من خلالها تنفيذ بعض الأعمال مثل صيانة قاعدة البيانات و إجراء النسخ الاحتياطي لملفات البيانات و آلة حاسبة و تقويم و و و ....الخ
قائمة الخروج
العمل
عند فتح قائمة إدخال وتعديل واختيار الأمر البريد الوارد يتم فتح النموذج FrmSearch ويكون نص العنوان إدخال وتعديل البريد الوارد للسنة الحالية وعند إدخال رقم التسجيل الذي سيتم البحث من خلاله والضغط على زر الأمر موافق يتم البحث عن السجل الذي تكون فيه قيمة الحقل (رقم التسجيل Num ) مساوياً للقيمة المدخلة وفي كلتا الحالتين سواء وجده أم لم يجده يعرض النموذج الخاص بإدخال البريد الوارد فإذا وجده تملأ بيانات السجل في وحدات النموذج حسب ما هو مبين في المشروع الذي تم ارفاقه سابقا وإذا لم يجده يعرض النموذج في حالة إدخال سجل جديد وهكذا.... ______________________.bmp
وعند تنفيذ أمر سابق يتم فتح خيارات كما في الصورة المرفقة __________.bmp
وهي واضحة ليتم تحديد الجدول المراد العمل عليه سواء بالإدخال أو التعديل أو البحث والتقارير
قائمة البحث يتم البحث إما بنص ويكون كما في الصورة المرفقة ......... لا يسمح لي بإرفاق أكثر من ذلك سوف أرفقها في مشاركة أخرى منفصلة
أستاذي العزيز ياسر الشيخ أخوتي وأساتذتي رواد المنتدى عذرا على التطويل ولكن أحسن طريقة للتعليم هي تنفيذ مشروع صغير وعملي ومن خلال تطويره يتم معرفة الكثير من الأوامر الخاصة باللغة والحيل التي يمكن تنفيذها للوصول لأجمل البرامج وأقواها وقد أخترت هذا المشروع لسهولته وكثر الأوامر التي يمكن استعمالها في كثير من المشاريع الكبيرة لو أن تم اتقانها في هذا المشروع الصغير
اعذروني على التطويل الذي لابد منه
نستمر
عند تنفيذ أمر البحث يتم إظهار نموذج كما هو مبين في الصورة المرفقة ![]()
هذا طبعاً إذا كان البحث نصياً أي في حقل محتوياته نص
أما إذا كان الحقل المراد البحث فيه تاريخي فسيتم البحث ببداية التاريخ ونهايته كما في الصورة المرفقة التالية ![]()
عفوا لقد كنت غبيا أو ناسيا فقد كانت الصور من نوع bmp وهذه طبعا مشهورة بكبر حجمها ولم أغيرها إلى jpg فعذرا لذلك وأرجو المسامحة
اخ yaseralshikh
انا اريد المشروع الذي طرحته في اول مشاركاتك واللذي ارفقت معه الصوره في اول مشاركه وشرحت كيفيه عمله بالخطوات
جميع الراوابط لا يوجد بها هذا المشروع والموجود مشروع اخر باسم mail
وليس الذي وضع في اول مشاركه
ارجوا ان ترفقه لان الشرح عجبني جدا ولكن انا تهت في قاعده البيانات
فلدريد المشروع كاملا حتي اعرف ماذا يحدث
وشكراااا
سبحان الله وبحمده سبحان الله العظيم
لا اله الا الله محمدا رسول الله
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
حمل كريستال ريبورت 10 اربعه اصدارات

أخي omran555 بعد أن أصبح لديك أساسيات التعامل مع قواعد البيانات ، من المهم وقبل أن تبدأ في المشروع يجب أن تحدد أهدافك ومن الجيد كتابتها لان الكتابة تفتح المدارك إلى أمور لا ننتبه لها في الضروف العادية . يلي ذلك حدد عدد انماذج التي تحتاجها وارسم رسم كروكي لها ، بعد ذلك ركز على تصميم قاعدة البيانات من جداول وحقول ومعايير الربط بين الجداول .. إلخ ، كما أنه من الجيد أن تستخدم MDIForm يكون مديراً لباقي النماذج الأبناء .
وأمضي في مشروعك وأكتب الكود اللازم حتى لوكان فيه أخطاء في البداية ، هنا يأتي دور الإستشاره والسؤال ولن نتأخر في مساعدتك فيما علمناه وما لم نعلمه سوف نبحث سوياً له عن حل ...
تم تعديل هذه المشاركة بواسطة yaseralshikh في 14 أكتوبر 2006 في 01:13
1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .
2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .
-------------------------------------------------------
درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005
أخي HASHAD_MAHMOUD لقد رفعت الملف خصيصاً لك وبالطبع لأخواني بشكل عام ..
أرجوا أن ينجح ذلك ، علماً بأن كلمة السر التي سوف يطلبها الرابط التالي هي : yaser
1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .
2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .
-------------------------------------------------------
درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005
مشكور أخي واستاذي ياسر على هذا التوجيه والنصح وأنا بالفعل أعمل به وفي طور تنفيذ بريميج صغير بهذا الشأن وسوف أثقل عليك بأسئلتي فأرجو أن تعذرني وتسامحني وتطول بالك علي .
جزاك الله خيرا ودمت
بسم الله الرحمن الرحيم
وبه أبدا وأستعين ، وأختم بالصلاة والسلام على خاتم الأنبياء والمرسلين ، أما بعد ..
أسف على التأخير ..
اليوم أفي بوعدي بخصوص الإجراءات الفرعية ..
وقبل أن أبدأ بكتابتها والتعليق عليها أحب أن أنوه إلى أنني أفردت درساً خاصاً بالإجراءات الفرعية تجدونه في توقيعي بالأسفل ، شرحت فيه أمور أحب أن تلقوا نظرةً عليها قبل قراءة هذه المشاركة ، وخاصة من لا يجيد التعامل مع الإجراءات الفرعية بنوعيها ، وبالطبع أريد آرائكم واقتراحاتكم و تعليقاتكم البناءة ...
-- من المهم أن نكتب هذه الإجراءات في 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
عند فتح التقرير يطلب كلمة مرور كيف يتم حل المشكلة
مرحباً أخي .. اسأل الله أن يعينني على مساعدتك ..
في أعتقادي لو أنك ربط التقرير بـ DataSet لن تواجه هذه المشكلة ، وأريدك أن تشاهد هذا الكود لربما نفعك ..
Dim rpt As New rptCrystalReport1
rpt.Load(Application.StartupPath & "\" & "rptCrystalReport1.rpt")
rpt.SetDataSource(MyDS2.Tables("YourTable"))جرب إذا نفع الحمد لله وإذا لم ينفع لسبب ما ، لن تفلت من أيدينا حتى نلقى لك حلاً ...

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .
2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .
-------------------------------------------------------
درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005
أخي العزيز ياسر الشيخ
أنت دائماً كما عرفناك كريم شهم معتز بعروبته وبدينه
فجزاك الله عنا كل الخير ورجائي من كل واحد يستفيد من هذه الإجراءات ولو بفكرة فقط أن يدعو لأستاذنا ياسر بالعفو والمغفرة والرحمة