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

ممكن مساعدة في التعامل مع قاعدة بيانات للبحث عن خلية معينة في عمود معين

بدأه ahmed arkan في 21 فبراير 2011 · 24 رد · 1,256 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي قاعدة بيانات اكسس2007 تحتوي على جدول فيه عمودين ... العمود الاول الذي يحمل الاسم (Number1) وعلى سبيل المثال يحتوي على ارقام احادية 1,3,5,7,9 وفي العمود الثاني الذي يحمل الاسم (Number2) يحتوي على ارقام زوجية 2,4,6,8,10

ولدي فورم فيه textBox1 و button1 و label1

اود ان يكون برنامجي بالصيغة التالية

الحدث عند الضغط على button1

اذا كان الرقم المدخل في textBox1 = احد ارقام العمود الاول

فـــ

label1 = اسم العمود الاول والذي هو Number1

اما اذا كان الرقم المدخل في textBox1 = احد ارقام العمود الثاني

فـــ

label1 = اسم العمود الثاني والذي هو Number2

انتهى

ارجو المساعدة اخواني

تم تعديل هذه المشاركة بواسطة ahmed arkan في 21 فبراير 2011 في 19:08

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#2

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

استاذي الفاضل

بخصوص سؤالك

دعنا نوسع المثال قليلا لعل تظهر ألية الاجابة

فلنفترض الجدول الأول و هي تحت اسم TableA

Id Name

1 Name1

3 Name2

5 Name3

7 Name4

و الجدول الثاني و هي تحت اسم TableB

Id Name

2 Name5

4 Name6

6 Name7

8 Name8

و تريد عند ادخل رقم يبحث في الجدولين و يضع في الLabel الاسم المقابل للرقم أصحيح كلامي؟

الطريقة للبحث و التعامل مع الAccess هو نفس الطريقة للتعامل مع SQL Server العادي الاختلاف الوحيد هو طريقة التوصيل

جرب ان تضع هذا النص في الoledbCommand

Declare @Result nvarchar(50) Select @Result = Name from TableA where ID = @ID if (@Result is null) Select @Result = ID from TableB where ID = @ID Select @Result

و أكيد تعرف Parameter باسم @ID تأخذ القيمة المدخلة في الTextBox و تحوله لInteger

و ذلك بالافتراض ان ID نوعه Int و Name نوعه NVarChar(50)

ارجو ان اكون أفدتك أخي

تقبل خالص تحياتي

1
#3

الاخ الكريم wisamsalah شكراً على اجابتك ولكني اسف جداً قمت بالتعبير بصورة خاطئة ... انا اقصد

اقتباس
لدي قاعدة بيانات اكسس2007 تحتوي على جدول فيه عمودين

قمت بتعديل سؤالي .... اسف حقاً .. ارجو المتابعة معي

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#4

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

لا بأس أخي

في هذه الحالة أفضل ان تأتي بهذان العمودان

ففي مثالك

جدول TableNo

Number1 Number2

1 2

3 4

5 6

7 8

9 10

فستكتب هذه في الOleDBCommand

Select Number1,Number2 from TableNo

و ستضع نتيجة OleDbDataAdapter في DataTable(يفضل يكون هذا الDataTable معرف Global في الفورم أي على مستوي الفورم)

و قم بتنفيذ هذا الكود


DataRow[] QueryResult = dt.Select("Number1 = " + InputValue.ToString());
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("Number2 = " + InputValue.ToString());
Result = "Number2";
}
else Result = "Number1";
string Result = "";

علما بأن الdt هو الDatatable التي يحمل البيانات

ارجو ان أكون أفدتك

تقبل خالص تحياتي

تم تعديل هذه المشاركة بواسطة wisamsalah في 22 فبراير 2011 في 04:00

1
#5

الاخ الكريم wisamsalah شكراً جزيلاً على اجابتك .... ارجو منك الصبر لي لاني مبتديء نوعاً ما

ممكن تضع لي كود الاتصال لاني لم افهم اين اضع الـ

Select Number1,Number2 from TableNo

في الـ OleDBCommand

هل تقصد اضافته الى الصنف الخاص بالنموذج ... يعني اسفل اسطر الاتصال بقاعدة البيانات ؟

ولم افهم

اقتباس
و ستضع نتيجة OleDbDataAdapter في DataTable(يفضل يكون هذا الDataTable معرف Global في الفورم أي على مستوي الفورم)

كذلك ممكن توضيح حول الـ QueryResult .... وكيف ستكون هي النتيجة في الـ label1 في حالة كون التنيجة هكذا

Result = "Number2";

اذا كان لديك الوقت اخي wisamsalah هل بالامكان وضع كود البرنامج باكمله وشرحه بشكل مختصر ..

اعذرني على اسئلتي المبتدئة .... ارجو لك التوفيق

تم تعديل هذه المشاركة بواسطة ahmed arkan في 23 فبراير 2011 في 09:43

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#6

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

لا بأس اخي

افتح مشروع جديد نوعه WIndows Forms

و ضع فيها على الأقل TextBox و label

(أنا تركت الأسماء الافتراضي بدون تغيير و هي textBox1 و label1)

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

و بأعلي ضيف هذا لسطر

using System.Data.OleDb;

و هذا يضيف الأوامر الخاص بتعامل مع قاعدة بيانات أكسيسAccess

و بعد هذا الكود


public Form1()
{
InitializeComponent();
}

ضع هذا السطر

DataTable dt = new DataTable();

و وضع هذا السطر الذي يعرف DataTable ف هذا المكان أي كود بداخل هذا الفورم يراه و يتعامل معه بسهولة أما لو كتبته بForm_Load عمره و تواجده سيكون بداخل Form_Load فقط و عند الانتهاء من تنفيذ سطور الForm_Load سيختفي من الذاكرة و هذا ما لا نريده

و مثل هذه يعرف بتعريفه Global على مستوي الForm

و بداخل الForm_Load ضع فيها هذا الكود


OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\NumericTest.accdb;");
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select Numeric1,Numeric2 from TableA";
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(dt);

شرح الكود :

أول سطر يحتوي على الConnectyion String

و أنا كتبتها هكذا لأن نسخة الاكسيس لدي 2010 و الامتداد الخاص به accdb

سارفقه لك في هذه المشاركة ان اردت التجربة

علما بأن بها جدول باسم TableA و الذي يحتوي على عمودان Numeric1 و Numeric2 و كلاهما نوعه Number

و قد أضفت في عمود Numeric1 القيم 1،3،5،7،9 و في العمود Numeric2 القيم 2،4،6،8،0

السطر الثاني يعرف OleDBCommand و الذي سيحمل جملة التحديد

فالسطور التالية يحدد أولا OleDBCOnnection Object الذي سينفذ الأمر به و نوع الأمر و الذي هو هنا Text ثم جملة التحديد فقلت له بتحديد عمودان Numeric1 و Numeric2 من جدولTableA

و هذا الأمر سيرجع بكل القيم بالجدول

ثم عرفت OleDBAdapter و الذي سيقوم بتنفيذ الأمر و بالأمر Fill سيقوم بملئ dt

الآن بيانات الجدول محفوظ في الDataTable الذي عرفناه بdt

انقر نقر مزدوج على الTextBox و ضع فيها هذا الكود


string Result = "";
DataRow[] QueryResult = dt.Select("Numeric1 = " + textBox1.Text);
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("Numeric2 = " + textBox1.Text);
if (QueryResult.Length != 0) Result = "Numeric2";
else Result = "Not Present";
}
else Result = "Numeric1";
label1.Text = Result;

شرح الكود:

السطر الأول يعرف متغير نوعه string و اسمه Result و قد انشأت هذا المتغير ليحمل اسم العمود الذي يحتوي على القيمة المدخلة

ثم السطر الثاني بقمام عملية Select من الجدول مستخدما حالة شرطية كتبته أنا Numeric1 = ثم يدخل قيمة الtextBox1.Text

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

لذا السطر التالي أبحث عن عدد الصفوف التي رجعت

أذا كانت بصفر يقوم بالتالي:

( اعادة السطر الثاني لكن هذه المرة في العمود Numeric2 و اذا اعاد بقيمة يجعل النص بداخل Result اسم العمود الثاني Numeric2 ام لو لم يجد فيها(العمود الثاني) و قد لم يجده بالعمود الأول يجعل القيمة النصية Not Present لأنه ليس موجود بالجدول بالكامل)

أما لو وجدها في العمود الأول يجعل القيمة في Result هو Numeric1

و أخر سطر يضع محتوي Result في label1

هذا هو شرح الكود

و يمكنك تحميل قاعدة بيانات الAccess من المرفقات و ضعه في C: حتى يراه الConnection String

تقبل خالص تحياتي

NumericTest.zip

1
#7

شكرااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااا جزيلاً ... اعجز عن شكرك عزيزي .... جاري العمل

شكراً .... الله يوففقك بالدنيا والاخرة

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#8

السلام عليكم

قمت بتطبيق شرحك وظهر لي خطأ في

da.Fill(dt);

وبالنسبة لطريقتك في الاتصال بقاعدة البيانات مافرقها عن هذه ؟؟

static string Constr = "Provider=Microsoft.jet.OLEDB.4.0;"+"Data Source=NumericTest.accdb";
            OleDbConnection Conn = new OleDbConnection (ConStr);
            DataSet DataSet1 = new DataSet ();

ولقت قمت بنقل قاعدة البيانات الى ملف البرنامج WindowsFormsApplication1\bin\Debug

ارفق اليك المشروع

انا اعرف باني اثقلت كاهلك معي

WindowsFormsApplication1.rar

تم تعديل هذه المشاركة بواسطة ahmed arkan في 24 فبراير 2011 في 14:30

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#9

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

أنت خزنت ارقام فردية بعمود والزوجية بعمود آخر ......... إذا قم بوضع شرط if كما يلي :

if(textbox1.text%2=="0")
{
اكتب هنا استعلام  لجلب القيم من العمود الذي يحوي القيم الزوجية
وبالتالي تحقق من وجدود هذه القيمة المدخلة واكتب اسمه
}
eles
{
اكتب هنا استعلام لجلب القيم من العمود الذي يحوي القيم الفردية
وبالتالي تحقق من وجود هذه القيمة بالعمود وكتب اسمه
}
1

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#10

ahmed arkan كتب:

السلام عليكم

قمت بتطبيق شرحك وظهر لي خطأ في

da.Fill(dt);

وبالنسبة لطريقتك في الاتصال بقاعدة البيانات مافرقها عن هذه ؟؟


OleDbConnection Conn = new OleDbConnection (ConStr);
DataSet DataSet1 = new DataSet ();
static string Constr = "Provider=Microsoft.jet.OLEDB.4.0;"+"Data Source=NumericTest.accdb";

ولقت قمت بنقل قاعدة البيانات الى ملف البرنامج WindowsFormsApplication1\bin\Debug

ارفق اليك المشروع

انا اعرف باني اثقلت كاهلك معي

WindowsFormsApplication1.rar

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

أولا بخصوص تلك الخطأ الذي ظهر لك

فهو مرتبط باجابة سؤالك

فانا استخدمت تلك لأن محرك قاعدة البيانات بAccess 2010 ليست كتلك الذي استخدمه الاصدارات السابقة

ربما تجد تفاصيل تلك الاختلاف في هذا الرابط

رابط اكسس 2010 من MSDN

و هذا هو سبب استخدامي للConnection String و لم استخدم تلك الذي طرحته

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

رابط محرك قاعدة بيانات اكسس 2010

مع العلم ان الرابط هو من ميكروسوفت مباشر و يمكنك ملاحظة ذلك في الرابط عند فتحه

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

ارجو العلم اني قمت بتجربة المشروع أي ستجد ملف exe ارجو حذفه قبل التشغيل

و ملاحظة أخيرة:

اذا كانت ما تريد القيام به هو ما ذكرته بالمثال أفضل لك ان تستخدم الكود الذي وضعه أخي الفاضل (جزاه الله كل خير) Tammam_KD

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

اما لو كانت مثال لتنفيذه على مشروع أخر فهذا هو الطريق

و ان شاء الله تعمل معك

تقبل خالص تحياتي

WindowsFormsApplication1.zip

1
#11

شكراً جزيلاً اخي الكريم ..... ساعمل على ذلك .... لكن بصراحة اول مرة اسمع ان لكل اصدار قاعدة بيانات محرك خاص بها ... يعني (اتخلبصت) المعلومات لدي

وبالنسبة لــــــــــــــ

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

أنت خزنت ارقام فردية بعمود والزوجية بعمود آخر ......... إذا قم بوضع شرط if كما يلي :

expand | plain text

if(textbox1.text%2=="0")

{

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

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

}

eles

{

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

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

}

اقتباس
اذا كانت ما تريد القيام به هو ما ذكرته بالمثال أفضل لك ان تستخدم الكود الذي وضعه أخي الفاضل (جزاه الله كل خير) Tammam_KD

اولاً شكراً للأخ الكريم Tammam_KD على الجواب ... ولكن لدي النية في عمل برنامج استبدل فيه الـ textBox بـ dateTimePicker وجدول قاعدة البيانات يحتوي على تواريخ معينة ومختلفة في كل عمود ... بحيث عند اختيار تأريخ من الـ dateTimePicker يظهر لي الى اي عمود هو ينتمي .... والله المستعان وانتم ..... فرأيت ان اضع استفسار بسيط كالذي اعلاه واتعلم منه لكي انفذ مشروعي .... وبصراحة الاقي صعوبة كبيرة حالياً

تم تعديل هذه المشاركة بواسطة ahmed arkan في 24 فبراير 2011 في 19:11

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#12

عندما حاولت ان اكتب البرنامج من جديد وعند محاولت ادراج الرقم 1 في التيكست بوكس ظهر لي الخطأ التالي !!

مع العلم ان قاعدة البيانات موجودة بجانب الملف التنفيذي

foratweb-aa014bf8ba.jpg

بقي ان اسأل اذا قمت باستبدال textBox بـ dateTimePicker .... واستبدال جدول قاعدة البيانات بجدول اخر فيه تواريخ بزيادة عددية معينة كالجدول ادناه .... فمالذي اقوم بتغييره للعمل على ذلك ؟

foratweb-13a95573f9.jpg

تم تعديل هذه المشاركة بواسطة ahmed arkan في 24 فبراير 2011 في 20:33

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#13

ahmed arkan كتب:

عندما حاولت ان اكتب البرنامج من جديد وعند محاولت ادراج الرقم 1 في التيكست بوكس ظهر لي الخطأ التالي !!

مع العلم ان قاعدة البيانات موجودة بجانب الملف التنفيذي

foratweb-aa014bf8ba.jpg

بقي ان اسأل اذا قمت باستبدال textBox بـ dateTimePicker .... واستبدال جدول قاعدة البيانات بجدول اخر فيه تواريخ بزيادة عددية معينة كالجدول ادناه .... فمالذي اقوم بتغييره للعمل على ذلك ؟

foratweb-13a95573f9.jpg

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

أولا هل جربت المشروع الذي ارفقته لك؟؟

و اذا كانت الاجابة بنعم؟ هل عمل لديك بدون مشاكل و بدون أخطاء؟

و الأهم هل قمت بتحميل المحرك و تثبيته؟

و أخر نصيحة إلا ان تأتيبي بالرد التالي

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


try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}

أما بتبديل الTextBox بDateTimePicker يكون بتبديل التحويل لint ل DateTime

و بدل ان تعطي عبارة التحديد Numeric1= ستبدله بNumeric1 like

تقبل خالص تحياتي

تم تعديل هذه المشاركة بواسطة wisamsalah في 25 فبراير 2011 في 03:01

1
#14

السلام عليكم

اقتباس
أولا هل جربت المشروع الذي ارفقته لك؟؟

و اذا كانت الاجابة بنعم؟ هل عمل لديك بدون مشاكل و بدون أخطاء؟

نعم جربته وعمل بشكل طبيعي وبدون اي خطأ .

اقتباس
و الأهم هل قمت بتحميل المحرك و تثبيته؟

كلا لم اقم بتحميل المحرك ..

اقتباس
و أخر نصيحة إلا ان تأتيبي بالرد التالي

لم افهم قصدك ؟

بالتوفيق اخي ..... واللللللله تعبتك معي .... لكن صدقني استفد كثيراً منك .... الله لايضيع اجرك

تم تعديل هذه المشاركة بواسطة ahmed arkan في 25 فبراير 2011 في 10:36

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#15

ahmed arkan كتب:

السلام عليكم

نعم جربته وعمل بشكل طبيعي وبدون اي خطأ .

كلا لم اقم بتحميل المحرك ..

لم افهم قصدك ؟

بالتوفيق اخي ..... واللللللله تعبتك معي .... لكن صدقني استفد كثيراً منك .... الله لايضيع اجرك

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

في نقطة حيرتني....

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

أما النصيحة هي ان تضبف الكود بعد هذا السطر تحديدا

            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Location + ";Persist Security Info=False;");

تقبل خالص تحياتي

1
#16
اقتباس

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

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

شكراً لك

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#17

الحمد لله .... اعتقد الاتصال بقاعدة البيانات نجح ... بقي لي سؤال اخير ...

لااعرف بصراحة كيف اعدل على هذا الكود لجعله يعمل لصالح اداة dateTimePicker (والتي هي بدل TextBox) كذلك استخدام البحث والاستعلام عن اربع جدوال a,b,c,d (وليس جدولين كما في السابق) .

string Result = "";
            DataRow[] QueryResult = dt.Select("Numeric1 = " + textBox1.Text);
            if (QueryResult.Length == 0)
            {
                QueryResult = dt.Select("Numeric2 = " + textBox1.Text);
                if (QueryResult.Length != 0) Result = "Numeric2";
                else Result = "Not Present";
            }
            else Result = "Numeric1";
            label1.Text = Result;

مشروعي مرفق مع قاعدة البيانات ارجو من حضرتك التعديل عليه .... كما ارجو منك ملاحظة اذا كان هناك خطأ او نقص لدي ؟

WindowsFormsApplication5.rar

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#18

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

أخي الكريم

قد تم التعديل في المشروع و عمل لدي

و قد ارفقت لك هنا

تقبل خالص تحياتي

WinFormDateTime.zip

#19

// عمل لدي بصورة طبيعية .... شكراً لك

// اعجز عن الشكر ... وفقك الله تعلمت الكثير منك .

// الان ساحاول فهم الكود وتطويره لاني احسست انني كالببغاء في هذا البرنامج .

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#20

السلام عليكم

اخي الكريم عندما حاولت ان اضع صور عدد 4 باستخدام الاداة pictureBox لاظهارها مع النتائج الاربعة لم تعمل بشكل صحيح ... بحيث استخدمت الامرين show و Hide لاظهار واخفاء الصور ...

 private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {

            try
            {

                string Input = dateTimePicker1.Value.ToShortDateString();
                string Result = "";
                DataRow[] QueryResult = dt.Select("a = '" + Convert.ToDateTime(Input) + "'");
                if (QueryResult.Length == 0)
                {
                    QueryResult = dt.Select("b = '" + Convert.ToDateTime(Input) + "'");
                    if (QueryResult.Length == 0)
                    {
                        QueryResult = dt.Select("c = '" + Convert.ToDateTime(Input) + "'");
                        if (QueryResult.Length == 0)
                        {
                            QueryResult = dt.Select("d = '" + Convert.ToDateTime(Input) + "'");
                            if (QueryResult.Length == 0)
                            {
                                Result = "Not Present";
                            }
                            else Result = "d";
                            pictureBox1.Hide();
                            pictureBox2.Hide();
                            pictureBox3.Hide();
                            pictureBox4.Show();

                        }
                        else Result = "c";
                        pictureBox1.Hide();
                        pictureBox2.Hide();
                        pictureBox3.Show();
                        pictureBox4.Hide();
                    }
                    else Result = "b"; 
                    pictureBox1.Hide();
                    pictureBox2.Show();
                    pictureBox3.Hide();
                    pictureBox4.Hide();
                }
                else Result = "a"; 
                pictureBox1.Show();
                pictureBox2.Hide();
                pictureBox3.Hide();
                pictureBox4.Hide();
                label1.Text = Result;


            }

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#21

ahmed arkan كتب:

السلام عليكم

اخي الكريم عندما حاولت ان اضع صور عدد 4 باستخدام الاداة pictureBox لاظهارها مع النتائج الاربعة لم تعمل بشكل صحيح ... بحيث استخدمت الامرين show و Hide لاظهار واخفاء الصور ...


{

try
{

string Input = dateTimePicker1.Value.ToShortDateString();
string Result = "";
DataRow[] QueryResult = dt.Select("a = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("b = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("c = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("d = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
Result = "Not Present";
}
else Result = "d";
pictureBox1.Hide();
pictureBox2.Hide();
pictureBox3.Hide();
pictureBox4.Show();

}
else Result = "c";
pictureBox1.Hide();
pictureBox2.Hide();
pictureBox3.Show();
pictureBox4.Hide();
}
else Result = "b";
pictureBox1.Hide();
pictureBox2.Show();
pictureBox3.Hide();
pictureBox4.Hide();
}
else Result = "a";
pictureBox1.Show();
pictureBox2.Hide();
pictureBox3.Hide();
pictureBox4.Hide();
label1.Text = Result;


}
 private void dateTimePicker1_ValueChanged(object sender, EventArgs e)

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

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

الحل ان تحذف جميع الكود التي يضبط اخفاء أو ظهور الPictureBox الأربعة و أضافة هذه السطور في الأخر


if(Result = "b") pictureBox2.Visible = true; else pictureBox2.Visible = false;
if(Result = "c") pictureBox3.Visible = true; else pictureBox3.Visible = false;
if(Result = "d") pictureBox4.Visible = true; else pictureBox4.Visible = false;
if(Result = "a") pictureBox1.Visible = true; else pictureBox1.Visible = false;

و ان شاء الله سيضبط هذا معك باذن الله

تقبل خالص تحياتي

#22
اقتباس
فهذا يعني انه ف جميع حالاته سينفذ الأسطر الأربعة الأخيرة أي سيظهر pictureBox1 و يخفي الباقيين صح؟

صح

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

اضافتها اين ؟

ولي سؤالين

الم اضع كود اظهار الصور واخفائها في موقع تنيجة تحقق الشرط ؟ يعني اليس السطر

 else Result = "c";

مثلاً هو نتيجة تحقق الشرط ... يعني لماذا المترجم لايعتبر اضافتي جزء مع هذا الكود اعلاه وينفذ الاوامر التي ادخلتها على الـ pictuerBox ؟

والسؤال الاخر هل يمكن وضع كود (في حالة تحقق الشرط) مباشرتاً بعد كل اداة شرطية (بصراحة هذا ماتعلمته)

كالتنسيق التالي

if شرط

{
    عمل اجراء معين
}

else if شرط

{
    عمل اجراء معين
}

eles if شرط

{
    عمل اجراء معين
}

تم تعديل هذه المشاركة بواسطة ahmed arkan في 28 فبراير 2011 في 18:19

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#23

تنجح الطريقة عندي فقط عند تعديل الكود هكذا

            try
            {

                string Input = dateTimePicker1.Value.ToShortDateString();
                string Result = "";
                DataRow[] QueryResult = dt.Select("a = '" + Convert.ToDateTime(Input) + "'");
                if (QueryResult.Length == 0)
                {
                    QueryResult = dt.Select("b = '" + Convert.ToDateTime(Input) + "'");
                    if (QueryResult.Length == 0)
                    {
                        QueryResult = dt.Select("c = '" + Convert.ToDateTime(Input) + "'");
                        if (QueryResult.Length == 0)
                        {
                            QueryResult = dt.Select("d = '" + Convert.ToDateTime(Input) + "'");
                            if (QueryResult.Length == 0)
                            {
                                Result = "Not Present";
                            }
                            else
                                pictureBox4.Visible = true;
                        }
                        else
                            pictureBox3.Visible = true;

                       }
                    else
                        pictureBox2.Visible = true;
                    }
                else 
                    pictureBox1.Visible = true;

                 }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


        }

و

 private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {


            pictureBox1.Visible = false;
            pictureBox2.Visible = false;
            pictureBox3.Visible = false;
            pictureBox4.Visible = false;

لكن خسرت الـ Result ... لان باضافتها ترجع لي نفس المشكلة

اقتباس

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

كذلك القيمة الاولية للبرنامج (الصورة الاولى التي تظهر) غير صحيحة

تم تعديل هذه المشاركة بواسطة ahmed arkan في 28 فبراير 2011 في 20:20

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

#24

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

اخي العزيز

جرب هذه السطور


private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
try
{
string Input = dateTimePicker1.Value.ToShortDateString();
string Result = "";
DataRow[] QueryResult = dt.Select("a = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("b = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("c = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("d = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
Result = "Not Present";
}
else Result = "d";
}
else Result = "c";
}
else Result = "b";
}
else Result = "a";
label1.Text = Result;
if(Result = "a") pictureBox1.Visible = true; else pictureBox1.Visible = false;
if(Result = "b") pictureBox2.Visible = true; else pictureBox2.Visible = false;
if(Result = "c") pictureBox3.Visible = true; else pictureBox3.Visible = false;
if(Result = "d") pictureBox4.Visible = true; else pictureBox4.Visible = false;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

}

}
}

فهذا ان شاء الله سيضبطه مهما كانت عدد مرات قيام المستخدم باختيار التاريخ

و هذا الكود ممكن


private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
try
{
string Input = dateTimePicker1.Value.ToShortDateString();
DataRow[] QueryResult = dt.Select("a = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("b = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("c = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
QueryResult = dt.Select("d = '" + Convert.ToDateTime(Input) + "'");
if (QueryResult.Length == 0)
{
Result = "Not Present";
}
else
{
pictureBox1.Visible = false;
pictureBox2.Visible = false;
pictureBox3.Visible = false;
pictureBox4.Visible = true;
}
}
else
{
pictureBox1.Visible = false;
pictureBox2.Visible = false;
pictureBox3.Visible = true;
pictureBox4.Visible = false;
}
}
else
{
pictureBox1.Visible = false;
pictureBox2.Visible = true;
pictureBox3.Visible = false;
pictureBox4.Visible = false;
}
}
else
{
pictureBox1.Visible = true;
pictureBox2.Visible = false;
pictureBox3.Visible = false;
pictureBox4.Visible = false;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

}

}
}

تقبل خالص تحياتي

#25

شكراً اخي الكريم ..... اخي هل بالامكان شرح هذا الكود

 QueryResult = dt.Select("c = '" + Convert.ToDateTime(Input) + "'"); 
                        if (QueryResult.Length == 0)

***من الأفضل أن تمشي ببطء إلى الأمام على أن تمشي مسرعاً إلى الخلف***

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…