ar visual basic.net 2008
TRANSCRIPT
بالنمط املتصلado.netمتكامل على بيئة مثال تطبيقي
:إعدادفھد آل قاسم.أ
من مایكروسوفتADO.NETاألعمدة السبعة لتقنیة
صالح الحجري: األستاذوأعده ھذا المقال التوضیحي كتبھ
الرقم سبعة لھ بصمة واضحة ال یمكن تجاھلھا في تاریخ البشریة، خمسة، ولكنأعمدةبنا الكالم عن األجدرربما كان في بناء التقنیة التي ال یستغني عنھاكما سیأتي، ال یقالن أھمیة عن باقي مكونات ھذه والسابع وعموما فإن العمودین السادس
.نظم المعلومات الجیدة
COMMANDالعمود الثاني كائن األوامرCONNECTIONكائن االتصال األوللعمود ا
DATAADAPTERالعمود الرابع كائن مھیئ البیاناتDATAREADERالعمود الثالث كائن قارئ البیانات
COMMANDBUILDERالعمود السادس كائن باني األوامرDATASETالعمود الخامس كائن مجموعة البیانات
DATABINDINGالعمود السابع كائن ربط البیانات
ADO.NET: تعرف بأنھا مجموعة من الفئاتClasses للتعامل مع مصادر البیانات فإذا أردنا االتصال بقاعدة بیانات ماوالتعامل مع بیانات موجودة فیھا أو إضافة بیانات جدیدة لھا مثل أوراكل أو أكسس من خالل بیئة الدوت نت فسوف تقوم
ADO.NETا القول بان ویمكنن.في األساس للعمل مع قواعد البیانات ADO.NETتم تصمیم . ADO.NETبذلك من خالل .النمط غیر المتصلوالنمط المتصلمھمة للعمل مع
.لالتصال بقواعد البیانات ھو الكائن المخصص: Connectionكائن االتصال
.مخزن أو إجراء SQLأوامرمن ھو الكائن المخصص لتنفیذ أمر ما :Commandكائن األمر
دم للقراءة فقط والبیانات یمكن قراءتھا إلي األمام و ال یمكن الرجوع إلي الخلف تستخ: Data Readerكائن قارئي البیانات .تستخدم لالستعالم وتعتبر ذات أداء عالي جدا،
وكذلك یقوم بتنفیذ التعدیالت Datasetیقوم بتعبئة البیانات من قواعد البیانات إلي :Data Adapterكائن مھیئ البیانات .البیانات و عكسھا على قواعد البیانات التي أجریت علي مجموعة
أیضا ھي .ھي مجموعة من األنظمة البرمجیة تخزن فیھا البیانات في الذاكرة وتسمح بإدارتھا: Data setمجموعة البیانات علي عبارة عن قاعدة بیانات صغیرة موجودة في الذاكرة تمكننا من إنشاء جداول وربط ھذه الجداول بعالقات وھي ال تعتمد
.مصدر بیانات محدد
الختیار وإدخال DataAdapterمن قبل الــھذا الكائن یستخدم : OledbCommandBuilderكائن باني األمر-.البیاناتوتحدیث وحذف السجالت في قاعدة
:كائن ربط البیانات DataBindingبحیث ،معینة یقوم ھذا الكائن بربط قیمة إحدى خصائص كائن ما بإحدى خصائص أداةإي إن .تصبح الخاصیتین كأنھما خاصیة واحدة : وباختصار... والعكس ، یتم وضع قیمة خاصیة األداة تلقائیا كلما تغیرت
بإحدى خصائص ،الواقعة في السجل الحالي في عمود محدد، خانات الجداول إحدىاستخدام ھذا الكائن في ربط محتویات ) عة لمربع النص مثل خاصیة النص التاب( األداة
.النمط غیر المتصلوالنمط المتصلتعمل مع أنھاالتي تم ذكر سابقاً ADO.NETیوضح ال التاليالمخطط
١٢من ١صفحة
جامعة العلوم والتكنولوجیا ـ فرع إبقسم علوم الحاسوب
دبلوم برمجة٢برمجة مرئیة
بالنمط المتصلado.netمتكامل على بیئة مثال تطبیقي فھد آل قاسم.أ: إعداد مدرس المقرر
[email protected]من جھة األفكار وع متكامل واجھات إدخال، وتقریر واحد، لیعطي مثاال مبسطا لمشرخمس ھذا المثال یتكون من
یحتوي عملیات اإلدخال والتنقل العادیة، وعملیات معالجة اإلدخال األكثر تعقیدا، وأخیرا تقریر والكود المكتوب، حیث .مبسط وفق تقنیة میكروسوفت للتقاریر
، ماعدا كائن واحد ado.netوكل األكواد في ھذا المثال مكتوبة وفق النمط المتصل الذي یستخدم أھم كائنات تقنیة الـ .ھو قارئ البیانات المشروح سابقا
:اتالواجه)١
١٢من ٢صفحة
١٢من ٣صفحة
:الشيفرات الربجمة)٢i. على بساطتھا(شیفرة الواجھة الرئیسیة(:
Public Class mainfrmPrivate Sub btn_dept_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_dept.Clickfrm_dept.Show()frm_emp.Close()frm_hrs.Close()frm_prj.Close()
End Sub
Private Sub btn_emp_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_emp.Click
frm_dept.Close()frm_emp.Show()frm_hrs.Close()frm_prj.Close()
End Sub
Private Sub btn_projects_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_projects.Click
frm_dept.Close()frm_emp.Close()frm_hrs.Close()frm_prj.Show()
End Sub
Private Sub btn_absence_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_absence.Click
frm_dept.Close()frm_emp.Close()frm_hrs.Show()frm_prj.Close()
End Sub
Private Sub btn_close_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_close.Click
Application.Exit()End Sub
Private Sub btn_reports_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_reports.Click
frmrep_emp.Show()End Sub
ii.كود نموذج بیانات قسم:Imports System.Data.OleDbPublic Class frm_dept
Dim cn As New OleDbConnectionDim dtst As New DataSetDim dtadpt As New OleDbDataAdapterDim bs As BindingSourceDim auto_number As Integer = 0
١٢من ٤صفحة
Private Sub frm_dept_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load
Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=EMPDB.mdb;Persist Security Info=False"
cn.ConnectionString = strcn.Open()dtadpt = New OleDbDataAdapter("select*from tbl_dept", cn)dtadpt.Fill(dtst, "dept")cn.Close()
txt_deptno.ReadOnly = TrueTry
bs = New BindingSource(dtst, "dept")txt_deptno.DataBindings.Add("text", bs, "deptno")txt_dname.DataBindings.Add("text", bs, "dname")txt_loc.DataBindings.Add("text", bs, "location")
Catch ex As ExceptionEnd Try
bs.Position = 0bs.Position = bs.Count - 1If bs.Count - 1 <> 0 Then
auto_number = CInt(txt_deptno.Text)End If
End Sub
Private Sub btn_first_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_first.Click
bs.Position = 0End Sub
Private Sub btn_next_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_next.Click
If bs.Position < bs.Count - 1 Thenbs.Position += 1
ElseMsgBox("أنت في السجل ("األخیر
End IfEnd Sub
Private Sub btn_close_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_close.Click
Me.Close()End Sub
Private Sub btn_previous_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_previous.Click
If bs.Position > 0 Thenbs.Position -= 1
ElseMsgBox("أنت في أول ("سجل
End IfEnd Sub
Private Sub btn_last_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_last.Click
bs.Position = bs.Count - 1End Sub
١٢من ٥صفحة
Private Sub btn_add_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_add.Click
MsgBox("یجب الضغط على زر حفظال بعد ("اإلضافةbs.AddNew()auto_number += 1txt_deptno.Text = auto_numbertxt_dname.Focus()
End Sub
Private Sub btn_edit_save_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_edit_save.Click
Dim ds As New DataSetDim cmdbldr As New OleDbCommandBuilder(dtadpt)
Trybs.EndEdit()If dtst.HasChanges Then
ds = dtstdtadpt.Update(ds.Tables("dept"))dtst.AcceptChanges()
End IfCatch ex As ExceptionEnd TryMsgBox("تم حفظ العملیة ("بنجاح
End Sub
Private Sub btn_delete_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_delete.Click
If MsgBox("ھل ترغب حقا بحذف السجل تأكید" ,MsgBoxStyle.YesNo ,"المعروض ("الحذف= MsgBoxResult.Yes Then
bs.RemoveAt(bs.Position)End If
End SubEnd Class
iii. نموذج بیانات موظفكود:Imports System.Data.OleDbPublic Class frm_emp
Dim cn As New OleDbConnectionDim cmd As New OleDbCommandDim dtst As New DataSetDim dtadpt As New OleDbDataAdapterDim ds_counter As Integer = 0Dim str_dno As String = 1
Private Sub frm_emp_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load
Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=EMPDB.mdb;Persist Security Info=False"
cn.ConnectionString = strcn.Open()
'cmd.Connection = cn'cmd.CommandText = "select*from tbl_emp"
١٢من ٦صفحة
cmd = New OleDbCommand("select*from tbl_emp", cn)dtadpt.SelectCommand = cmd'or dtadpt = New OleDbDataAdapter("select*from tbl_emp", cn)dtadpt.Fill(dtst, "emp")cn.Close()Try
txt_empno.Text = dtst.Tables("emp").Rows(0).Item("empno")txt_ename.Text = dtst.Tables("emp").Rows(0).Item("ename").ToStringtxt_eaddress.Text = dtst.Tables("emp").Rows(0).Item("eaddress").ToStringcmb_esex.Text = dtst.Tables("emp").Rows(0).Item("esex").ToStringstr_dno = dtst.Tables("emp").Rows(0).Item("deptno").ToString
Catch ex As Exception
End Try
'dr_counter += 1 'dr_counter = dr_counter + 1
Dim da As New OleDbDataAdapter("select*from tbl_dept", cn)da.Fill(dtst, "dept")cmb_dname.DataSource = dtst.Tables("dept")cmb_dname.DisplayMember = "dname"cmb_dname.ValueMember = "deptno"cmb_dname.SelectedValue = str_dno
End Sub
Private Sub btn_close_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_close.Click
Me.Close()End Sub
Private Sub btn_first1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_first.Click
ds_counter = 0dtstmovrow()
End Sub
Private Sub btn_next_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_next.Click
ds_counter += 1If ds_counter <= dtst.Tables("emp").Rows.Count - 1 Then
dtstmovrow()Else
MsgBox("أنت في السجل ("األخیرds_counter -= 1
End IfEnd Sub
Private Sub btn_previous_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_previous.Click
ds_counter -= 1If ds_counter >= 0 Then
dtstmovrow()Else
MsgBox("أنت في السجل ("األولds_counter += 1
End IfEnd Sub
١٢من ٧صفحة
Private Sub btn_last_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_last.Click
ds_counter = dtst.Tables("emp").Rows.Count - 1dtstmovrow()
End Sub
Private Sub btn_add_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_add.Click
If btn_add.Text = "اضافة" Thentxt_eaddress.Clear()txt_empno.Clear()txt_ename.Clear()MsgBox("قم بكتابة بیانات موظف جدید، ثم إضغط على زر إضافة" , ,"حفظ ("سجلbtn_add.Text = "حفظ "اإلضافةtxt_empno.Focus()
Elsedtst.Tables("emp").Rows.Add(New Object() {txt_empno.Text, txt_ename.Text,
cmb_esex.Text, txt_eaddress.Text, cmb_dname.SelectedValue})btn_add.Text = "اضافة"send_data_to_db()
End If
End Sub
Private Sub btn_edit_save_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_edit_save.Click
dtst.Tables("emp").Rows(ds_counter)("empno") = txt_empno.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("ename") = txt_ename.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("esex") = cmb_esex.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("eaddress") = txt_eaddress.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("deptno") =
cmb_dname.SelectedValue.ToStringsend_data_to_db()
End Sub
Private Sub btn_delete_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_delete.Click
If MsgBox("ھل أنت متأكد من رغبتك في حذف السجل ,MsgBoxStyle.YesNo ,"المعروضتأكید" MsgBoxResult.Yes Then = ("الحذف
dtst.Tables("emp").Rows(ds_counter).Delete()send_data_to_db()btn_first1_Click(sender, e)
End IfEnd Subھذه' الدالة تقوم بإسناد قیمة السجل الحالي إلى صنادیق اإلدخال في النموذجPrivate Sub dtstmovrow()
txt_empno.Text = dtst.Tables("emp").Rows(ds_counter).Item("empno").ToStringtxt_ename.Text = dtst.Tables("emp").Rows(ds_counter).Item("ename").ToStringtxt_eaddress.Text =
dtst.Tables("emp").Rows(ds_counter).Item("eaddress").ToStringcmb_esex.Text = dtst.Tables("emp").Rows(ds_counter).Item("esex").ToStringstr_dno = dtst.Tables("emp").Rows(ds_counter).Item("deptno").ToStringcmb_dname.SelectedValue = str_dno
End SubPrivate Sub send_data_to_db()
TryDim ds As New DataSetIf dtst.HasChanges Then
ds = dtstDim cmbbldr As New OleDbCommandBuilder(dtadpt)
١٢من ٨صفحة
dtadpt.Update(ds.Tables("emp"))dtst.AcceptChanges()
End IfCatch ex As Exception
MsgBox(ex.Message)End Try
End SubEnd Class
iv. موظف_ كود نموذج مشروع:Imports System.Data.OleDb
Public Class frm_prjDim cn As New OleDbConnectionDim dtst As New DataSetDim dtadpt As New OleDbDataAdapterDim da0 As New OleDbDataAdapter'Dim auto_number As Integer = 0Dim bsprj As BindingSource
Private Sub frm_hrs_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=EMPDB.mdb;Persist Security Info=False"
dtadpt = New OleDbDataAdapter("select*from tbl_prj", cn)dtadpt.Fill(dtst, "prj")Dim da As New OleDbDataAdapter("select*from tbl_emp", cn)da.Fill(dtst, "emp")da0 = New OleDbDataAdapter("select*from tbl_prj_emp", cn)da0.Fill(dtst, "prjemp")
bsprj = New BindingSource(dtst, "prj")txt_pname.DataBindings.Add("text", bsprj, "prjname")txt_id.DataBindings.Add("text", bsprj, "prjno")
cl_ename.DataSource = dtst.Tables("emp")cl_ename.DisplayMember = "ename"cl_ename.ValueMember = "empno"cl_ename.DataPropertyName = "empno"
cl_prj.DataSource = dtst.Tables("prj")cl_prj.DisplayMember = "prjname"cl_prj.ValueMember = "prjno"cl_prj.DataPropertyName = "projno"
dtgr_prjemp.DataSource = dtst.Tables("prjemp")
End Sub
Private Sub btn_add_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_add.Click
bsprj.AddNew()txt_id.Focus()
End Sub
١٢من ٩صفحة
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click
Me.Close()End Sub
Private Sub btn_savetoprj_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_savetoprj.Click
bsprj.EndEdit()If dtst.HasChanges Then
Dim ds As New DataSetds = dtstDim cmdbldr As New OleDbCommandBuilder(dtadpt)dtadpt.Update(ds, "prj")dtst.AcceptChanges()
End IfEnd Sub
Private Sub btn_savetodb_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_savetodb.Click
If dtst.HasChanges ThenDim ds As New DataSetds = dtstDim cmdbldr As New OleDbCommandBuilder(da0)da0.Update(ds, "prjemp")dtst.AcceptChanges()
End IfEnd Sub
Private Sub btn_addtodtgrid_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_addtodtgrid.Click
dtgr_prjemp.Enabled = Truedtgr_prjemp.ReadOnly = Falsedtgr_prjemp.AllowUserToAddRows = Truedtgr_prjemp.AllowUserToDeleteRows = True
End SubEnd Class
v.شیفرة أو كود نموذج ساعات غیاب الموظف:Imports System.Data.OleDb
Public Class frm_hrsDim cn As New OleDbConnectionDim dtst As New DataSetDim dtadpt As New OleDbDataAdapter'Dim auto_number As Integer = 0Dim bs As BindingSource
Private Sub frm_hrs_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load
txt_date.Text = Today.Date.Datelbl_mnth.Text = changemonth(CInt(Today.Month.ToString))'cmb_day.Text = Today.DayOfWeek.ToStringcn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=EMPDB.mdb;Persist Security Info=False"dtadpt = New OleDbDataAdapter("select*from tbl_hours", cn)dtadpt.Fill(dtst, "hours")
Dim da As New OleDbDataAdapter("select*from tbl_emp", cn)
١٢من ١٠صفحة
da.Fill(dtst, "emp")cmb_empno.DataSource = dtst.Tables("emp")cmb_empno.DisplayMember = "ename"cmb_empno.ValueMember = "empno"
bs = New BindingSource(dtst, "hours")txt_date.DataBindings.Add("text", bs, "thedate")txt_hrs.DataBindings.Add("text", bs, "num_hrs")cmb_day.DataBindings.Add("text", bs, "dayname")cmb_empno.DataBindings.Add("selectedvalue", bs, "empno")
Dim mnth As Integer = CInt(Today.Month.ToString)Dim xdate As Date = New DateTime(2010, mnth, 1)bs.Filter = "thedate >='" & xdate.ToString & "'"
dtgr_emphrs.DataSource = bs
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click
'dtst.Tables("hours")Dim thecount As Integer = 0btn_fltr.Text = "تصفــــیة"btn_fltr_Click(sender, e)For i = 0 To dtgr_emphrs.RowCount - 1
thecount += CInt(dtgr_emphrs(3, i).Value)NextDim strmsg As String = " عدد الساعات القیدة على الموظف "strmsg = strmsg & cmb_empno.Text.ToString '& Chr(13)strmsg = strmsg & "=" & thecount.ToStringstrmsg = strmsg & Chr(13) & " ھل ترغب بعرض تقریر الغیاب للموظف : " &
cmb_empno.Text.ToStringIf MsgBox(strmsg, MsgBoxStyle.YesNo, "رصید MsgBoxResult.Yes = ("الموظف
Then lbl_msg.Text = lbl_msg.Text & " " & cmb_empno.Text & "=" & thecount.ToStringEnd Sub
Private Sub cmb_empno_SelectedIndexChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles cmb_empno.SelectedIndexChanged
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_exit.Click
Me.Close()End SubFunction changemonth(ByVal x As Integer) As String
Select Case xCase 1
Return "ینایر"Exit Function
Case 2Return "فبرایر"
Case 3Return "مارس"
Case 4Return "إبریل"
Case 5Return "إبریل"
Case 6
١٢من ١١صفحة
Return "إبریل"Case 7
Return "إبریل"Case 8
Return "إبریل"Case 9
Return "إبریل"Case 10
Return "إبریل"Case 11
Return "إبریل"Case 12
Return "إبریل"End Select
End Function
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button6.Click
If Button6.Text = "شبكة Then "البیاناتdtgr_emphrs.ReadOnly = FalseButton6.Text = "شبكة"
Elsedtgr_emphrs.ReadOnly = TrueButton6.Text = "شبكة "البیانات
End If
End Sub
Private Sub btn_add_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_add.Click
bs.AddNew()txt_date.Text = Now.Date.Datecmb_empno.Focus()
End Sub
Private Sub btn_save_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_save.Click
Trybs.EndEdit()If dtst.HasChanges Then
Dim ds As New DataSetDim cmdbldr As New OleDbCommandBuilder(dtadpt)ds = dtstdtadpt.Update(ds.Tables("hours"))dtst.AcceptChanges()
End IfCatch ex As Exception
MsgBox(ex.Message)End Try
End Sub
Private Sub btn_fltr_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_fltr.Click
If btn_fltr.Text = "تصفــــیة" ThenDim mnth As Integer = CInt(Today.Month.ToString)Dim xdate As Date = New DateTime(2010, mnth, 1)bs.Filter = "empno='" & cmb_empno.SelectedValue.ToString & "' and
thedate >='" & xdate.ToString & "'"
١٢من ١٢صفحة
btn_fltr.Text = "الكل"Else
bs.Filter = ""cl_name.Visible = Truebtn_fltr.Text = "تصفــــیة"
End IfEnd Sub
Private Sub cmb_day_SelectedIndexChanged(ByVal sender As System.Object, ByVale As System.EventArgs) Handles cmb_day.SelectedIndexChanged
End SubEnd Class
vi.كود نموذج عرض التقریر:
Private Sub frmrep_emp_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'EMPDBDataSet.TBL_EMP' table.You can move, or remove it, as needed.
Me.TBL_EMPTableAdapter.Fill(Me.EMPDBDataSet.TBL_EMP)Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)Me.ReportViewer1.ZoomMode = ZoomMode.PercentMe.ReportViewer1.RefreshReport()
End Sub
vii.صورة للتقریر نفسھ عند التصمیم:
٧من ١صفحة
:شرح لمجموعة من المقاطع المھمة الموجودة في المشروع
، ومن ثم فتح اإلتصال، وبعده ربط مھیئ strالمقطع التالي یوضح تعریف سلسلة اإلتصال عبر المتغیر النصي .١، ومن ثم تعبئة الجدول في المھیئ إلى مجموعة البیانات وتسمیة الجدول tbl_deptبالجدول dtadptالبیانات
.، كمسمى لجدول بیانات داخل مجموعة البیانات"dept"آخر ھو باسم
Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=EMPDB.mdb;Persist Security Info=False"
cn.ConnectionString = strcn.Open()dtadpt = New OleDbDataAdapter("select*from tbl_dept", cn)dtadpt.Fill(dtst, "dept")cn.Close()
:األسطر التالیة تقوم بالتالي.٢یتم ربط أداة الربط ، )try..catch..end try(تجعل صندوق النص للقراءة فقط، ثم ضمن حاصرة اإلستثناء
bs بمجموعة البیاناتdtst وباألخص بالجدول المسمىdept.عد ذلك ثالثة أسطر ربط صنادیق النص في النموذج بأداة الربط تلك وفق أسماء الحقول التي في الجدول وب
.الموجود في مجموعة البیاناتtxt_deptno.ReadOnly = TrueTry
bs = New BindingSource(dtst, "dept")txt_deptno.DataBindings.Add("text", bs, "deptno")txt_dname.DataBindings.Add("text", bs, "dname")txt_loc.DataBindings.Add("text", bs, "location")
Catch ex As ExceptionEnd Try
القیمة النصیة في بإسناد ناه، ویقوم المقطع التالي یعمل فقط إذا كانت أداة الربط غیر فارغة حسب الشرط أد.٣، الذي یعمل كعداد لرقم القسم، بدال عن الترقیم auto_numberإلى المتغیر txt_deptnoصندوق النص
.cintالتلقائي في قاعدة البیانات، كل ھذا بعد تحویل القیمة النصیة إلى رقم عبر الدالة If bs.Count - 1 <> 0 Then
auto_number = CInt(txt_deptno.Text)End If
ھذا المقطع یحرك أداة الربط خطوة لألمام بشرط أن ال تكون في آخر سجل، والمقطع الثاني یفعل العكس، .٤If bs.Position < bs.Count - 1 Then
bs.Position += 1Else
MsgBox("أنت في السجل ("األخیرEnd If
٧من ٢صفحة
If bs.Position > 0 Thenbs.Position -= 1
ElseMsgBox("أنت في أول ("سجل
End Ifھذا المقطع یكتب في زر اإلضافة حیث یسمح إلضافة سجل جدید إلى أداة الربط، ثم وضع قیمة برمجیا في .٥
.إلى صندوق النص الخاص باإلسمfocusوق النص رقم القسم، وبعدھا ینقل التركیز صندMsgBox("یجب الضغط على زر الحفظ بعد ("اإلضافة
bs.AddNew()auto_number += 1txt_deptno.Text = auto_numbertxt_dname.Focus()
، وكائن آخر من نوع cmdbldrح عمل الزر حفظ، حیث یعرف كائن باني األوامر المقطع التالي یوض.٦:كالتالي) …try(مجموعة البیانات، ویعمل ضمن مقطع اإلستثناء
ثم. endeditإنھاء عملیة التحدیث في أداة الربط من أجل السماح بحفظ البیانات وذلك بالطریقة یانات المرتبط بأداة الربط، ثمجملة شرط تبحث ھل حدث تغییر على مجموعة الب
، dsإلى مجموعة البیانات الجدیدة dtstفي حالة كانت اإلجابة نعم للشرط، یتم إسناد مجموعة البیانات الرئیسیة ثم. أي عمل نسخة فیھا، وذلك للحفاظ على المجموعة الرئیسیة
البیانات عبر باني أوامر ضمني، وعبر إلى قاعدة ) إدخال أو تعدیل أو حذف(القیام بإرسال البیانات المعالجة .مھیئ البیانات نفسھ الذي قمنا بتعبئة مجموعة البیانات بھ، ویجب تحدید نفس الجدول المقصود
التي تقوم بقبول التغیرات على مجموعة البیانات، حتى ال ()dtst.AcceptChangesبعد ذلك بالطریقة.مرة أخرى على زر الحفظ المحتوي على ھذا الكودترسل مرة أخرى لقاعدة البیانات لو تم الضغط
Dim ds As New DataSetDim cmdbldr As New OleDbCommandBuilder(dtadpt)Try
bs.EndEdit()If dtst.HasChanges Then
ds = dtstdtadpt.Update(ds.Tables("dept"))dtst.AcceptChanges()
End IfCatch ex As ExceptionEnd TryMsgBox("تم حفظ العملیة ("بنجاح
End Sub
ى الزر حفظ للحذف من المقطع الصغیر التالي یحذف البیانات من أداة الربط فقط، ویحتاج إلى الضغط عل.٧.لتأكید الحذف) yes,no(من النوع msgboxقاعدة البیانات االصلة، وقد بدأنا بصندوق رسائل
If MsgBox("ھل ترغب حقا بحذف السجل تأكید" ,MsgBoxStyle.YesNo ,"المعروض = ("الحذفMsgBoxResult.Yes Then
٧من ٣صفحة
bs.RemoveAt(bs.Position)، الموجود في empي یوضح عملیة ربط صنادیق النص ببیانات أول صف في جدول البیانات المقطع التال.٨
، وذلك وفق كل حقل وصندوق النص المقابل، وھذه الطریقة تستخدم لإلستغناء عن أداة dtstمجموعة البیانات .، وھي أكثر أمانا لكنھا أكثر صعوبة للمبرمج٢الربط كما في المقطع
Trytxt_empno.Text = dtst.Tables("emp").Rows(0).Item("empno")txt_ename.Text = dtst.Tables("emp").Rows(0).Item("ename").ToStringtxt_eaddress.Text = dtst.Tables("emp").Rows(0).Item("eaddress").ToStringcmb_esex.Text = dtst.Tables("emp").Rows(0).Item("esex").ToStringstr_dno = dtst.Tables("emp").Rows(0).Item("deptno").ToString
Catch ex As ExceptionEnd Try
المقطع التالي یوضح عملیة تعبئة الصندوق المنسدل بیانات الجدول األب، حیث یحمل بیانات القسم اإلسم .٩.والرقم، ویعرض اإلسم، ولكنھ یخزن الرقم لیعمل في جدول إبن، مثل جدول الموظفین
رقم اسم فیضبط القیمة المعروضة وھي اسم القسم حسبcmb_dname.SelectedValue = str_dnoأما السطر.أعاله٨وھذه القیمة مأخوذة من الجدول اإلبن كما في المقطع str_dnoمحدد ھو المتغیر
cmb_dname.DataSource = dtst.Tables("dept")cmb_dname.DisplayMember = "dname"cmb_dname.ValueMember = "deptno"cmb_dname.SelectedValue = str_dno
المقاطع التالیة توضح عملیة التنقل بین السجالت بدون أداة ربط، وإنما باستخدام مجموعة البیانات، .١٠.المشروحة أدناه()dtstmovrowوالدالةds_counterوبالتعاون مع العداد
ds_counter += 1If ds_counter <= dtst.Tables("emp").Rows.Count - 1 Then
dtstmovrow()Else
MsgBox("أنت في السجل ("األخیرds_counter -= 1
End Ifds_counter -= 1If ds_counter >= 0 Then
dtstmovrow()Else
MsgBox("أنت في السجل ("األولds_counter += 1
End Ifds_counter = dtst.Tables("emp").Rows.Count - 1dtstmovrow()
٧من ٤صفحة
الموجود في ) emp(المقطع التالي یوضح عملیة تعبئة صف بالبیانات من صفوف جدول البیانات .١١مؤقت من نوع كائن، یقوم ھذا المتغیر بتعبئة صف كامل مرة ، وذلك عبر متغیر dtstمجموعة البیانات
.واحدة، ونستخدم ھذه الطریقة للكتابة مباشرة إلى مجموعة البیانات بدون استخدام أداة الربط.الموضحة أدناه، والتي ترسل البیانات إلى قاعدة البیاناتsend_data_to_dbالحظ بعد ذلك الدالة
dtst.Tables("emp").Rows.Add(New Object() {txt_empno.Text, txt_ename.Text,cmb_esex.Text, txt_eaddress.Text, cmb_dname.SelectedValue})
btn_add.Text = "اضافة"send_data_to_db()
End Ifفي مجموعة البیانات empھذه األسطر توضح عملیة تعدیل بیانات صفوف معینة من جدول البیانات .١٢
dtst وذلك عبر تحدید رقم الصف بالمتغیر ،ds_counter وتحدید اسم العمود بعده مباشرة، وھو یتعامل مع ،).صف،عمود(بالطریقة أي جدول البیانات المذكور كأنھ مصوفة من بعدین
dtst.Tables("emp").Rows(ds_counter)("empno") = txt_empno.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("ename") = txt_ename.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("esex") = cmb_esex.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("eaddress") = txt_eaddress.Text.ToStringdtst.Tables("emp").Rows(ds_counter)("deptno") = cmb_dname.SelectedValue.ToString
send_data_to_db( )السطرھذا : الحظةم
dtst.Tables("emp").Rows(ds_counter)("empno") = txt_empno.Text.ToString:أن یكتب بالصورةكنیم
dtst.Tables("emp").Rows(ds_counter).item("empno") = txt_empno.Text.ToString.فیمن تجاوزھا وعدم كتابتھاitemھي للكائن صف البیانات )defalu property(وحیث أن الخاصیة التلقائیة
ھذا الكود یحذف بیانات صف من مجموعة البیانات مباشرة، دون إستخدام كائن ربط البیانات، .١٣If MsgBox("ھل أنت متأكد من رغبتك في حذف السجل تأكید" ,MsgBoxStyle.YesNo ,"المعروض
("الحذف = MsgBoxResult.Yes Thendtst.Tables("emp").Rows(ds_counter).Delete()send_data_to_db()btn_first1_Click(sender, e)
End If
)dtstmovrowالتي سمیناھا الدالةھذه.١٤ فياإلدخالصنادیقإلىلحالياالسجلقیمةبإسنادتقوم(والذي یتبع بدوره rowsالتي تتبع كائن صف البیانات itemالسجل الحالي بالخاصیة حقل ، ونعرف النموذج
.dtstوھي ھنا الـ datasetوكلھا تتبع كائن مجموعة البیانات tablesكائن جدول البیانات .binding sourceنستخدم كائن ربط البیانات ھذا الكود إذا كنا الونستخدم
Private Sub dtstmovrow( )txt_empno.Text = dtst.Tables("emp").Rows(ds_counter).Item("empno").ToStringtxt_ename.Text = dtst.Tables("emp").Rows(ds_counter).Item("ename").ToStringtxt_eaddress.Text = dtst.Tables("emp").Rows(ds_counter).Item("eaddress").ToStringcmb_esex.Text = dtst.Tables("emp").Rows(ds_counter).Item("esex").ToStringstr_dno = dtst.Tables("emp").Rows(ds_counter).Item("deptno").ToString
٧من ٥صفحة
cmb_dname.SelectedValue = str_dnoEnd Sub
إلى الجدول المقابل في قاعدة مجموعة البیانات لالمدخلة ھذه الدالة فتستخدم إلرسال البیانات أما .١٥، حیث تم إستدعاء ھذه الدالة ١١البیانات، المعرفة في سلسلة اإلتصال، وعملیة اإلضافة قد سبقت في المقطع
.بعد عملیة اإلدخالPrivate Sub send_data_to_db()
TryDim ds As New DataSetIf dtst.HasChanges Then
ds = dtstDim cmbbldr As New OleDbCommandBuilder(dtadpt)dtadpt.Update(ds.Tables("emp"))dtst.AcceptChanges()
End IfCatch ex As Exception
MsgBox(ex.Message)End Try
End Sub
الذي یعطي تأریخ الیوم، في السطر األول، ثم TODAYیخ التالیین یستخدمان كائن التأرلسطرین ا.١٦.التي عرفناھا باألسفل للحصول على إسم الشھر المعروف رقمھchangemonthیستخدم الدالة
txt_date.Text = Today.Date.Datelbl_mnth.Text = changemonth(CInt(Today.Month.ToString))
، ھما حقال رقم الموظف cmb_empnoالتي اسمھا Comboboxالتالي یعرف حقلین لألداة لمقطع ا.١٧.مالموظف، حیث یتم عرض اإلسم وتخزین الرقم إلستخدام الرقم المقابل لكل إسواسم
cmb_empno.DataSource = dtst.Tables("emp")cmb_empno.DisplayMember = "ename"cmb_empno.ValueMember = "empno"
selectedvalueواإلضافة ھنا ھي استخدام الخاصیة أعاله،٢التالي قد تم شرحھ في المقطعالمقطع .١٨.لتعریف رقم الموظف بدال عن اسم الموظف المعروض
bs = New BindingSource(dtst, "hours")txt_date.DataBindings.Add("text", bs, "thedate")txt_hrs.DataBindings.Add("text", bs, "num_hrs")cmb_day.DataBindings.Add("text", bs, "dayname")cmb_empno.DataBindings.Add("selectedvalue", bs, "empno")
٧من ٦صفحة
یوضح عملیة استخدام كائن ربط البیانات كفلتر لترشیح بیانات الجدول الموجودة فیھ، التالي المقطع .١٩.selectفي جملة اإلستعالم المعروفة whereوھو یشبھ جملة
من نوع xdateتم تعریف متغیر رقمي في السطر األول یأخذ رقم الشھر الحالي، ومن ثم عرفنا المتغیر یث ح.لوضع التأریخ المطلوب تمریره لجملة الترشیح في السطر الثالثdatetimeتأریخ حیث یستخدم الدالة
Dim mnth As Integer = CInt(Today.Month.ToString)Dim xdate As Date = New DateTime(2010, mnth, 1)bs.Filter = "thedate >='" & xdate.ToString & "'"
، والذي اسمھ ھنا datagridviewشبكة البیانات التالي یوضح كیفیة ربط كائن طر الس.٢٠dtgr_emphrs مسندة إلى كائن الربط بمصدر لملئ بیاناتھا تلقائیا، وھي ھناbs أي ، ویمكن إسنادھا إلى
ولكن میزة كائن الربط ھي الموضحة أعاله، میزة الترشیح لعرض ع لمجموعة البیانات، بتیبیانات جدول .كة البیاناتالبیانات المختارة في شب
dtgr_emphrs.DataSource = bs
بقیمتھ السابقة، وإضافة القیم الموجودة في الشبكة thecountالتالیة تقوم بتعبئة المتغیر الدالة .٢١قة بالمرور على جمیع صفوف الشبكة الحل، حیث تقومi، والصف رقم ٣رقم وبالتحدید الموجودة في العمود
.الموجودةFor i = 0 To dtgr_emphrs.RowCount - 1
thecount += CInt(dtgr_emphrs(3, i).Value)Next
إلى إسم الشھر حسب الرقم ، ١٦رقم الدالة تحول رقم الشھر العائد من الدالة الموضحة في المقطع ھذه.٢٢.لة یمكن للطالب تصحیحھالممر، وفیھا خطأ بالطبع یتعلق بكتابة األشھر كام
Function changemonth(ByVal x As Integer) As StringSelect Case x
Case 1Return "ینایر"Exit Function
Case 2Return "فبرایر"
Case 3Return "مارس"
Case 4Return " لإبری "
Case 5Return "إبریل"
Case 6Return "إبریل"
Case 7Return "إبریل"
Case 8Return "إبریل"
٧من ٧صفحة
Case 9Return "إبریل"
Case 10Return "إبریل"
Case 11Return "إبریل"
Case 12Return "إبریل"
End SelectEnd Function
، وتضع تأریخ الیوم في الصندوقbsئن الربط األسطر تضیف صفا جدید إلى الجدول المرتبط بكاه ھذ.٢٣.إلى السطر الثالث) مؤشر الكتابة ھنا(المحدد بالسطر الثاني، وتنقل التركیز
bs.AddNew()txt_date.Text = Now.Date.Datecmb_empno.Focus()
السطرما أ.حیث یرشح بیانات كائن الربط١٩التالي یكرر ما شرح في المقطع المقطع .٢٤bs.Filter = ""التالسج/فیلغي أي ربط على كائن الربط ویعرض جمیع الصفوف.
Dim mnth As Integer = CInt(Today.Month.ToString)Dim xdate As Date = New DateTime(2010, mnth, 1)
bs.Filter = "empno='" & cmb_empno.SelectedValue.ToString & "' and thedate >='" &xdate.ToString & "'"
bs.Filter = ""cl_name.Visible = Truebtn_fltr.Text = "تصفــــیة"
یتم تعبئة تكون من األسطر األربعة التالیة، في السطر األولالتالي یكود نموذج عرض التقریر.٢٥یحدد السطر الثانيفي و. اآلخرعبر مھیئ البیانات المرئي ھو tbl_empمجموعة بیانات مرئیة، بالجدول
، أي لكائن التقاریر أن یعرض في وضع الطباعة، أما السطر الثالث فیحدد تكبیره بالنسبة المئویة التلقائیة.التقاریر وعمل تحدیث لھالرابع بعرض ، وأخیرا یقوم السطر%١٠٠
Me.TBL_EMPTableAdapter.Fill(Me.EMPDBDataSet.TBL_EMP)Me.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)Me.ReportViewer1.ZoomMode = ZoomMode.PercentMe.ReportViewer1.RefreshReport()