• 0
yaseralshikh

درس في ADO.NET 2005

سؤال

أصدقاؤنا المبرمجون أقدم لكم أخِر ما توصلت له من التعامل مع الجداول المترابطة في ado.net 2005 على شكل درس متواضع ، ولكن ينقصني الأهم وهو الإضافة والحذف والحفظ والتعديل وهوا ما أتمنى أن يكمله خبرائنا في المنتدى ..

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

فكرة البرنامج تقوم على أساس حفظ الاسئله والأجوبة وإمكانية البحث عنها بكل سهولة ويسر . نحتاج في البداية إلى صنع ملف قاعدة بيانات بواسطة برنامج Microsoft Office Access 2003 وليحمل اسم InformationBank.mdb حيث نصنع جدولين :

1- جدول اسمه TheBank يحتوي على الحقلين التاليين ( ID "AotoNumber" + Number "Number" )

2- جدول اسمه Data يحتوي على الحقول التالية ( ID " Number " + Ask "Text" + Answer "Text" ) .

كي نكون فكره عن شكل البرنامج في وضع التصميم فل نشاهد هذه الصورة :

صورة واجهة البرنامج

نحتاج إلى:

1-Button 10 على النحو التالي ( btnMoveFirst للانتقال للسجل الأول + btnMoveNext للانتقال للسجل التالي + btnMovePrevious للانتقال للسجل السابق + btnMoveLast للانتقال للسجل الأخير + btnFind للبحث عن السجلات + btnAdd لإضافة سجل جديد + btnSave لحفظ سجل جديد أو تحديث بيانات مخزنة + btnDelete لحذف سجل + btnExit للخروج من البرنامج + btnCancel لإلغاء عملية الإضافة أو التعديل على البيانات )

2- TextBox 6 على النحو التالي ( txtFind لكتابة جملة البحث + txtid + txtnumber + txtask + txtanswer )

3- ComboBox 1 لتحديد طريقة فرز البيانات إما برقم السؤال أو بالسؤال أو الجواب.

4- ToolStripStatusLabel 1 لإيضاح الحالة التي عليها البرنامج .

5 – Label 5 على النحو التالي (Id للتعريف عن حقل المفتاح الأساسي+ number للتعريف عن رقم السؤال + Ask للتعريف عن السؤال+ Answer للتعريف عن الإجابة+ lblPosition للتعريف عن رقم السجل الحالي من العدد الكلي للسجلات (

6- DataGridView 1 لعرض البيانات في جدول .

الكود الذي سوف نحتاج إليه :

ننتقل إلى شاشة عرض الكود

في البداية نحتاج إلى استدعاء فضاء الأسماء الخاص بقواعد بيانات Microsoft Office Access وذلك بكتابة العبارة التالية في بداية شاشة الكود :

Imports System.Data
Imports System.Data.OleDb

بعد ذلك نحتاج إلى التصريح عن بعض المتغيرات الضرورية " سوف نشرحها في وقتها إن أمكن " وذلك تحت العبارة Public Class Form1 :

	Friend strConn As String  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\InformationBank.mdb;User Id=admin;Password=;"
Friend strSQL As String = "SELECT TheBank.id, TheBank.Number, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID ORDER BY TheBank.Number;"
Friend cn As New OleDbConnection(strConn)
Friend daTheBankAndData As New OleDbDataAdapter(strSQL, cn)
Friend MyDS As DataSet
Friend MyDataView As DataView
Friend MyCurrencyManager As CurrencyManager
Friend intOption As Byte = 0
Dim strSearch As String

بعد ذلك نقوم بكتابة الكود التالي في حدث Form1_Load :

		Me.Text = Application.ProductName & "/" & Application.ProductVersion
cn.Open()
' Fill the DataSet and bind the fields...
Call FillDataSetAndView()
Call BindFields()
' Show the current record position...
Call ShowPosition()
' Add items to the combo box...
cboField.Items.Add("Number")
cboField.Items.Add("Ask")
cboField.Items.Add("Answer")
' Make the first item selected...
cboField.SelectedIndex = 0

يلي ذلك نقوم بكتابة كود الإجراءات الفرعية التي ذكرناها في حدث Form1_Load وهي Call FillDataSetAndView و Call BindFields و Call ShowPosition :

	Private Sub FillDataSetAndView()
Try
' Initialize a new instance of the DataSet object...
MyDS = New DataSet()
' Fill the DataSet object with TheBankAndData...
daTheBankAndData.Fill(MyDS, "TheBankAndData")
' Set the DataView object to the DataSet object...
MyDataView = New DataView(MyDS.Tables("TheBankAndData"))
' Set our CurrencyManager object to the DataView object...
MyCurrencyManager = CType(Me.BindingContext(MyDataView), CurrencyManager)
cn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, " Fill the DataSet and bind the fields... ", MessageBoxButtons.OK, _
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _
MessageBoxOptions.RtlReading)
End Try
End Sub
Sub BindFields()
' Clear any previous bindings...
txtid.DataBindings.Clear()
txtnumber.DataBindings.Clear()
txtask.DataBindings.Clear()
txtanswer.DataBindings.Clear()
' Add new bindings to the DataView object...
txtid.DataBindings.Add(New Binding("Text", MyDataView, "id"))
txtnumber.DataBindings.Add(New Binding("text", MyDataView, "number"))
txtask.DataBindings.Add(New Binding("text", MyDataView, "ask"))
txtanswer.DataBindings.Add(New Binding("text", MyDataView, "answer"))
' Add new bindings to the DataGridView object...
DataGridView1.AutoGenerateColumns = True
DataGridView1.DataSource = MyDS
DataGridView1.DataMember = "TheBankAndData"
' Display a ready status...
ToolStripStatusLabel1.Text = "Ready"
End Sub
Private Sub ShowPosition()
' Display the current position and the number of records
lblPosition.Text = MyCurrencyManager.Position + 1 & _
" of " & MyCurrencyManager.Count()
End Sub

وللابحار بين السجلات والتنقل بينها نقوم بالأتي :

1 - للانتقال إلى أول سجل نكتب الكود التالي في حدث الزر btnMoveFirst_Click :

		' Set the record position to the first record...
MyCurrencyManager.Position = 0
' Show the current record position...
ShowPosition()

2 - للانتقال إلى السجل التالي نكتب الكود التالي في حدث الزر btnMoveNext_Click :

		' Move to the next record...
MyCurrencyManager.Position += 1
' Show the current record position...
ShowPosition()

3 - للانتقال إلى السجل السابق نكتب الكود التالي في حدث الزر btnMovePrevious_Click :

		' Move to the previous record...
MyCurrencyManager.Position -= 1
' Show the current record position...
ShowPosition()

4 - للانتقال إلى السجل الأخير نكتب الكود التالي في حدث الزر btnMoveLast_Click :

		' Set the record position to the last record...
MyCurrencyManager.Position = MyCurrencyManager.Count - 1
' Show the current record position...
ShowPosition()

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

		' Determine the appropriate item selected and set the
' Sort property of the DataView object...
Select Case cboField.SelectedIndex
Case 0 'Number Name
MyDataView.Sort = "number"
ToolStripStatusLabel1.Text = "Records Sorted By Number"
Case 1 'ask
MyDataView.Sort = "ask"
ToolStripStatusLabel1.Text = "Records Sorted By Ask"
Case 2 'answer
MyDataView.Sort = "Answer"
ToolStripStatusLabel1.Text = "Records Sorted By Answer"
End Select
' Call the click event for the MoveFirst button...
btnMoveFirst_Click(Nothing, Nothing)
' Display a message that the records have been sorted...

وللبحث عن سجل معين نكتب الكود التالي في حدث btnFind_Click :

		If txtFind.Text = "" Then
ToolStripStatusLabel1.Text = "Write Any Text For Search"
cboField_SelectedIndexChanged(Nothing, Nothing)
Exit Sub
End If
' Declare local variables...
Dim intPosition As Integer
Call Search()
'MyDataView.RowFilter = "ask like('" + Trim(txtFind.Text) + "%')"
intPosition = MyDataView.Find(strSearch)
strSearch = Nothing
If intPosition = -1 Then
' Display a message that the record was not found...
ToolStripStatusLabel1.Text = "Record Not Found"
Else
' Otherwise display a message that the record was
' found and reposition the CurrencyManager to that
' record...
ToolStripStatusLabel1.Text = "Record Found"
MyCurrencyManager.Position = intPosition
End If
' Show the current record position...
ShowPosition()

ثم نكتب كود الإجراء الفرعي الذي ذكرناه في حدث btnFind_Click وهو Search :

		Dim sql2 As String
Dim da2 As New OleDb.OleDbDataAdapter
Dim ds2 As New DataSet
Select Case cboField.SelectedIndex
Case 0 'Number
MyDataView.Sort = "Number"
sql2 = "SELECT TheBank.id, TheBank.Number, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID where TheBank.Number like ('" + Trim(txtFind.Text) + "%');"
cn.Open()
da2.SelectCommand = New OleDbCommand(sql2, cn)
ds2 = New DataSet("TheBankAndData")
If cn.State = ConnectionState.Open Then
da2.MissingSchemaAction = MissingSchemaAction.AddWithKey
da2.Fill(ds2, "TheBankAndData")
End If
If ds2.Tables("TheBankAndData").Rows.Count <> 0 Then strSearch = ds2.Tables("TheBankAndData").Rows(0)("Number")
Case 1 'Ask
MyDataView.Sort = "ask"
sql2 = "SELECT TheBank.id, TheBank.Number, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID where data.ask like ('" + Trim(txtFind.Text) + "%');"
cn.Open()
da2.SelectCommand = New OleDbCommand(sql2, cn)
ds2 = New DataSet("TheBankAndData")
If cn.State = ConnectionState.Open Then
da2.MissingSchemaAction = MissingSchemaAction.AddWithKey
da2.Fill(ds2, "TheBankAndData")
End If
If ds2.Tables("TheBankAndData").Rows.Count <> 0 Then strSearch = ds2.Tables("TheBankAndData").Rows(0)("ask")
Case 2 'Answer
MyDataView.Sort = "Answer"
sql2 = "SELECT TheBank.id, TheBank.Number, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID where data.answer like ('" + Trim(txtFind.Text) + "%');"
cn.Open()
da2.SelectCommand = New OleDbCommand(sql2, cn)
ds2 = New DataSet("TheBankAndData")
If cn.State = ConnectionState.Open Then
da2.MissingSchemaAction = MissingSchemaAction.AddWithKey
da2.Fill(ds2, "TheBankAndData")
End If
If ds2.Tables("TheBankAndData").Rows.Count <> 0 Then strSearch = ds2.Tables("TheBankAndData").Rows(0)("answer")
End Select
cn.Close()
sql2 = Nothing
da2.Dispose()
ds2.Dispose()

ولتنفيذ أمر البحث بمجرد ألكتابه على لوحة المفاتيح نقوم بكتابة الكود التالي في الحدث txtFind_TextChanged :

btnFind_Click(Nothing, Nothing)

وللخروج من البرنامج نكتب الكود التالي في حدث btnExit_Click :

		Dim response As MsgBoxResult
ToolStripStatusLabel1.Text = "Exit program?"
response = MsgBox("Exit program?", vbYesNo)
If response = vbYes Then
End
Else
ToolStripStatusLabel1.Text = "Ready"
End If

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

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

;)

post-46002-1154360355_thumb.jpg

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

202 إجابة على هذا السؤال .

  • 0

شكرا لك على الدرس الرائع ،

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

ونتمنى من المشرفين والخبراء اكمال الجزء المتبقي لأنه مهم ،

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا على الرد ..

ملاحظة : يجب أن تكون قاعدة البيانات InformationBank.mdb في مجلد المشروع Bin يمكنك وضع القاعدة في اي مكان تريد ولكن الآن نحن نتكلم حول خاصية Application.StartupPath والتي تعرف مسار هذا المجلد من ضمن المشروع .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بداية رايعة والله يكتبلك التوفيق

ولكن تسهيلاً على أي من الأخوة الذين سيكملون المشروع أرفق ملف المشروع الذي قمت بعمله أنت وذلك لتسهل المهمة على الآخرين

وحفظك الله ورعاك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحمد لله وحده والصلاة والسلام على من لانبي بعد ..

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

سوف اقدم لكم الجديد والمفيد ان شاء الله ، وقبل ذلك لدي عتب شديد ... :angry: .. اين المشاركه والمتابعه والمناقشة والحوار ... إلخ ، نربد بعض الحماس ( في الحقيقه نحن هنا وفي حياتنا الخاصه والعامة نفتقد الحماس والتشجيع ) ، هل يعقل ان هذا الموضوع الحساس والمهم لا ينال اهتمام المبرمجين ام ان الأمر لا يستحق كل هذا العناء ، أخبرونا كي لا نتعب انفسنا .. -_- ..

تكمله الدرس ..

هناك بعض الاضافات على الكود السابق مثلا اسفل العبارة Public Class Form1 سوف نضيف هذا السطر ..

	Dim myPosition As Byte

وفي الإجراء الفرعي FillDataSetAndView الذي ذكرناه سابقاً سوف نضيف السطر التالي تحت السطر

MyDS = New DataSet

MyDS.Clear()

................................

ولإضافة سجل جديد في قاعدة البيانات نكتب الكود التالي في حدث الزر btnAdd_Click :

		' Clear the teh Text Box fields...
txtid.Text = ""
txtnumber.Text = ""
txtask.Text = ""
txtanswer.Text = ""
txtnumber.Focus()
intOption = 1 ' To Select Case Save AddNew
myPosition = Me.MyCurrencyManager.Position
ToolStripStatusLabel1.Text = "Ready To Add New Record"

ولحفظ التعديل على بيانات السجل الحالي أو حفظ بيانات السجل الجديد ، نكتب الكود التالي في حدث الزر btnSave_Click :

		Select Case intOption
Case 0
' Save Update
Try
' Declare local variables and objects...
Dim intPosition As Integer = MyCurrencyManager.Position ' Save the current record position...
Dim UpdateCommand As OleDbCommand = New OleDbCommand
UpdateCommand.Connection = cn
' Update Record From Thebank Table
UpdateCommand.CommandText = ("UPDATE thebank set asknumber=? WHERE Id =?")
UpdateCommand.CommandType = CommandType.Text
UpdateCommand.Parameters.AddWithValue("?", CInt(txtnumber.Text))
UpdateCommand.Parameters.AddWithValue("?", BindingContext(MyDataView).Current("id"))
cn.Open()
' Execute the SqlCommand object to update the data...
UpdateCommand.ExecuteNonQuery()
' Update Record From Data Table
UpdateCommand.CommandText = ("UPDATE Data set ask=?,answer=? WHERE Id =?")
UpdateCommand.CommandType = CommandType.Text
UpdateCommand.Parameters.Clear()
UpdateCommand.Parameters.AddWithValue("?", txtask.Text)
UpdateCommand.Parameters.AddWithValue("?", txtanswer.Text)
UpdateCommand.Parameters.AddWithValue("?", BindingContext(MyDataView).Current("id"))
' Execute the SqlCommand object to update the data...
UpdateCommand.ExecuteNonQuery()
cn.Close()
' Fill the DataSet and bind the fields...
FillDataSetAndView()
BindFields()
' Set the record position to the one that you saved...
MyCurrencyManager.Position = intPosition
' Show the current record position...
ShowPosition()
' Display a message that the record was updated...
ToolStripStatusLabel1.Text = "Record Updated"
'Dispose Declare local variables and objects
UpdateCommand.Dispose()
UpdateCommand = Nothing
intPosition = Nothing
Catch ex As OleDbException
MessageBox.Show(ex.Message, " Save Update ", MessageBoxButtons.OK, _
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _
MessageBoxOptions.RtlReading)
End Try
ToolStripStatusLabel1.Text = "Record Updated"
Case 1
' Save AddNew
Try
Dim InsertCommand As OleDbCommand = New OleDbCommand()
' Create a new SqlCommand object...
Dim maxIdCommand As OleDbCommand = New OleDbCommand("SELECT MAX(id) AS MaxID FROM thebank ", cn)
' Open the connection, execute the command
cn.Open()
Dim maxId As Object = maxIdCommand.ExecuteScalar() + 1
' Set the SqlCommand object properties...
InsertCommand.Connection = cn
' AddNew Record From Thebank Table
InsertCommand.CommandText = "INSERT INTO thebank(Asknumber) VALUES(?);"
'Add parameters for the placeholders in the SQL in the
'CommandText property...
'Parameter for the Asknumber column...
InsertCommand.Parameters.AddWithValue("?", txtnumber.Text)
' Execute the SqlCommand object to insert the new data...
InsertCommand.ExecuteNonQuery()
' AddNew Record From Thebank Table
InsertCommand.CommandText = "INSERT INTO Data(id,Ask,Answer) VALUES(?,?,?);"
'Add parameters for the placeholders in the SQL in the
'CommandText property...
'Parameter for the id column...
InsertCommand.Parameters.Clear()
InsertCommand.Parameters.AddWithValue("?", maxId)
'Parameter for the ask column...
InsertCommand.Parameters.AddWithValue("?", txtask.Text)
'Parameter for the answer column
InsertCommand.Parameters.AddWithValue("?", txtanswer.Text)
' Execute the SqlCommand object to insert the new data...
InsertCommand.ExecuteNonQuery()
' Close the connection...
cn.Close()
' Fill the dataset and bind the fields...
FillDataSetAndView()
BindFields()
' Set the record position to the one that you saved...
MyCurrencyManager.Position = MyCurrencyManager.Count - 1
' Show the current record position...
ShowPosition()
' Display a message that the record was added...
ToolStripStatusLabel1.Text = "Record Added"
'Dispose Declare local variables and objects
maxIdCommand.Dispose()
InsertCommand.Dispose()
InsertCommand = Nothing
maxIdCommand = Nothing
Catch ex As OleDbException
MessageBox.Show(ex.Message, " Save AddNew ", MessageBoxButtons.OK, _
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _
MessageBoxOptions.RtlReading)
End Try
txtid.Enabled = True
intOption = 0
End Select

وعند الرغبه في حذف السجل الحالي نكتب الكود التالي في حدث الزر btnDelete_Click:

		Dim response As MsgBoxResult
ToolStripStatusLabel1.Text = "Ready To Delete This Record"
response = MsgBox("Are You Sure ! You Want Delete This Record ?", vbYesNo)
If response = vbYes Then
Try
' Declare local variables and objects...
Dim intPosition As Integer
Dim DeleteCommand As OleDbCommand = New OleDbCommand()
' Save the current record position - 1 for the one to be
' deleted...
intPosition = Me.BindingContext(MyDataView).Position - 1
' If the position is less than 0 set it to 0...
If intPosition < 0 Then
intPosition = 0
End If
' Set the Command object properties...
DeleteCommand.Connection = cn
' Delete Record From Data Table
DeleteCommand.CommandText = "DELETE FROM thebank WHERE id = ?;"
'"DELETE FROM Data WHERE id = ?;"
' Parameter for the title_id field...
DeleteCommand.Parameters.AddWithValue _
("?", BindingContext(MyDataView).Current("id"))
' Open the database connection...
cn.Open()
' Execute the SqlCommand object to update the data...
DeleteCommand.ExecuteNonQuery()
' Delete Record From Data Table
DeleteCommand.CommandText = "DELETE FROM Data WHERE id = ?;"
' Parameter for the title_id field...
DeleteCommand.Parameters.AddWithValue _
("?", BindingContext(MyDataView).Current("id"))
' Execute the SqlCommand object to update the data...
DeleteCommand.ExecuteNonQuery()
' Close the connection...
cn.Close()
' Fill the DataSet and bind the fields...
FillDataSetAndView()
BindFields()
' Set the record position to the one that you saved...
Me.BindingContext(MyDataView).Position = intPosition
' Show the current record position...
ShowPosition()
' Display a message that the record was deleted...
ToolStripStatusLabel1.Text = "Record Deleted"
'Dispose Declare local variables and objects
DeleteCommand.Dispose()
DeleteCommand = Nothing
intPosition = Nothing
Catch ex As OleDbException
MessageBox.Show(ex.Message, " Delete Record ", MessageBoxButtons.OK, _
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _
MessageBoxOptions.RtlReading)
End Try
Else
ToolStripStatusLabel1.Text = "Delete This Record Is Canceled"
End If

وعند الرغبه في العدول عن اضافة سجل جديد بعد النقر على الزر btnAdd_Click نكتب الكود التالي في حدث الزر btnCancel_Click :

		' Fill the DataSet and bind the fields...
FillDataSetAndView()
BindFields()
' Set the record position to the one that you saved...
Me.BindingContext(MyDataView).Position = MyPosition
' Show the current record position...
ShowPosition()
' Display a message that the record was Command Cancel...
ToolStripStatusLabel1.Text = "Command AddNew Cancel"

وهذا والحمد لله رب العالمين ما ذكره الذاكرون وما غفل عنه الغافلون ... ;)

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

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

;)

لقد حاولت ارفاق المشروع ولكن واجهتني هذه المشكله "مجموع المساحة المطلوبة لرفع المرفقات تجاوزت الحد المسموحة به, الرجاء تقليل حجم أو عدد المرفقات" ارجو من الاخوان في الإدارة تقديم المساعده في حل هذه المشكله .

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكوووووووووووووووور اخوي ويعطيك ربي الف عافية

اتمنى ان لاتنقطع عنا ابداعاتك

لكن اذا امكن بريدك لاضيفك على الماسنجر

لترسل لي المشروووووع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي الحبيب smsm_9002 انا من يقول لك مشكور .. ;) .. فأنا احس بالوحده في هذه المشاركه . لكني مصمم على ان اكمل الدرس بكل التفاصيل التي يحتاجها المبرمج حتى يصبح مرجع لي وللمبتدئين مثلي .. *-) ..

بريدي : yaser1395@hotmail.com

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

في اعتقادي الكود المذور في الدرس يعمل على 2003 بدون مشاكل ، جرب ولن تندم . واي استفسا في الكود انا ان شاء الله جاهز .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جربت الكود وبيطلعلي خطأ بكلمة imports

بالكود التالي

imports system.data

imports system.data.oledb

بس حابة أحكي شغلة ..هل انا مابكتب هالعبارة هادي لما أجي أربط هل بيكفي

اني أعمل بيمين الماوي على ال project ومن proprties أختار

imports واكتب system.data.ole

إذا بكفي ليش أنا بلاحظ انو الأغلبية بيكتبوها ككود ؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انا اعمل على vb.net 2005 Pro وانصح الجميع اختصار الطريق والانتقال مباشرة إلى هذا الإصدار لما فيه من التقنية العالية والمتطوره ...

اما عبارة imports system.data.ole تستخدم لإستدعاء طبقة فضاء الأسماء المختصه بالتعامل مع قواعد البيانات في برنامج Access ويمكن استدعائها من خلال الكود أو من خلال Add References والله اعلم ..

اني أعمل بيمين الماوس على ال project ومن proprties أختار

imports واكتب system.data.ole

جربي ذلك ، انا لا اعلم كيف يتم ذلك في 2003 اذا نفع وإلا بحثنا معاك عن حل ..

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور اخ yaseralshikh كثير كثير

والله ماقصرت

بس تطيق بلا امر عليك تحطلنا البرنامح الذي صمتته على شكل ملف مرفق ؟؟

او رفعه على اي موقع رفع ملفات

تحياتي لك

تم تعديل بواسطه زيد الرافدين
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لقد تمكنت من ارفاق الملف في احد المواقع المختصه بالرفع ..

هذا هو الرابط "غير مباشر"

ادعو اخواني لمشروع جديد وهو " الإستغفار " من ارد النجاح والتوفيق فعليه بالاستغفار .

الحمد لله وحده واتوب إليه واستغفره واصلي على من لا نبي بعه نبينا محمد وعلى آله وصحبه اجمعين ..

قريبا سوف اكمل شرح عمل التقرير ..

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ايه الجمال ده يا بشمهندس ياسر انت حقيقي مهندس رائع فيييييييييييييينك من زمان كان نفسي في واحد زيك يحل مشكل الدوت نت ديه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور أخي...

بس لماذا لم تستخدم BindingSource و BindingNavigator الذي سيهل عليك الكثير من عمليات الاضافة والحذف والفلترة والربط بين الجداول...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

أخي طارق سمان كما قلت لقد كتبت ما تعلمته ولو علمت طريق مختصر لكتبتها ولكني بحثت كثيرا وقرأت كثيراً حتى في مشاركات #C ولم أصل لنتيجه مرضيه ومضمونه ، كما أني عملت على DataRelation ولكن اصبت بالإحباط عندما اردت اظافة بيانات جديده وحفظها والبحث عن معلومات وتحديثها أ وحدفها ..

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

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

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

كلنا تصادفنا مطبات وطرق مسدوده في البرمجه وللتخلص منها نسارع إلى الكتب أو السؤال عنها في المنتدى " وهو ما يحدث في الغالب " فتتاخر الردود أو أحياناً لا تجد رد أصلا ، ولكي تحصل على المعلومه التي تريدها يجب ان تشارك الأخرين بمعلوماتك فلو علمت شيئ بسيط انشره فهناك من يراه شيئ معقد ويحتاجه ، وقتها تنحل مشكلتك وتجد من يسعفك ويحل مشكلتك أتدري لماذا ؟ الجواب .. لأن الله لا يضيع أجر من أحسن عملا قال تعالى في سورة الكهف : (( إِنَّ الَّذِينَ آمَنُواْ وَعَمِلُواْ الصَّالِحَاتِ إِنَّا لاَ نُضِيعُ أَجْرَ مَنْ أَحْسَنَ عَمَلاً )) . وقال تعالى في سورة الرحمن : (( هَلْ جَزَآءُ الإِحْسَانِ إِلاَّ الإِحْسَانُ )) .

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

فكما تعلم العلم أمانه سوف نسأل عن علمنا مذا عملنا به ..

وللجميع أقدم لكم تحياتي 183.gif

وأرجوا ان نستمر حتى نصل إلى مستوى متقدم في هذا العلم .

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

أخي ياسر جزاك الله خيرا على هذا الابداع الذي نحن بأمسّ الحاجة له

و لكن لي ملاحظتين صغيرتين أرجو تداركهما :

1 - أرجو منك شرح كل سطر من الكود بشكل مفصل باللغة العربية و ذلك من أجل المبتدئين أمثالي

2 - أرجو رفع البرنامج على موقع آخر لأن هذا الرابط فيه بعض المشاكل فهو لا يعمل عندي رغم أنه يعمل عند البعض لأني لاحظت تنزيله عدة مرات

أكرر شكري لك أخي و أنا معك من المتابعين إن شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي golden man شكرا على الدعاء لي بالخير وارجوا ان يرد عليك ملك ويقول ولك مثله .

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

أما ملحوظتيك فهما على رأسي ..

1- بالنسبه للملحوظه الأولى المنتدى لا يعطيني خيار اعادة تحرير المشاركه ، ولي رأي خاص ..

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

2- فورا قمت بالإشتراك مع موقع رفع ملفات وانا أنتظر رد الموقع كي ارفعه مرة أخرى ولكن لا يمنع ان تحاول مرة أخرى .

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الخطوات التي إتبعتها هي:

1- إنشاء الجداول والربط بينها وهما جدول emp وجدول Dept والثاني هو الرئيسي.

2- إنشاء مشروع جديد وإنشاء OleDataadapter1 الخاص بالDept وإنشاء جدوله بالDataSet

3- ربط الBindingSource1 بالجدولDept الموجود بالDataSet

4- ربط TextBox1 و2 بالBindingSoucre1

5- ربط الBindingNavegator بالBindingSource1

6-إنشاء OleDataAdpater2 الخاص بالجدول الفرعي Emp وإنشاء جدوله بالdataset

7- ربط الجدولين الموجودين بالDataset

8-ربط الdataGride1 بالbindingSoucre الذي نشأت عند عملية الربط بين الجدولين بالداتا سيت .

وبذلك تكون علاقة Master-detail و يمكنك عندها التنقل بالBindingNavigator

طبعا يلزمك بعد عملية الاضافة او الحذف أن تضيف هذا الكود لزر حفظ لكي يعكس هذه التغيرات على DataBase

 Me.Validate()

Me.BindingSource1.EndEdit()

Me.OleDbDataAdapter1.Update(Me.DataSet11, "dept")

اما عن عملية الفلترة تتم عبر إستخدام التابع الموجود ضمن الBindingSource وهو Filter الذي يقوم بتصفية البيانات على Master والDetail

والتابع العكسي له RemoveFilter لتجربته ضع رقم القسم المراد التصفية عليه بالTextBox3 وغضغط على الزر Filter

أتمنى أن أكون قد أستطعت توصيل الفكرة من إستخدام الBindingSource الذي يوفر الكثير من الوقت.

BindingSource.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي طارق سمان لقد سررت بشرحك ولكني لم اتمكن من الحفظ عندما استخدمت BindingNavigator1 للحفظ كما اني اريد ان اعرف لماذا وضعت اثنان من BindingNavigator . والتعامل مع الكود مرن اكثر بكثير من التعمل مع المعالجات ، بالذات مع البرامج الكبيره . . .

هل من الممكن ان تعيد كتابة الكود بدون استخدام المعالج ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي " golden man " لقد رفعت الملف على رابط جديد وهو أيضاً غير مباشر ..

http://download.35mb.com/yaser95/LearnADON...portFormula.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تكملة الدرس ..

طريقة إضافة تقرير للمشروع ..

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

من القسم Solution Explorer أنقر على اسم المشروع بالزر الأيمن ثم تابه الصور التالية :

post-46002-1156398169_thumb.jpg

post-46002-1156398183_thumb.jpg

post-46002-1156398195_thumb.jpg

post-46002-1156398219_thumb.jpg

post-46002-1156398233_thumb.jpg

post-46002-1156398252_thumb.jpg

post-46002-1156398270_thumb.jpg

post-46002-1156398288_thumb.jpg

post-46002-1156398306_thumb.jpg

post-46002-1156398330_thumb.jpg

اضف في التقرير بالذات في Section2 مربع نص وليكن اسمه text1 كعنوان للتقرير .

post-46002-1156398350_thumb.jpg

ثم من القسم Solution Explorer أنقر على اسم المشروع بالزر الأيمن ثم اختر >> Add ثم >> NewItem ثم اختر >> Windows Form ثم اعطيه اي اسم وليكون Form2 .

بعد ذلك اذهب إلى Form2 واضف إلية أداة CrystalReportViewer1 .

بعد ذلك اذهب إلى Form2 في وضع كتابة الكود وأكتب ما يلزم من الكود التالي :

Imports System.Data
Imports System.Data.OleDb
Public Class Form2
Friend strConn2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\InformationBank.mdb;User Id=admin;Password=;"
Friend strSQL2 As String = "SELECT TheBank.id, TheBank.AskNumber, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID ORDER BY TheBank.AskNumber;" '"SELECT TheBank.id, TheBank.AskNumber, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID WHERE (((TheBank.ID)=18)) ORDER BY TheBank.AskNumber;" '"SELECT TheBank.id, TheBank.AskNumber, data.ask, data.answer FROM TheBank INNER JOIN data ON TheBank.ID = data.ID ORDER BY TheBank.AskNumber;"
Friend cn2 As New OleDbConnection(strConn2)
Friend daTheBankAndData2 As New OleDbDataAdapter(strSQL2, cn2)
Friend MyDS2 As New DataSet
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
cn2.Open()
daTheBankAndData2.Fill(MyDS2, "TheBankAndData")
cn2.Close()
Dim rpt As New rptCrystalReport1
'تحديد مسار التقرير و التحكم في وضع التقرير اما افقي او عمودي
rpt.Load(Application.StartupPath & "\" & "rptCrystalReport1.rpt")
rpt.SetDataSource(MyDS2.Tables("TheBankAndData"))
' التحكم في وضع التقرير اما افقي او عمودي
rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPaperOrientation
' هذا الكود يقوم بالكتابه في مربع النص الموجود تاخل التقرير في الموقع رقم 2
CType(rpt.Section2.ReportObjects("Text1"), CrystalDecisions.CrystalReports.Engine.TextObject).Text = "تقرير يستعرض الاسئله والأجوبة المخزنه في البرنامج"
' استعمال الفورملا لتحديد مجموعة معينه من البيانات كي تظهر في التقرير
'تعيين شرط تحديد البيانات للتقرير
' يمكنك الإستغناء عن الفورملا إذا اردت ظهور جميع السجلات
rpt.RecordSelectionFormula = (" {TheBank.AskNumber} = " & Form1.txtnumber.Text & "")
' تهيئةمستعرض التقرير وعرضه
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.DisplayGroupTree = False
CrystalReportViewer1.ShowGroupTreeButton = False
CrystalReportViewer1.RightToLeft = Windows.Forms.RightToLeft.Yes
' وهذا السطر الأخير لكي يظهر التقرير في حجم الصفحه فتسهل عملية قراءته
' يمكنك تغيير القيمة وملاحظة الفرق
'حاول ولن تخسر شيئا
CrystalReportViewer1.Zoom(1)
CrystalReportViewer1.Refresh()
CrystalReportViewer1.Show()
Catch ex As Exception
MessageBox.Show(ex.Message, " Show CrystalReport ... ", MessageBoxButtons.OK, _
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _
MessageBoxOptions.RtlReading)
End Try
End Sub
End Class

الحمد لله الذي اعانني على نقل امانة العلم ..

سامحوني اذا وجدتم أخطاء أو غموض ، كل ذلك يمكن تلافيه والتعليق عليه ..

الخطوه القادمة تطوير الكود والتقرير ..

اتمنى ان يشاركي الأخوان الشرح والتطوير ..

تم تعديل بواسطه yaseralshikh
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشالللله ابداااااااااااااااااااااااااع X ابدااااااااااااااااااااع

دائما متميز اخوي ياسر

يعطيك ربي الف عافية

ونحن بنتظار البقية ..

تحياتي لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .