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

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

بدأه مبرمجة فلسطين في 14 يونيو 2010 · 16 رد · 5,236 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

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

فأتمنى أن أجد عندكم الحل لهذه المشكلة

فأنتم نبع من المعلومات أسأل الله أن ينفع به الناس أجمعين

ودمتم

1
#2

السلام عليكم

اختي الفاضلة

بالنسبة لاظهار البيانات في القوائم المنسدلة فهي بسيطة

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

فاBindingSource لها وظائف كثيرة ومن بينها تحديد العناصر الموجودة في الجدول

وهذا ما نريده لكي نعرض بياناتنا في القوائم المنسدلة Comboboxes

والكود كتالي

فانفرض اننا نريد عرض اسماء الطلاب في جدول الطلاب

for i as integer = 0 to StudentBindinSource.Count-1
Combobox1.Items.Add(StudenDataSet.Student(i).StudentName)
next

هنا قمنا باستخدام جملة الدوران For واستخدمنا BindingSource لجدول الطلاب واخذنا منه خاصية العدد الكلي Count للموجودين داخل الجدول كما وضحت بالاعلى

بعد ذلك قمنا بجعل القائمة Combobox1 باضافة القيمة والتي هي اسم الطالب داخل القائمة

وايضا استخدمنا الDataSet وهي التي تمثل قاعدة البيانات والتي تكون بالكود StudentDataSet وحددنا منها جدول الطلاب Student ومن ثم حددنا من الجدول حقل اسم الطالب

و المتغير i الذي يوجد في جملة الدوران يمثل عدد الطلاب الموجودين داخل الدول كما في الكود

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

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

بالتوفيق

بسم الله الذي لا يضر مع اسمه شيء بالارض ولا بالسماء وهو السميع العليم

#3

السلام عليكم

اختي الفاضلة هذا مثال على طلبك وارجو ان توضح الفكرة باكمل وجه

للعلم : قاعدة البيانات من نوع SQL

بالتوفيق

Combobox Example.rar

بسم الله الذي لا يضر مع اسمه شيء بالارض ولا بالسماء وهو السميع العليم

#4
عبدالرحمن المرشود كتب:

السلام عليكم

اختي الفاضلة

بالنسبة لاظهار البيانات في القوائم المنسدلة فهي بسيطة

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

فاBindingSource لها وظائف كثيرة ومن بينها تحديد العناصر الموجودة في الجدول

وهذا ما نريده لكي نعرض بياناتنا في القوائم المنسدلة Comboboxes

والكود كتالي

فانفرض اننا نريد عرض اسماء الطلاب في جدول الطلاب

for i as integer = 0 to StudentBindinSource.Count-1
Combobox1.Items.Add(StudenDataSet.Student(i).StudentName)
next

هنا قمنا باستخدام جملة الدوران For واستخدمنا BindingSource لجدول الطلاب واخذنا منه خاصية العدد الكلي Count للموجودين داخل الجدول كما وضحت بالاعلى

بعد ذلك قمنا بجعل القائمة Combobox1 باضافة القيمة والتي هي اسم الطالب داخل القائمة

وايضا استخدمنا الDataSet وهي التي تمثل قاعدة البيانات والتي تكون بالكود StudentDataSet وحددنا منها جدول الطلاب Student ومن ثم حددنا من الجدول حقل اسم الطالب

و المتغير i الذي يوجد في جملة الدوران يمثل عدد الطلاب الموجودين داخل الدول كما في الكود

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

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

بالتوفيق

السلام عليكم

أشكرك أخي على هذا المجهود

   ComboBox1.DisplayMember = "[Rows].Row_Name"
  ComboBox1.ValueMember = "[Rows].Row_N"
        'ComboBox1.DataSource = dataset

       ComboBox1.DataBindings.Add(New Binding("selectedvalue", dataset1, "[Rows].Row_Name

واستطعت ان أظهر البيانات في CompoBox من جدول الصف

عندما وضعت هذا الكود في حدث اللود للفورم

في فورم ادخال بيانات طالب والذي يدخل البيانات الى جدول الطالب

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

أتمنى أن يكون السؤال واضح

فهل هذا ممكن

ولكم جزيل الشكر

تم تعديل هذه المشاركة بواسطة مبرمجة فلسطين في 16 يونيو 2010 في 12:20

#5

لم افهم ما تقصدي بالضبط في سؤالك الثاني .. ولكن ممكن ان تستخدمي تمرير القيم بين النوافذ عن طريق الباني Contractor كما في مشاركتي التالية :

/index.php?showtopic=222895&st=0&p=1102662entry1102662

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#6

السلام عليكم جميعا

اختي الفاضلة الفكرة اتضحت لي

لكن اذا ارفقتي صورة ا او مثال لطلبك

حتى اعرف ما المطلوب

:P :P :P

بالتوفيق

بسم الله الذي لا يضر مع اسمه شيء بالارض ولا بالسماء وهو السميع العليم

#7

السلام عليكم

أخوتي أعضاء المنتدى

هذا الملف الذي طلبتم وفيه تحت CopmoBox المطلوب

أتمنى سؤالي الآن يكون واضح

وعندي سؤال آخر لو سمحتم

هل يمكن التعديل على الداتاجريد مباشرة وحفظ التعديلات وكيف؟؟؟؟

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

المدرسة.rar

#8

السلام عليكم ،،،

أولاً كلمة Rows في جملة الاستعلام يجب أن تضعيها بين أقواس و ذلك أفضل لتجنب التعارض مع الكلمات المحجوزة

    Dim sqlstr As String = "SELECT * FROM [Rows]"

ثم في النافذة الخاصة بالتعديل يفضل أن تضعي الكود الخاص بتعبئة الــ ComboBox في إجراء عام مثلاً يكون كالتالي:

 
  Public Sub init()
        conn.Open()
        Dim dataadapter1 As New OleDbDataAdapter(sqlstr, conn)

        dataadapter1.Fill(dataset1, "Rows")

        conn.Close()


        ComboBox1.DisplayMember = "Rows.Row_Name"
        ComboBox1.ValueMember = "Rows.Row_No"
        ComboBox1.DataSource = dataset1
    End Sub

ثم في نافذة العرض في زر التعديل (Button) يمكن أن يكون الكود كالتالي:

Form8.init()
        Form8.TextBox1.Text = Me.TextBox1.Text
        Form8.TextBox2.Text = Me.TextBox2.Text
        Form8.TextBox3.Text = Me.TextBox3.Text
        Form8.TextBox4.Text = Me.TextBox4.Text
        Form8.TextBox5.Text = Me.TextBox6.Text
        Form8.TextBox6.Text = Me.TextBox5.Text
        Form8.TextBox7.Text = Me.TextBox9.Text
        Form8.TextBox8.Text = Me.TextBox10.Text
        Form8.TextBox9.Text = Me.TextBox12.Text
        Form8.ComboBox1.SelectedValue = Me.TextBox7.Text

هذا على ما أعتقــد ... و الله أعلم

تم تعديل هذه المشاركة بواسطة بوجلاوي في 19 يونيو 2010 في 15:51

#9

السلام عليكم

أخي بوجلاوي مشكور على جهودك

قمت بعمل ما اقترحته ولكن لم يظهر أي بيانات في داخل comboBox

أرجو المساعدة من جميع أعضاء المنتدى الكرام

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

#10

جربت كل الحلول و لكن لم تضبط معي لأن كلمة Rows كلمة محجوزة في الفيجوال بيسك دوت نت

و بعد تغيير اسم الجدول إلى Sch_Rows

و تنفيذ هذا الكود تمت تعبئة الكمبوبوكس

 conn.Open()
        Dim dataadapter1 As New OleDbDataAdapter(sqlstr, conn)

        dataadapter1.Fill(dataset1, "Sch_Rows")

        conn.Close()

        ComboBox1.DisplayMember = "Row_Name"
        ComboBox1.ValueMember = "Row_No"
        ComboBox1.DataSource = dataset1.Tables("Sch_Rows")

أتمنى أن أكون قد أفدتك

اللهم اغفر لي و لوالدي و للمؤمنين يوم يقوم الحساب

لا إله إلا الله عدد ما كان و عدد ما يكون و عدد الحركات و السكون

#11
مبرمجة فلسطين كتب:

السلام عليكم

أخي بوجلاوي مشكور على جهودك

قمت بعمل ما اقترحته ولكن لم يظهر أي بيانات في داخل comboBox

أرجو المساعدة من جميع أعضاء المنتدى الكرام

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

الأخت الكريمة

قومي بالتعديلات التالية وسيعمل برنامجك إن شاء الله ...

أولا: في نافذة بيانات الطلاب:

أضيفي متحولا على مستوى النافذة في القسم Public وليكن اسمه Position لتخزين موضع الطالب في شريط الانتقال كما يلي :

Dim position As Integer = -1

1- اضيفي الإجرائية التالية التي تقوم بملء بيانات الطلاب واجعلي مستوى الرؤية لها Friend حتى نتمكن من رؤيتها من النوافذ الأخرى كمايلي:

  Friend Sub fillStudentData()
    	Try

        	conn.Open()

        	'Clear DataSet
        	dataset1.Clear()
        	Dim dataadapter1 As New OleDbDataAdapter(sqlstr, conn)
        	dataadapter1.Fill(dataset1, "Students")

        	'If ReFill Data Resume the previouse Position
        	If position >= 0 Then
            	Me.BindingContext(dataset1, "Students").Position = position
        	End If
    	Catch ex As Exception

    	Finally
        	conn.Close()
    	End Try
	End Sub

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

2 - في حدث Form Load نقوم نقوم باستدعاء اجرائية ملء الطلاب فيصبح كمايلي :

 Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    	fillStudentData()

    	TextBox1.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_No"))
    	TextBox2.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Name"))
    	TextBox5.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_card_No"))
    	TextBox12.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Phone"))
    	TextBox6.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Address"))
    	TextBox4.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Nationality"))
    	TextBox3.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Age"))
    	TextBox9.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Birth_Date"))
    	TextBox10.DataBindings.Add(New Binding("text", dataset1, "Students.Stu_Birth_Place"))
    	TextBox7.DataBindings.Add(New Binding("text", dataset1, "Students.Row_No"))

    	changepositin()
	End Sub

3- في حدث Click لزر تعديل نكتب الكود التالي:

   	Dim frm8 As New Form8
    	frm8.TextBox1.Text = Me.TextBox1.Text
    	frm8.TextBox2.Text = Me.TextBox2.Text
    	frm8.TextBox3.Text = Me.TextBox3.Text
    	frm8.TextBox4.Text = Me.TextBox4.Text
    	frm8.TextBox5.Text = Me.TextBox6.Text
    	frm8.TextBox6.Text = Me.TextBox5.Text
    	frm8.TextBox7.Text = Me.TextBox9.Text
    	frm8.TextBox8.Text = Me.TextBox10.Text
    	frm8.TextBox9.Text = Me.TextBox12.Text

    	frm8.Owner = Me
    	frm8.Show()
    	frm8.ComboBox1.SelectedValue = Me.TextBox7.Text
    	Me.Hide()
    	'Save Previous Position
    	position = Me.BindingContext(dataset1, "Students").Position

حيث تم اعطاء تحديد النافذة الحالية (نافذة بيانات الطلاب ) أنها النافذة المالكة لنافذة تعديل الطلاب frm8.Owner = Me

وذلك حتى يكون لدينا مؤشر لهذه النافذة لنستخدمه فيما بعد كما سنرى ..

نلاحظ اسناد قيمة حقل الصف إلى الخاصية SelectedValue بعد frm8.Show أي بعد استدعاء الحدث Form Load لنافذة تعديل الطلاب، لان ComboBox الصفوف في نافذة تعديل الطلاب يتم ملء بياناته عند تحميل النافذة Form Load ..

ثم هنا نخزن موضع شريط التمرير الحالي في المتحول Position

ثانيا: في نافذة تعديل الطلاب:

1- عدلي عبارة الاستعلام عن الصفوف لتصبح كمايلي:

Dim sqlstr As String = "SELECT * FROM [Rows]"

حيث عبارة Rows كلمة محجوزة ولا يمكن استخدامها

2- في حدث Form Load للنافذة اكتبي الكود التالي لملء ComboBox بالصفوف ..

    	frm4 = Me.Owner
    	conn.Open()
    	Dim dataadapter1 As New OleDbDataAdapter(sqlstr, conn)

    	dataadapter1.Fill(dataset1, "[Rows]")

    	conn.Close()


    	ComboBox1.DisplayMember = "[Rows].Row_Name"
    	ComboBox1.ValueMember = "[Rows].Row_No"
    	ComboBox1.DataSource = dataset1

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

ثم تقوم بملء ComboBox مع الملاحظة الى اسم الجدول [Rows] ..

3- في حدث Click لزر حفظ نكتب الكود التالي:

	Dim n As String = Label10.Text
    	Dim savinto As New OleDbCommand
    	Dim constr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
	"Data Source =" & Application.StartupPath & "\School.MDB"
    	Dim conn As New OleDbConnection(constr)
    	savinto.Connection = conn
    	savinto.CommandType = CommandType.Text
    	savinto.CommandText = "update Students set Stu_No='" & Trim(TextBox1.Text) & "',Stu_Name='" & _
    	Trim(TextBox2.Text) & "',Stu_card_No='" & Trim(TextBox6.Text) & "',Stu_Phone='" & _
    	Trim(TextBox9.Text) & "',Stu_Address='" & _
    	Trim(TextBox5.Text) & "',Stu_Nationality='" & _
    	Trim(TextBox4.Text) & "',Stu_Age='" & _
    	Trim(TextBox3.Text) & "',Stu_Birth_Date='" & _
    	Trim(TextBox7.Text) & "',Stu_Birth_Place='" & _
    	Trim(TextBox8.Text) & "',Row_No='" & _
    	Trim(ComboBox1.SelectedValue.ToString()) & "'where Stu_No='" & n & "'"
    	conn.Open()
    	savinto.ExecuteNonQuery()
    	conn.Close()
    	MsgBox("تمت العملية بنجاح")
    	Me.Close()
    	frm4.fillStudentData()
    	frm4.Show()

مع الملااااااحظة إلى السطر

 Trim(ComboBox1.SelectedValue.ToString()) & "'where Stu_No='" & n & "'"

حيث ان العلاقة بين جدولي الطلاب والصفوف هي رقم الصف وليس اسم الصف ورقم الصف تشير اليه الخاصية SelectedValue لان الخاصية ValueMember قد تم ربطها برقم الصف ..

ثم نستدعي حدث اعادة تعبئة بيانات الطلاب في نافذة الطلاب ليتوافق مع التغييرات .(لذلك تم وضع مستوى الرؤية لها Friend )

وبهذا كل شيء سيعمل كما يرام ان شاء الله ..

تم تعديل هذه المشاركة بواسطة was_hal في 20 يونيو 2010 في 14:47

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#12

السلام عليكم

أشكرك على جهودكم

لكن أخي بن ملعاط

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

أرجو أن لا يضيق صدر الأعضاء من أسئلتي

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

أشكرك اخي was_hal

جاري العمل على التعديلات وسوف أوافيك بالنتائج

ويعطيك ألف عافية على الشرح الحلو

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

ونفع بك

#13

هو موجود فعلا في حدث اللود فورم form8

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

و الله سبحانه أجل و اعلم

تم تعديل هذه المشاركة بواسطة بن ملعاط في 20 يونيو 2010 في 16:59

اللهم اغفر لي و لوالدي و للمؤمنين يوم يقوم الحساب

لا إله إلا الله عدد ما كان و عدد ما يكون و عدد الحركات و السكون

#14

السلام عليكم جميعا

اختي الفاضلة مبرمجة فلسطين

اعتقد ان هذا الكود سيفيدك

For i = 0 To Class.Rows.Count - 1
 Combobox1.Items.Add(dtUser.Rows(i).Item(0)) 
 Next

بالتوفيق

بسم الله الذي لا يضر مع اسمه شيء بالارض ولا بالسماء وهو السميع العليم

#15

السلام عليكم

أشكر الجميع على جهودهم الرائعة

وشكري الخاص للأخ was_hal

نجح الكود وجربتو وزبط

أنار الله عقلك وقلبك بنور العلم والايمان

شكري دائماً يتجدد مع كل شمعة تضيئها في طريق أي طالب علم

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

#16

ا لسلام عليكم

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

المدرسة.rar

تم تعديل هذه المشاركة بواسطة بوجلاوي في 22 يونيو 2010 في 00:09

#17
بوجلاوي كتب:

ا لسلام عليكم

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

المدرسة.rar

السلام عليكم

أخي بوجلاوي

أشكر لك جهودك معي وكل الاحترام لك

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

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

وعلى العموم الطريقة التي ذكرها أخي was_hal قامت بكل شيء

مشكور مرة أخرى وجعله الله في ميزان حسناتك

ونفع بعلمك المسلمين

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