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

ربط قاعدة بيانات ب combobox

بدأه مصطفى_ظيمة في 25 أبريل 2010 · 15 رد · 4,371 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

والموضوع ببساطة انى عندى جدول اسمه kinder به عمود واحد اسمة kindg

كل اللى انا عايزه انى البيانات اللى فى العمود kindg تعبأ فى كمبوبوكس موجودة على الفروم اسمها combox1

وشكرا

#2

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

سويت لك هالمثال البسيط ..

بالتوفيق ,

Combobox.rar

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#3

أخى/أختى إشراقة فجر

انا شاك لك مساعدتك لى

لكن يبدو ان هناك خظأ ى هذا المثال

أرجو مراجعته

أرجو ان تتقبل معذرتى فلعله واضح من سؤالى انى مبتذأ فى الـ vb.net2008

شكرا جزيلا

#4

ما هو الخطأ الذي يظهر لك ؟

البرنامج يشتغل عندي تمام , تأكد من مسار قاعدة البيانات ..

البرنامج بسيط جداً .. قاعدة بيانات بجدول واحد و بحقل واحد ربطته مع الـ combobox ,

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#5

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

على كل حال لقد أرفقت لكى المثال الذى أعمل عليه

أرجو التعديل على هذا المثال

زشكرا

Mostafa_Zema v3.0.rar

#6

هذا ما عليك أن تضيفه

 	DB.Open()
 	Dim DataAdapter1 As New OleDbDataAdapter(SQLstr, DB)
 	Dim DataAdapter2 As New OleDbDataAdapter(SQLstr1, DB)

 	DataAdapter1.Fill(DataSet1, "gen")
 	DataAdapter2.Fill(DataSet2, "kinder")
 	DB.Close()

 	TextBox1.DataBindings.Add("Text", DataSet1, "gen.code")
 	TextBox2.DataBindings.Add("Text", DataSet1, "gen.num")
 	ComboBox1.DataBindings.Add("Text", DataSet1, "gen.kind")
 	TextBox3.DataBindings.Add("text", DataSet1, "gen.source")
 	TextBox4.DataBindings.Add("text", DataSet1, "gen.tex")
 	TextBox5.DataBindings.Add("text", DataSet1, "gen.notes")

 	'ComboBox1.Items.Clear()
 	'ComboBox1.Refresh()
 	'ComboBox1.SelectedValue = (,DataSet2, "kinder.kindg")

'I added This ===============================
 	ComboBox1.DataSource = DataSet2.Tables("kinder")
 	ComboBox1.DisplayMember = "kinds"

هذا لن تحتاج إليه

 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
 	' ComboBox1.DataBindings.Add("text", DataSet1, "kinder.kindg")
	End Sub

رغم أني لاحظت استعمالك لكائنين DataSet بينما يمكنك أن تستخدم واحدا فقط، ويكون به أي عدد تريده من الجداول

 	DataAdapter1.Fill(DataSet1, "gen")
 	DataAdapter2.Fill(DataSet1, "kinder")

للوصول للجدول الأول أو الثاني

dim dt1,dt2 as datatable

dt1 = DataSet2.Tables("kinder")
dt2 = DataSet2.Tables("kinder")

	ComboBox1.DataSource = dt2
#7

أخوي مصطفى ,

للأسف مو راضي يشتغل برنامجك .. أي إصدار تشتغل عليه ؟

بعطيك الكود الخاص بتعبئة الـ combobox

بفرض أن لدينا قاعدة بيانات DB فيها جدول أسمه City و حقل أسمه CityName ..

   
  Dim cmd As OleDbCommand
    Dim AccessCon As New OleDb.OleDbConnection
 AccessCon.ConnectionString = ("provider=Microsoft.jet.oledb.4.0;data source ="هنا تكتب المسار DB.mdb")
        AccessCon.Open()
 cmd = New OleDbCommand
        cmd.CommandType = CommandType.Text
        cmd.CommandText = " SELECT * FROM City "
        cmd.Connection = AccessCon
        Dim da As New OleDbDataAdapter(cmd)
        Dim ds As New DataSet
        Try
            da.Fill(ds, "City")
        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.OkOnly, "Exception")
            Exit Sub
        End Try
        With cbo
            .DataSource = ds.Tables("City")
            .DisplayMember = "CityName"
        End With

المعذرة أخي عمران عماري , لم أنتبه لردك :wink:

بالتوفيق ,

تم تعديل هذه المشاركة بواسطة إشراقــه فجــر في 25 أبريل 2010 في 15:55

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#8

السلام عليكم

انتو قدام اوى.......لسه حد بيريط قاعده البيانات بالمسار

بدل

اقتباس
AccessCon.ConnectionString = ("provider=Microsoft.jet.oledb.4.0;data source =C:\Documents and Settings\user\Desktop\Combobox\DB.mdb")

ب

اقتباس
Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source =" & Application.StartupPath & "\DB.mdb"

وضع القاعده مع الملف التنفيذى للمشروع

تم تعديل هذه المشاركة بواسطة mero5000 في 25 أبريل 2010 في 16:51

#9

في فترة التجريب "Developement Time" لا بأس بذلك أبدا، سواء بوضعها في مجلد الملف التنفيذي، أو في مكان محدد

المكان ليس مصدر المشكلة هنا أخ mero5000

#10

الأخ عمران عمارى

الحقيقة مش عارف اقولك ايه

جزاك الله خيرا على تصحيح الكود

وأرجو معذرتى فى الاثقال عليك فى سؤال آحر

كيف أجعل البيانات تظهر فى الـ cobobox فى الوسط حيث أنها تظهر إلى اليسار وشكرا لك

أخى mero5000 الحقيقة انا لسه مبتأ فى الـ vb2008 فرفقا بنا أخى

الأخت إشراقة فجر

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

وشكرا لك مرة أخرى

ملحوظة أنا استخدم vb2008

#11

على الرحب والسعة أخي، يمكنك جعل الكتابة من اليمين إلى اليسار بتغيير الخاصية RightToLeft إلى القيمة yes أثناء التصميم من خلال نافذة الخصائص أو عبر الكود كالتالي:

ComboBox1.RightToLeft = Windows.Forms.RightToLeft.Yes

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

#12

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

والحقيقة انا باحب المغرب وأهلها وقدزدتنى حبها فيها واهلها

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

#14

أخى الحبيب عمران

شكرا لك سعة صدرك

السؤال كالتالى

نفترض انى عندى حقل فى جدول اسمه code

هذا الحقل يتولد فيه أرقام مسلسلة للبيانات المدخلة إلى باقى حقول الجدول

كل ما اريدة هو عند الضغط على زر الإضافة يتولد رقم تسلسلى جديد بحيث لا يتكرر

سؤال آخر

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

أرجو أن يكون شرحى لطلبى واضح

ولك منى أرق التحية

#15

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

1. بالنسبة للرقم الذي يتم توليده تلقائيا، يمكن اختيار NumAuto أثناء إنشاء الجدول في Access وأثناء إعداد أمر الإدراج InsertCommand تجاهل الحقل الأول، ولا تجعله ضمن الحقول في InsertCommand

مثلا لديك الجدول يحتوي الحقول التالية

Code | Name |Tel | Addresse

تكون جملة الإدراج كالتالي

dim cmd as oleDbCommand
cmd= conn.createCommand
cmd.commandText = "insert into Table1 (Name,Tel,Addresse) Values(@name,@tel,@adresse)"

ثم تقوم بإسناد القيم لكل Parameter

بعدها execute

إذا أردت معرفة الرقم الذي تمت إضافته، هناك حلين

الأول: تعديل الأمر قبل إرساله

cmd.commandText = "INSERT INTO Table1 (Name,Tel,Addresse) VALUES(?,?,?); SELECT @@IDENTITY"
ثم
dim InsertedId as integer = cmd.executeScalar

الثاني: استخدام أمر Select بعد الإرسال

cmd = conn.createCommand
cmd.commandText = "select Max(code) from table1"
dim InsertedId as integer = cmd.executeScalar

2. بالنسبة للرقم الذي لا يتكرر أو ما يسمى Primary Key، عند إنشائك الجدول أيضا يمكنك تحديد الحقل والنقر باليمين ثم جعله Primary Key

بعد ذلك للتأكد من أن أي رقم جديد لا يطابق رقما في السابق، في الوضع المنفصل أي DataTable يقوم بذلك تلقائيا، (يمكن إضافة Primary Key لأي DataTable في أي وقت أثناء التكويد)

في الوضع المنفصل يمكنك إرسال SelectCommand قبل إرسال InsertCommand

cmd = conn.createCommand
cmd.commandText = "Select * from Table1 Where Num = ?"

بعد إضافة الرقم من NumTextBox إلى cmd.Parameters

dim rdr as oleDbDataReader = cmd.ExecuteReader
if rdr.hasRows then 
'num exist
else
'num not Exist
'insert your data
end if
#16

أخى العزيز ليس هذا ما اريده

يبدو انى لم اوضح لك الأمر جيدا

الموضوع كالتالى

انا لا اريد ان ان يكون الـ Autonumber من الأكسس

لكن الموضوع كالتالى

انا ضغطت على زر الإضافة .... يتم إنشاء رقم مسلسل جديد بمعنى انه لو كان آخر رقم فى المسلسل هو 5 مثلا يكون الرقم التالى بعد الضغط على زر الإضافة هو 6 وهكذا

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

انا اعلم انى أثقل عليك ولكن أعذرنى أخى فهى أجزاء فنية لا أعرفها

وشكر لك

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