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

شرح ملخص و شامل لل ADO.Net ....

مغلق
بدأه hanysaad في 29 يونيو 2007 · 17 رد · 10,188 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اعلم ان المواضيع التى تشرح ال ADO.Net فى المنتدى كثيرة , ولكن هذا الشرح انا عملته من فترة , و به شرح لكلا من ال Connected and Disconnected Mode باختصار , وفى الوقت نفسه شامل تقريبا لكل ما نحتاجه فى تعاملنا مع برامج قواعد اليبانات , وبه العديد من الامثلة العملية.

فقررت ان اضع هذا الشرح هنا حتى يستفيد منه اكبر عدد من الاعضاء,,,,

الاكواد ان شاءا لله ستكون بالفيجوال بيسيك , والشرح سيكون على اعتبار ان الداتابيز SQLServer , وفى حالة الداتا بيز اكسيس يتم استبدال SQLClient ب OLEDB .

وبالتوفيق ان شاء الله تعالى ,,,,

تم تعديل هذه المشاركة بواسطة hanysaad في 29 يونيو 2007 في 18:13

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#2

نبدأ بكيفية عمل Connection بالداتا بيز , وهو نفسه فى كل من ال Connected وال Disconnected :

نعمل Object جديد من Connection

و نلاحظ انه يمكن ان ياخذ برامتر نوعه String وهو ال ConnectionString او يأخذه ك Property

كالتالى :

  Dim Conn As New SqlClient.SqlConnection(ConnectionString)
OR
  Dim Conn As New SqlClient.SqlConnection
  Conn.ConnectionString = ConnectionString

حيث ConnectionString متغير نوعه String , ويكون الكود كاملا كالتالى:

'SQL Connection Srring
Dim ConnectionString As String
ConnectionString = "Data Source=ServerName;Initial Catalog=DBName;Integrated Security=True"

'Access Connection Srring
Dim ConnectionString As String
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB Full Path;"

  Dim Conn As New SqlClient.SqlConnection(ConnectionString)
OR
  Dim Conn As New SqlClient.SqlConnection
  Conn.ConnectionString = ConnectionString

بعد ذلك لابد ان نفتح ال Connection , لكى نستطيع التعامل مع الداتا بيز :

Conn.Open()

ولا ننسى بعد الانتهاء من التعامل مع الداتابيز نغلق ال Connection :

Conn.Close()

بعد عمل ال Connection , نستطيع التعامل مع الداتا بيز سواء بال Connected Mode OR Disconnected Mode .

تم تعديل هذه المشاركة بواسطة hanysaad في 29 يونيو 2007 في 17:36

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#3

الدرس الثانى : Connected Mode :

نعمل Object من SQlCommand ولابد ان نعرف له خاصيتين مهمتين :

الاولى : هى Connection , وهو خاصية نوعها SQLConnection وهى عبارة عن ال Object الذى انشأناه من ال Connection

الثانية :هى CommandText , وهى خاصية نوعها String وهى عبارة عن جملة السيكوال التى نريد تنفيذها.

Dim Cmd As New SqlClient.SqlCommand
Cmd.Connection = Conn
Cmd.CommandText= "Insert Into Table1 (Name,Age) Values (' " + TxtName.text + " '," + TxtAge.Text + ")"

وايضا يمكن اعطاء هاتين الخاصيتين لل Command ك برامترز , كالتالى :

Dim Cmd As New SqlClient.SqlCommand ("Sql Query",Connection)

ثم بعد ذلك ننفذ هذا ال Command .

اذا كان ال الاستعلام الذى ننفذه , لايرجع باى قيمة (مثل Insert, Update ) نستخدم الفانكشن ExcuteNonQuery التى ترجع بقيمة عدد ال Rows التى حدث عليها تعديل.

Dim Cmd As New SqlClient.SqlCommand
Cmd.Connection = Conn
Cmd.CommandText= "Insert Into Table1 (Name,Age) Values (' " + TxtName.text + " '," + TxtAge.Text + ")"
Cmd.ExecuteNonQuery
OR
MsgBox(Cmd.ExecuteNonQuery() + "Rows Affected")

اذا كان الاستعلام يرجع بقيمة واحدة , نستخدم الفانكشن ExecuteScalar التى ترجع بقيمة نوعها Object (اى ممكن تكون String or Integer or… )

Dim Cmd As New SqlClient.SqlCommand
Cmd.Connection = Conn
Cmd.CommandText= "Select Name From Emp where ID=10"
TextBox1.Text = Cmd.ExecuteScalar()

اذا كان الاستعلام يرجع باكثر من قيمة , نستخدم الفانكشن ExecuteReader الذى ترجع بقيمة نوعها DataReader , وبالتالى نعرف اوبجكت نوعه SqlDataReader

Dim Cmd As New SqlClient.SqlCommand
Cmd.Connection = Conn
Cmd.CommandText= "Select Name, Age,Tel From Emp "
Dim dr As SqlClient.SqlDataReader
dr = Cmd.ExecuteReader

لاستخدام ال DataReader , مثلا اذا كان عندنا Button التالى , كل مرة نضغط عليه يعرض ال Record التالى من الداتا بيز

نستخدم الفانكشن Read التى ترجع بقيمة نوعها Boolean , تكون True طالما لم تصل الى اخر Record , وتكون False عند الانتهاء من قراءة كل ال Records

	Private Sub BtnNextRecord_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnNextRecord.Click
		Dim dr As SqlClient.SqlDataReader
		If (dr.Read = True) Then
			TxtName.text = dr(0)
			TxtAge.text = dr(1)
			TxtTel.text = dr(2)
		Else
			MsgBox("There Is No Data")
		End If
	End Sub

لاستخدام ال DataReader , لاضافة عناصر فى ComboBox

  Do While dr.Read = True
	ComboBoxNames.Items.Add(dr(0))
  Loop
CODE

او
CODE
  Do Until dr.Read = False
	ComboBoxNames.Items.Add(dr(0))
  Loop

اخر جزء فى ال Connected Mode , هو تنفيذ Stored Procedure :

نعرف Command كما سبق , وخاصية ال Connection كما هى , وخاصية ال CommandText تكون اسم ال Stored Procedure بدلا من جملة السيكوال , و نعطيه خاصية ثالثة هى CommandType وهى تساوى CommandType.StoredProcedure, فى حالة ال Stored Procedure.

ثم بعد ذلك نعرف البرامترز التى تأخذها ال Stored Procedure (القيم التى يدخلها المستخدم لل Stored Procedure كى تنفذ استعلامات معينة مثل القيم التى يريد ان يضيفها فى الجدول عن طريق جملة Insert ) لل Command , وذلك بان نعرف كل برامتر و نوعه وقيمته ونكرر هذه الخطوة على حسب عدد البرامترز التى تأخذها ال Stored Procedure .

  Dim Cmd As New SqlClient.SqlCommand
  Cmd.Connection = Conn
  Cmd.CommandText = "StoredProcedureName"
  Cmd.CommandType = CommandType.StoredProcedure
 Cmd.Parameters.Add("ParameterName1", ParameterType).Value = TextBox1.Text
Cmd.Parameters.Add("ParameterName2", ParameterType).Value = TextBox2.Text
Cmd.Parameters.Add("ParameterName3", ParameterType).Value = TextBox3.Text

ويتم تنفيذ ال Command باحدى الطرق الثلاث السابقة (NonQuery ,Scalar ,Reader ) , حسب نتيجة تنفيذ ال Stored Procedure , او يتم تنفيذها بال Disconnected الذى سيتم شرحه لاحقا.

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#4

الدرس الثالث: Disconnected Mode

نبدأ بتعريف Object جديد منDataSet

Dim ds As New DataSet

او DataTable

Dim dt As New DataTable

والفرق بينهم , ان ال DataSet نستطيع ان نضع فيها اكثر من جدول , لكن ال DataTable لا نستطيع ان نضع فيها غير جدول واحد فقط , والتعامل معهم متشابه جدا.

ثم نعرف Object جديد من DataAdapter

وهو الذى يقوم باحضار البيانات والجدوال من الداتا بيز ويضعها فى الداتا سيت , وايضا يقوم بالعملية العكسية وهى تحديث (حفظ) البيانات والجدوال الى الداتا بيز من الداتا سيت بعد ان تم اجراء التعديلات عليها.

وهى تأخذ 2 برامتر احدهما نوعه String عبارة عن جملة Select لتحديد البيانات التى نريد وضعها فى الداتا سيت لاجراء التعديلات عليها, والاخر نوعه SqlConnection

Dim da As New SqlClient.SqlDataAdapter("Select Statement", Conn)

او تاخذ برامتر واحد نوعه SqlCommand (وهو يحتوى جملة Select و Connection ) , اى Command كما سبق او حتى Command لتنفيذ Stored Procedure

Dim Cmd As New SqlClient.SqlCommand("Select Statement", Connection"
Dim da As New SqlClient.SqlDataAdapter(Cmd)

بعد ذلك نقوم بقراءة الداتا من الداتا بيز و وضعها فى الداتا سيت , نستخدم Fill وهى تأخذ 2 برامترز وهم اسم الداتاسيت التى سيتم وضع الداتا فيها , واسم الجدول فى الداتا سيت الذى سيتم وضع الداتا فيها

لملء الجدول فى الداتا سيت من الداتا بيز

da.Fill(ds, "TableName")

واذا كنا نتعامل مع DataTable , نحدد اسم ال DataTable فقط , لانه هو اساسا جدول واحد فقط , ويكون الكود كالتالى :

da.Fill(dt)

بعد ذلك نستطيع التعامل بكل حرية مع ال DataSet او ال DataTable , والتعديل فى بيانات الجدول كما نريد من اضافة وحذف وتعديل.

بعد الانتهاء من التعديلات , نقوم بحفظ التغيرات على الداتابيز كالتالى :

نقوم بعمل Object جديد من SqlCommandBuilder وهو يأخذ برامتر عبارة عن ال DataAdapter الذى قمنا بانشاءه , وهو يقوم ببناء جمل Select, Insert, Update, Delete التى تقوم بحفظ التغييرات على الداتابيز

ونستعمل Update التى تأخذ 2 برامتر عبارة عن اسم الداتا سيت التى بها الجدول واسم الجدول.

لحفظ التغييرات على الداتا بيز

Dim cb As New SqlClient.SqlCommandBuilder(da)
da.Update(ds, "TableName")

والان نأخذ بعض الامثلة العامة للتعامل مع الداتا سيت

لمعرفة عدد ال Rows الموجودة فى جدول معين

MsgBox(ds.Tables("Table1").Rows.Count)

لمعرفة قيمة Cell معينة فى الجدول :

يجب ان نحدد Index او اسم الجدول , ثم Index ال Row , ثم Index او اسم ال Column.

مثلا : لقراءة القيمة الموجودة فى الجدول Table1 , والعمود Name , وال Row الرابع ووضعها فى تكست بوكس , يكون الكود كالتالى :

textbox1.text = ds.Tables("TableName").Rows(3).Item("Name")

للتعديل فى قيمة Cell معينة فى الجدول :

يجب ان نحدد Index او اسم الجدول , ثم Index ال Row , ثم Index او اسم ال Column.

لتعديل الCell الموجودة فى الجدول Table1 , والعمود Name , وال Row الرابع , يكون الكود كالتالى :

ds.Tables("TableName").Rows(3).Item("Name")=NewValue

و لمزيد من الامثلة عن التعامل مع الجدول الموجود فى الداتا سيت :

لقراءة كل القيم الموجودة فى Column الاسماء واضافتها لل Items فى ComboBox

Dim I As Integer
For I = 0 To ds.Tables("Table1").Rows.Count - 1
 ComboBox1.Items.Add(ds.Tables("Table1").Rows(I).Item("Name"))
Next

لقراءة اول 10 قيم الموجودة فى Column الاسماء واضافتها لل Items فى ComboBox

Dim I As Integer
For I = 0 To 10
ComboBox1.Items.Add(ds.Tables("Table1").Rows(I).Item("Name"))
Next

لاضافة ريكورد جديد الى الجدول :

نقوم بتعريف DataRow , ونعرفه على انه Row جديد فى الجدول , ثم نضيفه الى الجدول , ونضع به الداتا فى كل Column .

Dim MyRow As DataRow
MyRow= ds.Tables("TableName").NewRow
ds.Tables("TableName").Rows.Add(MyRow)
MyRow("Age") = TxtAge.Text
MyRow("Name") = TxtName.Text
MyRow("Tel") = TxtTel.Text

للتعديل فى ريكورد موجود فى الجدول:

نقوم بتعريف DataRow ايضا , ولكنه هذه المرة يساوى Row معين من ال Rows الموجودة فى الجدول و نحدد ذلك عن طريق تحديد Index ال Row الذى نريد تعديله , ثم نضع به الداتا المطلوب تغييرها

مثلا اذا كنا نريد تعديل ال Row الحالى (ونعرف اندكس ال Row الحالى عن طريق ال Currency Manager الذى سيتم شرحه لاحقا

Dim MyRow As DataRow
MyRow= ds.Tables("TableName").Rows(Cm.Position)
MyRow("Age") = TxtAge.Text
MyRow("Name") = TxtName.Text
MyRow("Tel") = TxtTel.Text

حيث Cm هو ال Currency Manager , Cm.Position فانكشن نعرف منها اندكس ال Row الحالى.

لحذف ريكود من الجدول

ds.Tables("TableName").Rows(0).Delete()

حيث 0 هو اندكس ال Row الذى نريد حذفه

لحفظ التغييرات على الداتا بيز

Dim cb As New SqlClient.SqlCommandBuilder(da)
da.Update(ds, "TableName")

للتراجع عن التغييرات التى جرت على جدول معين

ds.Tables("TableName").RejectChanges()

لعمل Navigation فى الجدول , وربط الجدول بالادوات فى الفورم

نقوم بتعريف CurrencyManager , ونربط كل كونترول على الفورم بالفيلد من الداتابيز الذى يعرض فيه , عن طريق الخاصية DataBindings.add التى تأخذ 3 برامترز

البرامتر الاول : Binding Property وهى الخاصية التى سيتم ربطها بالداتابيز مثل Text بالنسبة للتكست بوكس , او SelectedItem بالنسبة لل ComboBox

البرامتر الثانى : DataSource وهو مصدر البيانات التى سيتم ربطها بال Controls , وهى هنا عبارة عن اسم الجدول فى الداتاسيت

البرامتر الثالث : FieldName وهو اسم الفيلد فى الجدول الذى سيتم الربط به

بعد ذلك نقوم بربط الفورم بال Currency Manager , عن طريق الخاصية BindingContext التى تأخذ برامتر واحد هو ال DataSource

Dim Cm As CurrencyManager
TxtName.DataBindings.Add("text", ds.Tables("TableName"), "FieldName")
TxtAge.DataBindings.Add("text", ds.Tables("TableName"), "FieldName")
TxtTel.DataBindings.Add("text", ds.Tables("TableName"), "FieldName")
Cm =Me.BindingContext(ds.Tables("TableName"))

حيث Me هنا تعود على الفورم التى بها الادوات التى يتم ربطها بالجدول.

لمعرفة اندكس الريكورد او ال Row الحالى (الذى يتم عرضه فى الفورم حاليا)

Dim CurrentRow As Integer
CurrentRow = Cm.Position
OR
TxtPosition.text = Cm.Position

للتنقل بين ال Records فى الجدول

'First Row
Cm.Position = 0
'Last Row
Cm.Position = Cm.Count - 1
'Previous Row
Cm.Position = Cm.Position - 1
'Next Row
Cm.Position = Cm.Position + 1

بعد ذلك نجد ان ال Controls على الفورم مرتبطة بال Currency Manager , بمعنى اننا اذا غيرنا ال Position فى ال Currency Manager باى من الطرق السابقة , نجد ان البيانات المعروضة فى ال Controls على الفورم تغيرت تبعا لتغير ال Position فى ال Currency Manager .

التعامل مع ال DataGrid :

لعرض جدول من الداتاسيت فى DataGrid

Grid1.DataSource= ds
Grid1.dataMember="Table1"

حيث ds اسم الداتا سيت التى يوجد بها الجدول , Table1 اسم الجدول الذى نريد عرضه

بعد ذلك نستطيع التعديل فى البيانات فى الجريد كما نريد , من اضافة صفوف او حذفها او تعديل لاى بيانات , بعد ذلك لحفظ التغيرات التى اجريناها على الجدول

Dim cb As New SqlClient.SqlCommandBuilder(da)
da.Update(ds, "TableName")

التعامل مع الجريد بالكود شبيه جدا بالتعامل مع اى جدول فى الداتا سيت

امثلة على كيفية التعامل مع الداتا جريد

مثلا : لمعرفة قيمة Cell معينة فى الجريد

TextBox1.Text = DataGridView1.Rows(RowIndex).Cells(ColumnIndex).Value

حيث RowIndex و ColumnIndexهما اندكس ال Row و ال Column الموجودة بهم ال Cell المقصودة

لتغيير قيمة Cell معينة فى الجريد

DataGridView1.Rows(RowIndex).Cells(ColumnIndex).Value= NewValue

حيث RowIndex و ColumnIndexهما اندكس ال Row و ال Column الموجودة بهم ال Cell المقصودة

اذا كنا نريد تغيير قيمة ال Cell الحالية التى نكتب فيها الان , يمكن استبدال Rows(RowIndex).Cells(ColumnIndex) بــــ CurrentCell

او يمكن استبدال Rows(RowIndex) بـــ CurrentRow.Cells(ColumnIndex)

ليصبح الكود كالتالى :

DataGridView1.CurrentCell.Value= NewValue
OR
DataGridView1.CurrentRow.Cells(ColumnIndex).Value= NewValue

و الجريد لها الكثير من ال Events , من اشهرهم واكثرهم استخداما CellValueChanged , والذى يقع عند حدوث اى تغيير فى قيمة اى Cell فى الجريد.

Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

'الكود الذى نريد تنفيذه عند حدوث هذا الحدث هنا

End Sub

نجد فى هذا الحدث ان البرامتر e يمدنا بخاصيتين مهمتين جدا , وهما :

e.RowIndex , e.ColumnIndex وهما اندكس الصف والعمود التى تقع بهم الخلية التى تم تغيير قيمتها.

مثلا : لمعرفة اندكس ال Row , Column الذى تقع بهم ال Cell التى يتم تعديلها , واظهرهم فى MessageBox , نكتب فى الحدث السابق :

MsgBox(e.ColumnIndex)
MsgBox(e.RowIndex)

مثلا : اذا كان يوجد فى الجريد Column اسمه Age وطبعا لا نريد للمستخدم ان يدخل قيمة صفر او قيمة سالبة فى هذا ال Column

نكتب فى الحدث السابق (الذى يقع عند حدوث تغيير فى قيمة اى Cell

Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
If e.ColumnIndex = 3 Then
  If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value <= 0		Then
	MsgBox("Age Value Can not be Zero Or Negative Value")
  End If
End If
End Sub

حيث 3 هو اندكس هذا ال Column.

نلاحظ اننا وضعنا شرط فى الكود السابق , ان هذا الكود ينفذ اذا كانت ال Cell التى يتم تغيير قيمتها واقعة فى ال Column الخاص بالعمر , ثم وضعنا شرط اخر انه اذا كانت القيمة التى تم ادخاله صفر او سالبة , يتم اظهار رسالة للمستخدم.

مثال اخر : بفرض ان عندنا جريد بها ال Columns الاتية : عدد القطع المباعة , وسعر القطعة الواحدة , وال Index لهم بالترتيب 1 و 2

نريد اضافة Column جديد (عمود جديد للعرض عل ىالمستخدم فقط , ولكنه لا وجود له فى الجدول او قاعدة البيانات) الى الجريد اسمه السعر الكلى والاندكس له = 3

و نريد جعل قيمة ال Column الجديد الخاص بالسعر الكلى = عدد القطع المباعة * سعر القطعة الواحدة , وذلك لكل ال Rows التى فى الجريد.

نكتب الكود التالى فى الحدث الذى نريد تنفيذ هذا الكود به (Form Load مثلا)

'لاضافة عمود جديد
DataGridView1.Columns.Add("TotalPrice", "TotalPrice")
'لوضع البيانات فى العمود الجديد
Dim I As Integer
For I = 0 To DataGridView1.Rows.Count - 1
 DataGridView1.Rows(I).Cells(3).Value = (DataGridView1.Rows(I).Cells(1).Value) * (DataGridView1.Rows(I).Cells(2).Value)
Next

حيث TotalPrice الاولى هى اسم ال Column الذى نتعامل معه فى الكود(Column Name) , و الثانية هى عنوان ال Column الذى سيعرض فى الجريد(Header Text).

و ال DataGrid بها خصائص اخرى كثيرة للتغيير فى لون وستايل وفونت وطريقة عرض Row معين او Cell معينة.

بذلك يكون انتهى الشرح , وارجو ان تكونوا قد استفدتم منه ولو بقدر قليل :) ,,,,,

تم تعديل هذه المشاركة بواسطة hanysaad في 29 يونيو 2007 في 18:01

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#5

شرح اكثر من رائع

كما عوتنا اخى hanysaad

تسلم ايدك و جزاك الله كل خير

Mimo

040.gif

#6

شرح رائع

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

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

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#7

ما شاء الله شرح أكثر من رائع

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

#8

رائع

اتمنى ان تضعها في ملف PDF ليسهل الاحتفاظ بها من الضياع في غياهب المنتدى

تحياتي

#9

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

Success Is A Journey Not A Destination

#10

السلام عليكم

شكرا لكم جميعا على المتابعة والردود , وجزاكم الله كل خير

واتمنى انكم تكونوا استفدتوا من الدروس :)

بالنسبة لطلب الاخ النبهانى :

ان شاء الله ساجمع الدروس فى ملف PDF , وارفقها قريبا :rolleyes: ,,,

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#11
dr_abdalrhman كتب:
اولا : dim ---فى basic ----تعنى حجز مصفوفة فهى تعنى فى الكود الذى انت واضعة

كون object ارجو اكون فاهم صح.

ثانيا: لاستخدام ال DataReader , لاضافة عناصر فى ComboBox

ما ارى فى الكود عداد يعنى لماذا الاضافة دائما فى dr(0)

طيب ومعنى كدة ان اخر عنصر بيضاف هو اول عنصر فى ال---combox صح ام خطأ.

أولا - Dim تستخدم للإعلان عن متغير بشكل عام ولاتعني حجز مصفوفة إلا إن استخدمت للتصريح عن مصفوفة - راجع أساسيات اللغة بخصوص كيفية التصريح عن المتغيرات

ثانيا - استخدام dr(0) عند عملية الإضافة يعني أنه يضيف قيمة الحقل الذي ترتيبه 0 في الـ DataReader لـ ComboBox كما في الكود

Do While dr.Read = True
	ComboBoxNames.Items.Add(dr(0))
Loop

وليس معنى ذلك أن آخر عنصر تمت إضافته هو أول عنصر في الـ ComboBox

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

Do While dr.Read = True
		ComboBoxNames.Items.Add(dr("Name"))
Loop

لاحظ أنني استبدلت هنا ترتيب الحقل 0 باسمه name

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 1 يوليو 2007 في 06:18

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

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#12

السلام عليكم

شكرا جزيلا للاخ محمد على التوضيح والشرح,,,

الاخ عبد الرحمن

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

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

وطبعا تقدر تسأل فى اى حاجة فى اى وقت , ده حقك انك تسأل وتفهم , وده الهدف من المنتدى :) ,,,,

تم تعديل هذه المشاركة بواسطة hanysaad في 1 يوليو 2007 في 09:19

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#13
النبهاني كتب:
رائع

اتمنى ان تضعها في ملف PDF ليسهل الاحتفاظ بها من الضياع في غياهب المنتدى

تحياتي

اضم صوتى

و ننتظر التنفيذ لانه فعلا درس لا يتفوت و يجب الاحتفاظ به

Mimo

040.gif

#14

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

و لكن أنا عندي سؤال في كود تحميل نتائج البحث في الـ ComboBox

يتم تحميل النتائج ناقصة بعنى :

الداتابيز فيها 6 عناصر عند تحميل العناصر إلى الـ ComboBox يكون عددهم 5 فقط

و أول اسم يتم تجاهله و لا أعلم لماذا ؟ أنا أرفقت المثال لكي تتطلع عليه و جزاك الله خيراً .

myproblem.rar

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#15
COMFORT كتب:

الداتابيز فيها 6 عناصر عند تحميل العناصر إلى الـ ComboBox يكون عددهم 5 فقط

و أول اسم يتم تجاهله و لا أعلم لماذا ؟ أنا أرفقت المثال لكي تتطلع عليه و جزاك الله خيراً .

تحية

مني اليك عزيزي

الحل بسيط عزيزي أنت استخدمت الشرط التالي لكي تتأكد من وجود عناصر في الجدول

If DTReader.Read = True Then

وهذا يجعل الريدر تعمل وتقرأ أول صف وبالتالي تنتقل للصف التالي وعند قراءة البيانات طبعا تبدأ من الصف الثاني فتلاحظ فقد العنصر الأول وللتغلب على تلك المشكلة إما الاستغناء عن هذا الشرط أو استبدال reader.read بالأمر التالي للتأكد من وجود عناصر في الجدول..

if DTReader.HasRows = true

تحياتي

كن بخير

تم تعديل هذه المشاركة بواسطة Code1ok في 13 يوليو 2007 في 16:07

#16

ألف شكر أخي Code1ok

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

مواضيع و دروس
الكتابة بعدة ألوان داخل الــ TetxBoxمكتبة الأكوادتحميل الــ Visual Basic Express 2005
تحميل فيجوال بسيك 6أكواد × أكواددروس في الخوارزميات
لتحميل عدة إصدارات من كريستال ريبورتتحميل برنامج Activ Skin 4.3جمل الــ Sql من الألف إلى الياء
معظم المواقع المختصة بالفيجوال بيسيكموقع كويس للأيقوناتمرجع شامل لأدوات ActivX
كيفية نطق الحرف المكتوب شرح عن كيفية إقامة علاقة مع Data Reprot باستخدام الــ DataEnvironment علاقة مع الـ Datareport بدون استخدام DataEnvironment (( شرح ))
كتاب Migrating From DAO to ADOإضافة لـ VB6 بريمج IndenterVB, إضافة لبيئة تطوير فيجوال بيسك 6حوار بينى و بين عضو حول ال winsock , اتمنى ان يعجبكم
Smart Indenter 3.5 لتنسيق الأكواد, هديه لكل الأعضاء السلسلة الدهبية في المواضيع العلمية ، إستغلال الـ Balloons في الـ Windows XP مصفوفات الأدوات Control Arrays افكار وتلميحات ! , لمن افتقدها من أيام الـ VB6.0
جعل خلفية الـ Mid Form تظهر بالكامل خواص الاداة Winsock لربط الاجهزة عن طريق الانترنتكيف يتم عمل تقارير بإستخدام HTML

7.gif
#17

بسم الله الرحمن الرحيم

ما شاء الله دروس جميلة

نرجوا شرح انشاء التقارير بالتفاصيل و كيفية اجراء العمليات الحسابية عليها و ايضا انشاء التقارير المبنية على جمل استعلام

و شكرا

أحمد خميس راشد

جمهورية مصر العربية

Bibo_spider@hotmail.com

#18

عزيزي COMFORT

بالخدمة

كن بخير

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

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