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

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

بدأه متفائل جداً في 16 أكتوبر 2008 · 7 رد · 1,629 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أتمنى من الجمع المساعدة ، فقد أعييتني هذه المشكلة حقاً

هذا شرح مختصر ، ومرفق مثال

جداول

مقالات سياسية : MQP الحقول التالية ID, A,T,NO وهي حقل ترقيم تلقائي ، العنوان ، النص.

مقالات ثقافية : MQR الحقول التالية ID, A,T,NO وهي حقل ترقيم تلقائي ، العنوان ، النص.

مقالات إقتصادية: MQC الحقول التالية ID, A,T,NO وهي حقل ترقيم تلقائي ، العنوان ، النص.

طبعا حقل T من نوع Memo

لاتوجد أي علاقات بين الجداول وهذا أمر طبيعي .

المطلوب الآن هو البحث عن كلمة في الجداول الثلاثة جميعاً ، وعرض النتائج في DataGridView1

جربت جملة إستعلام الربط لكنها لاتفيدني في هذا المثال لإني لا أريد ان اربط بين الجداول لعدم فائدة ذلك أصلا

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

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

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

حاولت وضع المثال بالمرفقات لكن لم يقبل نموذج الرفع لتعدي حجم الرفع الحجم المتاح ..

لذلك هذا الرابط وأتمنى التفاعل من الأخوة الكرام

http://depositfiles.com/files/8828436

#2

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

حياكم الله من جديد

لا أدري هل السؤال معقد لهذه الدرجة

إن كان لايمكن التعديل على المثال المرفوع يااخوة

فهذا السؤال المختصر ويكفي إجابته

لدي جدولين أريد أن أعرضهما سوياً في داتا جريد فيو ليس بينهم أي علاقة ، ولا أريد أي علاقة بينهما

مثال

الجدول الاول : emp فيه الحقول التالية id,name,phon

الجدول الثاني : emps فيه الحقول التالية id,name,phon

كيف توضع في dataset1

وإن وضعت فما مصدر السجلات في الداتاجريد فيو

او اذا في حل آخر

علماً أن نسخة فيجوال اكسبريس 2005

استخدم الإتصال المنفصل بـ ado.net

قاعدة بيانات أكسس

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

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

#3
اقتباس
لدي جدولين أريد أن أعرضهما سوياً في داتا جريد فيو ليس بينهم أي علاقة ، ولا أريد أي علاقة بينهما

مثال

الجدول الاول : emp فيه الحقول التالية id,name,phon

الجدول الثاني : emps فيه الحقول التالية id,name,phon

استخدم union بالشكل التالي

Select ID,Name From Tab1 Where Name ="xValue" 
UNION
Select ID,Name From Tab2 Where Name ="xValue"
#4

جزاك الله خيراً أخي الفاضل حلت المشكلة والحمد لله

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

لدي ثلاث قواعد بيانات

القاعدة الاولى SON فيها الجدول التالي son يحتوي على الحقول التالية : ID,S,T

القاعدة الثانية MON فيها الجدول التالي son يحتوي على الحقول التالية : ID ,S ,T

القاعدة الثالثة ROM فيها الجدول التالي son يحتوي على الحقول التالية : ID , S, T

المطلوب هي جملة الإستعلام التي ترجع بالنتيجة بحسب الإدخال في مربع النص TEXTBOX1

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

وتخيل لو كان عندي أكثر من مئة قاعدة بيانات ... فهل من المعقول أن اضع كل قاعدة بيانات في متغير ؟ أستدعيه ؟

لابد من حل او طريقة معينة

أتوقع سيتسائل أحدكم .. ليش مغلب حالك وماتخليها بقاعدة بيانات واحدة ..

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

فهل مافعلته صحيح وإن لم يكن كذلك مالحل ؟

وفي كل حال ارغب بمعرفة المعلومة هذه حتى ولو كانت الطريقة فيها صعوبة ..

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

Public ConStrQT1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT1.mdb"
	Public ConStrQT2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT2.mdb"
	Public ConStrQT3 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT3.mdb"
	Public ConStrQT4 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT4.mdb"
	Public ConStrQT5 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT5.mdb"
	Public ConStrQT6 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT6.mdb"
	Public ConStrQT7 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT7.mdb"
	Public ConStrQT8 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT8.mdb"
	Public ConStrQT9 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT9.mdb"
	Public ConStrQT10 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
							   "Data Source =" & Application.StartupPath & "\QT10.mdb"



	Public ConnQT1 As New OleDbConnection(ConStrQT1)
	Public ConnQT2 As New OleDbConnection(ConStrQT2)
	Public ConnQT3 As New OleDbConnection(ConStrQT3)
	Public ConnQT4 As New OleDbConnection(ConStrQT4)
	Public ConnQT5 As New OleDbConnection(ConStrQT5)
	Public ConnQT6 As New OleDbConnection(ConStrQT6)
	Public ConnQT7 As New OleDbConnection(ConStrQT7)
	Public ConnQT8 As New OleDbConnection(ConStrQT8)
	Public ConnQT9 As New OleDbConnection(ConStrQT9)
	Public ConnQT10 As New OleDbConnection(ConStrQT10)




	Public SQLS As String
	Public DataSet1 As New DataSet

للمعلومية أستخدام برنامج فيجوال بيسيك نت 2005 إكسبريس

إتصال منفصل ، قواعد بيانات أكسس

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

تم تعديل هذه المشاركة بواسطة متفائل جداً في 22 أكتوبر 2008 في 07:18

#5
اقتباس
وتخيل لو كان عندي أكثر من مئة قاعدة بيانات ... فهل من المعقول أن اضع كل قاعدة بيانات في متغير ؟ أستدعيه ؟

لابد من حل او طريقة معينة

أتوقع سيتسائل أحدكم .. ليش مغلب حالك وماتخليها بقاعدة بيانات واحدة ..

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

فهل مافعلته صحيح وإن لم يكن كذلك مالحل ؟

وفي كل حال ارغب بمعرفة المعلومة هذه حتى ولو كانت الطريقة فيها صعوبة ..

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

و هذا يساعد علي تنظيم و سهولة الكود اكثر خصوصا لو قمت باضافة حقل مثلا BookID يشير الي جدول به اسماء الكتب بدل من انشاء قاعدة لكل كتاب

#6

نعم أخي الفاضل أحمد الباز

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

ماهي حدود الجدول الواحد .. أقصد الحد الأقصى من السجلات ؟

بعض الجداول في هذا البرنامج يتجاوز 40000 سجل ؟

فهل يعقل لو كان متوسط 100 جدول هي 10000 سجل لكل جدول يعني 10000 * 100 = 1000000 مليون سجل .. هل تتخيل معي أخي ؟

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

اتمنى الرد أخي الفاضل أحمد الباز على هذا الأمر فهو فعلاً يؤرقني ..

#7

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

و تقريبا انت تستخدم Access و اظن ان حجم الملف لا يزيد عن 2 جيجا لكن بالنسبة للسجلات مفيش مشكله

#8

أشكرك أخي الفاضل على التفاعل وبارك الله فيك وجزاك الله خيراً

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

لكني قررت بتصميم البرنامج بثلاث طرق وتجربتها جميعاً لإقرر بالنهاية الأنجح والأسرع

1- تعدد قواعد البيانات مع تسلسل أسمائها وتطابق أسماء الجداول في كل منها .

2- الإكتفاء فقط بقاعدة بيانات واحدة وبما أن الجداول متشابهه في الحقول وانواعها فسأضعها في جدول واحد رغم المشقة في النسخ واللصق والمحافظة على دقة العملية وتجنب الأخطاء وإضافة حقل كما قلت أخي الفاضل للجدول أسميه IDBook يتم الإنتقاء بحسب الأستعلام .

3- الإكتفاء بقاعدة يبانات واحدة فقط ، واضافة كل الجداول .

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

كمثال :

بعد البحث عن مشكلة عانيت منها وهي بالشكل التالي :

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

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

لكن المشكلة تأتي عندما أختار جدول آخر طبعاً الـ dataset ستكون ملئت ببيانات جدول آخر بحسب التحديد الذي حددته من الشجرة المتفرعة على النموذج ..

وذلك عند الوصول لهذا الكود وهو تعبئة الريتش بوكس بالحقل المراد في الداتاسيت :

Form1.TextBox1.DataBindings.Add("TEXT", DataSet1, "o_book.Part")

فتخرج لي هذه الرسالة :

This causes two bindings in the collection to bind to the same property.

وكأنني فهمت منها إستحالة إستخدام هذه الأداة مرتين حتى لو غيرت إسم المتغير dataset1 مثلاً الى dataset2 ونظراً لعدم إمكانية تغيير oledbadapteor لإنه سيتكرر ويعبيء الداتاسيت كل مرة ..

فقمت بمحاولة لتجنب ذلك وتغيير الكود والإستغناء عن bindings.add بـ dataset.Table بالشكل التالي :

Form1.RichTextBox1.Text = DataSet1.Tables.Item("o_book").Rows.Item(0).Item(3)

ونجحت العملية لكن واجهتني مشكلة أخرى هذه المرة وهي عدم فاعلية أزرار التنقل بين السجلات حيث كنت في وضع bindings.add أستخدم هذا الكود مثلاً في زر الإنتقال للسجل التالي :

Me.BindingContext(DataSet1, "o_book").Position += 1

فما هو البديل لهذا الكود في وضعية.Text = DataSet1.Tables.Item. وهل يمكن أيضا في هذه الحالة الـتنقل بسلاسة كما في الوضع السابق بحسب الكود الأول ؟!!

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

وبارك الله فيكم وجزاكم خيراً على ماتقدمون

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

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

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

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

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