ar visual basic.net 2008

22
ﻣﺜﺎﻝ ﺗﻄﺒﻴﻘﻲ ﻣﺘﻜﺎﻣﻞ ﻋﻠﻰ ﺑﻴﺌﺔado.net ﺑﺎﻟﻨﻤﻂ ﺍﳌﺘﺼﻞ: . ﺪ آل ﻗﺎﺳﻢ[email protected]

Upload: bensabdel

Post on 12-Apr-2015

23 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Ar Visual Basic.net 2008

بالنمط املتصلado.netمتكامل على بيئة مثال تطبيقي

:إعدادفھد آل قاسم.أ

[email protected]

Page 2: Ar Visual Basic.net 2008

من مایكروسوفت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بحیث ،معینة یقوم ھذا الكائن بربط قیمة إحدى خصائص كائن ما بإحدى خصائص أداةإي إن .تصبح الخاصیتین كأنھما خاصیة واحدة : وباختصار... والعكس ، یتم وضع قیمة خاصیة األداة تلقائیا كلما تغیرت

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

Page 3: Ar Visual Basic.net 2008

.النمط غیر المتصلوالنمط المتصلتعمل مع أنھاالتي تم ذكر سابقاً ADO.NETیوضح ال التاليالمخطط

Page 4: Ar Visual Basic.net 2008

١٢من ١صفحة

جامعة العلوم والتكنولوجیا ـ فرع إبقسم علوم الحاسوب

دبلوم برمجة٢برمجة مرئیة

بالنمط المتصلado.netمتكامل على بیئة مثال تطبیقي فھد آل قاسم.أ: إعداد مدرس المقرر

[email protected]من جھة األفكار وع متكامل واجھات إدخال، وتقریر واحد، لیعطي مثاال مبسطا لمشرخمس ھذا المثال یتكون من

یحتوي عملیات اإلدخال والتنقل العادیة، وعملیات معالجة اإلدخال األكثر تعقیدا، وأخیرا تقریر والكود المكتوب، حیث .مبسط وفق تقنیة میكروسوفت للتقاریر

، ماعدا كائن واحد ado.netوكل األكواد في ھذا المثال مكتوبة وفق النمط المتصل الذي یستخدم أھم كائنات تقنیة الـ .ھو قارئ البیانات المشروح سابقا

:اتالواجه)١

Page 5: Ar Visual Basic.net 2008

١٢من ٢صفحة

Page 6: Ar Visual Basic.net 2008

١٢من ٣صفحة

:الشيفرات الربجمة)٢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

Page 7: Ar Visual Basic.net 2008

١٢من ٤صفحة

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

Page 8: Ar Visual Basic.net 2008

١٢من ٥صفحة

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"

Page 9: Ar Visual Basic.net 2008

١٢من ٦صفحة

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

Page 10: Ar Visual Basic.net 2008

١٢من ٧صفحة

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)

Page 11: Ar Visual Basic.net 2008

١٢من ٨صفحة

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

Page 12: Ar Visual Basic.net 2008

١٢من ٩صفحة

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)

Page 13: Ar Visual Basic.net 2008

١٢من ١٠صفحة

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

Page 14: Ar Visual Basic.net 2008

١٢من ١١صفحة

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 & "'"

Page 15: Ar Visual Basic.net 2008

١٢من ١٢صفحة

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.صورة للتقریر نفسھ عند التصمیم:

Page 16: Ar Visual Basic.net 2008

٧من ١صفحة

:شرح لمجموعة من المقاطع المھمة الموجودة في المشروع

، ومن ثم فتح اإلتصال، وبعده ربط مھیئ 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

Page 17: Ar Visual Basic.net 2008

٧من ٢صفحة

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

Page 18: Ar Visual Basic.net 2008

٧من ٣صفحة

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()

Page 19: Ar Visual Basic.net 2008

٧من ٤صفحة

الموجود في ) 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

Page 20: Ar Visual Basic.net 2008

٧من ٥صفحة

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")

Page 21: Ar Visual Basic.net 2008

٧من ٦صفحة

یوضح عملیة استخدام كائن ربط البیانات كفلتر لترشیح بیانات الجدول الموجودة فیھ، التالي المقطع .١٩.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 "إبریل"

Page 22: Ar Visual Basic.net 2008

٧من ٧صفحة

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()