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

البحث فى حقل

مغلق
بدأه الأهوانى في 22 مارس 2005 · 7 رد · 763 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخوانى فى الله جزكم الله خيراً وأرجوا ان لا أكون اثقلت عليكم .

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

وحتى اكون واضح أكثر :- مثل الsearch الموجود فى الأكسيس فعند عمل فورم على الأكسيس يمكننا وضع سيرش عليه وعند الضغط عليه يظهر لك مكان للقيمة المراد البحث عنا وأيضاً مكان أو مجال البحث فى اى حقل .

فانا أريد عمل مثل هذا اsearch .

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

جزاكم الله خيرا

#2

هو السؤال غير واضح ؟ أم السؤال صعب ؟

#3

السلام عليكم ,

الطريقة الأفضل في نظري (يمكن أن تكون معقدة بعض الشئ) :

ان تقوم بانشاء جدولين في قاعدة البيانات , الاول يحتوي علي أسماء الجداول والثاني يحتوي علي أسماء الحقول مثلاً

جدول TablesList وهيكليته كالتالي :

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

TableName : حقل نصي يحتوي علي أسماء الجداول الفعلية

TableLabel : حقل نصي يحتوي علي علي أسماء مستعارة للجدول والفائدة منه أنك ستعرض للمستخدم هذه الاسماء ذات المعني الواضح بدلا من الاسماء الفعلية في الجداول

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

جدول FieldsList وتكون هيكليته كالتالي :

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

TableID : مفتاح مرجعي للجدول ويستخدم للوصول للحقول الخاصة بجدول معين

FieldName : حقل نصي يحتوي علي اسماء الحقول الفعلية

FieldLabel : حقل نصي يحتوي علي أسماء مستعارة للحقول (نفس فكرة اسماء الجداول المستعارة)

ثم تقوم بربط الجدولين بعلاقة 1 الي M , هذا بالنسبة لقاعدة البيانات , أما بالنسبة للنموذج وفي المنطقة الخاصة بالبحث يجب أن تقوم بعرض كائنين ComboBox الأول يقوم بعرض أسماء الجداول المستعارة للمستخدم وعند إختيار احد الجداول يتم أخذ اسم الجدول الحقيقي في البرمجة :

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

DataSource=DS.TableList

DisplayMember=TableLabel

DisplayValue=TableName

بالنسبة لكائن ال ComboBox الثاني والمتعلق بالحقول :

DataSource=DS.FieldsList

DisplayMember=FieldLabel

DisplayValue=FieldName

الخطوة القادمة هي يجب عمل Filtering لبيانات الحقول إعتماداً علي بيانات الجداول (راجع في المنتدي ستجد بعض المواضيع التي تتحدث عن استخدام كائنين ComboBox يعتمد الثاني علي التغييرات التي تحدث في الأول) ...

الان وفي زر البحث تكون جملة البحث كالتالي :

Dim SelectStr As String
SelectStr="Select * From " + ComboBox1.SelectedValue + " Where(" + ComboBox2.Text + "=" + yourSearchValue + ")"

مع ملاحظة أن هذا الكود يفترض أن كائن الـ ComboBox الخاص باسماء الجداول هو ComboBox1

والثاني الخاص باسماء الحقول هو ComboBox2

ومعيار البحث هو yourSearchValue

وأتمني أن تكون الفكرة واضحة ..

والله الموفق

تم تعديل هذه المشاركة بواسطة Ammar Gaffar في 23 مارس 2005 في 08:51

#4

جزاك الله خيراً اخى

وآسف على تأخرى لأننى ظننت ان أحد لن يرد على

ومشكور على تعبك فى الرد . ربنا يبارك فيك

#5

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

أخى عمار

لى سؤالين لو تسمح

أولا: هل من الممكن تعبأة الكمبوبوكس مباشرة من الجدول بدلا من عمل جدول مستقل؟

ثانيا: هل هناك Find بدلا من هذا الاستعلام بـ Select ؟

جزاك الله كل خير

عن عبدالله بن عمر رضي الله عنهما أن رسول الله صلى الله عليه وسلم قال :

( أحب الناس إلى الله أنفعهم ، وأحب الأعمال إلى الله عز وجل سرور تدخله على مسلم ، أو تكشف عنه كربة ، أو تقضي عنه دينا ، أو تطرد عنه جوعا ، ولأن أمشي مع أخي المسلم في حاجة أحب إليّ من أن اعتكف في المسجد شهرا ، ومن كف غضبه ستر الله عورته ، ومن كظم غيظا ، ولو شاء أن يمضيه أمضاه ، ملأ الله قلبه رضا يوم القيامة ، ومن مشى مع أخيه المسلم في حاجته حتى يثبتها له ، أثبت الله تعالى قدمه يوم تزل الأقدام ، وإن سوء الخلق ليفسد العمل كما يفسد الخل العسل )

رواه الطبراني في الكبير

#6
اقتباس
أولا: هل من الممكن تعبأة الكمبوبوكس مباشرة من الجدول بدلا من عمل جدول مستقل؟

عذراً أخي لم أفهم قصدك بالضبط :) حاول التوضيح أكثر

أما بالنسبة لسؤالك :

اقتباس
ثانيا: هل هناك Find بدلا من هذا الاستعلام بـ Select ؟

هنالك أسلوبان متبعان في عملية البحث في تطبيقات الـ VB.NET :

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

الاسلوب الثاني هو البحث داخل الـ DataSet وذلك عن طريق يتم ملء كائن الـ DataSet بجميع البيانات من قاعدة البيانات عند تحميل النموذج في المرة الاولي دون الاستعلام عن بيانات محددة وتقوم بالبحث داخل الـ DataSet باستخدام كائنات الـ DataView وتعتبر هذه الطريقة الأفضل لانك تبحث عن السجلات في ذاكرة الكمبيوتر RAM وليس في قاعدة البيانات (من ناحية السرعة)

والله الموفق

#7
Ammar Gaffar كتب:
عذراً أخي لم أفهم قصدك بالضبط  :)  حاول التوضيح أكثر

أما بالنسبة لسؤالك :

هنالك أسلوبان متبعان في عملية البحث في تطبيقات الـ VB.NET :

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

الاسلوب الثاني هو البحث داخل الـ DataSet وذلك عن طريق يتم ملء كائن الـ DataSet بجميع البيانات من قاعدة البيانات عند تحميل النموذج في المرة الاولي دون الاستعلام عن بيانات محددة وتقوم بالبحث داخل الـ DataSet باستخدام كائنات الـ DataView وتعتبر هذه الطريقة الأفضل لانك تبحث عن السجلات في ذاكرة الكمبيوتر RAM وليس في قاعدة البيانات (من ناحية السرعة)

والله الموفق

أخوي ممكن تشرح هذي النقطة ..ودي أفهمها

#8

الجديد في تقنية الـ ADO.NET هو كائن الـ DataSet وهو عبارة عن كائن يمكنه محاكاة كل مايحدث في قاعدة البيانات أي بإختصار شديد يمكن أن تكون قاعدة بيانات كاملة ولكنها في الـ RAM يتم تهديمها تلقائياً بعد الخروج من البرنامج أو بواسطة الـ Dot Net Framwork وهذا الجانب الخاص بإدارة الذاكرة .

وللتوضيح أكثر :

الوصول لمحتويات قاعدة البيانات من تطبيقات الـ VB.NET لا تتم مباشرة بمعني آخر يمكن أن تكون الـ DataSet هي الوسيط بين قاعدة البيانات والتطبيق .

أي الخطوات المتبعة لقراءة محتويات قاعدة البيانات في النموذج :

1/ استخدام جملة Select لاختيار البيانات المطلوبة

2/ ملء الـ DataSet بالبيانات القادمة من قاعدة البيانات إعتمادا علي جملة Select

3/ عرض البيانات في النموذج (في كائن Data Grid أو غيره)

والاسلوب الأكثر إتباعاً في عمليات فرز البيانات هو قراءة محتويات الجدول في كائن DataSet ثم يتم الفرز في الـ DataSet وبذلك تكون قد تجنبت الرجوع مرة أخري لقاعدة البيانات (لا يمكنك ملاحظة الفرق مع البرامج الصغيرة أو السجلات المحدودة) فعلي سبيل المثال إذا قمت ببناء تطبيق يعمل علي الشبكة ومستخدمي هذا التطبيق أكثر من 50 مستخدم تخيل كمية الضغط علي قاعدة البيانات والمشاكل التي يمكن أن تحدث (وأقصد هنا مشاكل البطء في استرجاع البيانات) فلو قمت بجلب البيانات مرة واحدة وخزنتها في الذاكرة العشوائية للمستخدم ومعالجتها من هذا المستوي أسرع بكثير من استجلاب البيانات من قاعدة البيانات في كل مرة يقوم فيها المستخدم بالاستعلام عن سجلات معينة . هذا لا يعني أنك يجب تطبيق هذا الاسلوب في كل جوانب التطبيق , مثلاً هنالك بيانات لا يتم الرجوع اليها الا نادراً فما الفائدة إذن من تحميله في الذاكرة العشوائية ..

وعسي أن تكون الفكرة واضحة الان

والله الموفق

هذا الموضوع مغلق.

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