IV. PHâN TíCH Hệ THẩNG QUảN Lí đ OΜN đ ΜO TạO
3. Thiết kế cơ sở dữliệu bằng phơng pháp mô hình hoá
a. Mô hình hoá quan hệ thực thể:
Đoàn
Có Chương
trinh đi Tham
gia Cán bộ Được cấp Hộ chiếu Có Visa Đi Chuyến đi Đến Nước 1 N N 1 1 N 1 N N 1 1 N
b. Danh sách và cấu trúc các bảng của cơ sở dữ liệu:
Từ mô hình quan hệ thực thể trên ta có thể thiết kế cơ sở dữ liệu nh sau: - Bảng DOAN ( Đoàn )
-Bảng CAN_BO ( Cán bộ )
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
MA_QD Text 10 * Mã quyết định
NGAY_QD Date time dd/mm/yyyy Ngày quyêt định
NGUOI_KI_QD Text 30 Ngời kí QĐ
NGUON_KINH_PHI Text 20 Nguồn kinh phí
DV_CHINH Text 35 Đơn vị chính
DV_PHOI_HOP Text 35 Đơn vị phối hợp
Do DOAN và CAN_BO là quan hệ 2 chiều loại N@M do đó ngoài 2 tệp mô tả 2 thực thể này còn 1 tệp mô tả quan hệ nữa là CHUONG_TRINH_DI
Bảng CAN_BO có các trờng nh sau:
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
MA_CB Text 15 * Mã cán bộ
HO_TEN Text 50 Họ và tên cán bộ
NGAY_SINH Date time dd/mm/yyyy Ngày sinh
GIOI_TINH Yes/ No Giới tính
DON_VI Text 35 Đơn vị
CHUC_VU Text 20 Chức vụ
GHI_CHU Text 150 Ghi chú
- Bảng CHUONG_TRINH_DI là tệp mô tả quan hệ giữa bảng DOAN và CAN_BO
bảng có các trờng sau:
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
MA_QD Text 10 * Mã quyết định
MA_CB Text 15 * Mã cán bộ
NOI_DUNG Text 50 Nội dung
KET_QUA Text 50 Kết quả
-Bảng NUOC ( Nớc )
Do DOAN và NUOC là quan hệ 2 chiều loại N@M do đó ngoài 2 tệp mô tả 2 thực thể này còn 1 tệp mô tả quan hệ nữa là CHUYEN_DI
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
MA_NUOC Text 15 * Mã nớc
TEN_NUOC Text 20 Tên nớc
Bảng CHUYEN_DI là tệp mô tả quan hệ giữa bảng DOAN và NUOC bảng có các trờng sau:
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
MA_QD Text 10 * Mã quyết định
MA_NUOC Text 15 * Mã nớc
NGAY_DI Date/Time dd/mm/yyyy Ngày đi
NGAY_VE Date/Time dd/mm/yyyy Ngày về
TUYEN_BAY Text 35 Tuyến bay
DON_GIA_HT Currency Standard ($) Đơn giá hành
trình
- Bảng VISA(visa)
Bảng VISA nằm ở phía nhiều của mối quan hệ 1@N giữa CAN_BO và VISA vì vậy ta xây dung bảng VISA có các trờng sau:
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
MA_CB Text 15 Mã cán bộ
LOAI_VISA Text 25 Loại visa
NGAY_CAP Date time dd/mm/yyyy Ngày cấp
NGAY_HET_HAN Date time dd/mm/yyyy Ngày hết hạn
- Bảng HO_CHIEU (Hộ chiếu)
Bảng HO_CHIEU nằm ở phía nhiều của mối quan hệ 1@N giữa
CAN_BO và HO_CHIEU vì vậy ta xây dung bảng HO_CHIEU có các trờng sau:
Tên trờng Kiểu dữ liệu Độ lớn PK FK Mô tả
SO_HO_ CHIEU Number Long Integer * Số hộ chiếu
MA_CB Text 15 Mã cán bộ
LOAI_HO_CHIEU Text 25 Loại hộ chiếu
NGAY_CAP Date time dd/mm/yyyy Ngày cấp
NGAY_HET_HAN Date time dd/mm/yyyy Ngày hết hạn
THI_THUC Yes/No Có hay không đợc miễn
thị thực ?
4. Thiết kế thuật toán
a. Thuật toán cập nhật dữ liệu:bao gồm thêm, xoá, sửa đổi dữ liệu
- Thuật toán thêm dữ liệu mới Bắt đầu
Dữ liệu hợp lệ ?
Lưu vào bảng đang mở Thêm dữ liệu mới Mở bảng dữ liệu
Thông báo dữ liệu không hợp lệ Đ S Làm tươi dữ liệu Tiếp tục thêm dữ liệu S Đ
- Thuật toán xoá dữ liệu đã tồn tại:
Thông báo dữ liệu không thể xoá
Xoá dữ liệu đã chọn
Bắt đầu
Dữ liệu xoá hợp lệ?
Chọn dữ liệu cần xoá trên Form hiện thời
Yêu cầu xoá dữ liệu
Đ S Có chắc chắn xoá ? Đ S Có xóa tiếp không? Đ
- Thuật toán sửa dữ liệu đã tồn tại:
Thông báo dữ liệu không hợp lệ
Bắt đầu
Dữ liệu sửa hợp lệ?
Cập nhật thay đổi dữ liệu đã chọn sửa
Chọn, thực hiện sửa dữ liệu cần sửa trên Form hiện thời
Yêu cầu sửa dữ liệu
Đ S Có sửa tiếp không? S Đ
-Thuật toán tìm kiếm dữ liệu:
Bắt đầu
Yêu cầu hợp lệ? Mở nguồn dữ liệu
Nhập các yêu cầu tìm kiếm
Thông báo yêu cầu không hợp lệ
S
Thực hiện tìm kiếm dữ liệu trên nguồn đang mở
Đ
Thông báo kết quả tìm kiếm
Tìm thấy? Đ
S Thông báo không tìm thấy
Tìm tiếp ?
V. Thiết kế chơng trình.
1. Form đăng nhập chơng trình: Buộc ngời sử dụng phải biết password để vào đợc chơng trình.
2. Form chơng trình chính: Cho phép ngời dùng vào các chức năng chính của chơng trình nh hệ thống, cập nhật, tìm kiếm tra cứu, báo cáo, trợ giúp.
3.Form cập nhập đoàn: Chức năng thêm, xoá, sửa đổi thông tin về đoàn đi. Từ form này ta có thể cập nhật trực tiếp đến các form cập nhật khác nh: chơng trình đi, chuyến đi.
4. Form nhập chơng trình đi: Cho phéo thêm, sửa, xoá, các thông tin liên quan đến chơng trình đi của đoàn.
5. Form nhập chuyến đi: cho phép thêm, sửa, xoá các thông tin về chuyến đi
6. Form cập nhật hồ sơ cán bộ: với các chức năng thêm, sửa, xoá, thông tin về cán bộ trong đoàn.
7. Form tìm kiếm các thông tin về đoàn đi với các tiêu thức nh giới hạn ngày đầu, ngày cuối để tìm kiếm, mã quyết định của đoàn đi
9. Form tìm kiếm thông tin về đoàn theo các tiêu thức nh giới hạn thời gian đi của đoàn từ ngày đến ngày
10. Tìm kiếm chơng trình đi của một đoàn khi biết tên cán bộ đi trong đoàn đó
11 Tìm kiếm chơng trình đi của một đoàn khi biết nội dung mà đoàn đó đã đi làm gì
12. Form quản trị ngời dùng:
Kết luận
Việc đào tạo nguồn nhân lực là một yêu cầu cần thiết, tất yếu của bất kỳ một tổ chức kinh tế xã hội nào, cùng với sự phát triển không ngừng của thời đại công nghệ thông tin , của nền kinh tế toàn cầu, thì việc trao đổi học tập và đào tạo đã vợt ra ngoài khuôn khổ trong một nớc.
Chính vì hàng năm ngày càng có nhiều cán bộ ngành dân số đợc cử đi học nớc ngoài, nên vấn đề quản lý bằng máy các đoàn cán bộ đào tạo nớc ngoài là hết sức cần thiết, hơn thế nữa, việc giải quyết tốt bài toán còn góp phần cho việc tin học hóa quản lý hành chính nhà nớc của khối cơ quan hành chính thuộc chính phủ .
Việc xây dựng hệ thống thông tin phục vụ việc quản lý các đoàn cán bộ học tập và đào tạo nớc ngoài là một bài toán mang tính thực tế cao và có phạm vi ứng dụng không chỉ trong toàn bộ uỷ ban dân số gia đình và trẻ em, mà còn với các vụ, các bộ liên quan khác.
Tuy nhiên, do giới hạn về trình độ và thời gian nên đề tài này không tránh khỏi những thiếu sót, em rất mong đợc sự đóng góp ý kiến của các thầy cô giáo và các bạn để đề tài ngày càng hoàn thiện hơn.
Một lần nữa em xin bày tỏ lòng biết ơn chân thành tới thầy giáo- TS.Lê Văn Năm - ngời đã trực tiếp hớng dẫn em hoàn thành chuyên đề thực tập này. Em xin chân thành cảm ơn các cô, chú, anh, chị tại trung tâm thông tin đặc biệt là anh Phạm Vũ Hoàng - là ngời trực tiếp hớng dẫn em trong thời gian em thực tập tại Trung tâm thông tin – Uỷ ban dân số gia đình và trẻ em.
Phụ lục chơng trình
1. Mã lệnh xử lý form nhập quyết định ( form đoàn):
Option Explicit
Dim blThem As Boolean Dim Bmk
Private Sub cmchuongtrinhdi_Click() nhapchuongtrinhdi.Show
End Sub
Private Sub cmchuyendi_Click() frmnhapchuyendi.Show
End Sub
Private Sub thoat_Click() Unload Me
End Sub
Private Sub Khoa_DL() Me.them.Visible = True Me.sua.Visible = True Me.xoa.Visible = True Me.thoat.Visible = True Me.luu.Visible = False Me.boqua.Visible = False End Sub
Private Sub Mo_DL() Me.them.Visible = False Me.sua.Visible = False Me.xoa.Visible = False Me.thoat.Visible = False Me.luu.Visible = True
End Sub
Private Sub boqua_Click() If blThem = True Then Me.Adodc1.Refresh Else Me.Adodc1.Recordset.CancelUpdate Me.Adodc1.Recordset.MoveLast End If Khoa_DL Me.them.SetFocus blThem = False End Sub
Private Sub luu_Click() On Error GoTo LoiLuu
Me.dgrdoan.AllowAddNew = True Me.dgrdoan.AllowUpdate = True If Me.Text1.Text = "" Then
MsgBox "Mã quyết định không đợc trống! Bạn phải nhập lại hoặc bấm bỏ qua ", vbExclamation, "Chú ý"
Me.Text1.SetFocus
If Me.Text2.Text = "" Then
MsgBox "Ngày quyết định không đợc trống! Bạn phải nhập lại hoặc nhấn bỏ qua ", vbExclamation, "Chú ý"
Me.Text2.SetFocus End If
If Me.Text3.Text = "" Then
MsgBox " Ngời kí quyết định không đợc để trống! Bạn phải nhập lại hoặc bấm bỏ qua", vbExclamation, "Chú ý"
Me.Text3.SetFocus End If
Else Me.Adodc1.Recordset.Update Khoa_DL Me.Adodc1.Recordset.Requery Me.them.SetFocus blThem = False End If exitLuu: Exit Sub LoiLuu:
MsgBox "Dữ liệu không hợp lệ. Có thể trùng mã hoặc nhập sai quy cách ", , "Thông báo"
Resume exitLuu End Sub
Private Sub sua_Click() On Error GoTo LoiSua
Bmk = Me.Adodc1.Recordset.Bookmark Me.Text1.SetFocus Mo_DL blThem = False exitSua: Exit Sub LoiSua:
MsgBox Err.Description, vbCritical, "Có lỗi sửa dữ liệu" Resume exitSua
End Sub
Private Sub them_Click() On Error GoTo LoiThem
Me.Adodc1.Recordset.AddNew Mo_DL
Exit Sub LoiThem:
MsgBox Err.Description, vbCritical, "Có lỗi cập nhật dữ liệu" Resume exitThem
End Sub
Private Sub xoa_Click() On Error GoTo LoiXoa
If MsgBox("Bạn có chắc chắn muốn xoá quyết định " & Me.Adodc1.Recordset.Fields(0) _
& " cùng các mẩu tin liên quan không?", vbYesNo + vbQuestion, "Chú ý") = vbYes Then Me.Adodc1.Recordset.Delete adAffectCurrent Me.Adodc1.Recordset.Clone adLockOptimistic Me.Adodc1.Recordset.MoveNext If Me.Adodc1.Recordset.EOF Then Me.Adodc1.Recordset.MoveLast End If End If Me.Adodc1.Recordset.Requery exitXoa: Exit Sub LoiXoa:
MsgBox "Không thể xoá đợc" Resume exitXoa
End Sub
Private Sub Form_Load() Khoa_DL
End Sub
Private Sub Adodc1_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) On Error Resume Next
Me.Adodc1.Caption = "Bản ghi thứ: " &
CStr(Adodc1.Recordset.AbsolutePosition) & "/" & CStr(Adodc1.Recordset.RecordCount)
End Sub
Private Sub Text1_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.Text2.SetFocus
End Sub
Private Sub Text2_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.Text3.SetFocus
End Sub
Private Sub Text3_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.Text4.SetFocus
End Sub
Private Sub text4_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.Text5.SetFocus
End Sub
Private Sub Text5_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.Text6.SetFocus
End Sub
Private Sub text6_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.Text7.SetFocus
End Sub
Private Sub Text7_KeyPress(keyascii As Integer) If keyascii = 13 Then Me.luu.SetFocus
End Sub
Dim rs As New ADODB.Recordset 'Set rs = New ADODB.Recordset
sql = "select chuong_trinh_di.* from (chuong_trinh_di inner join can_bo on chuong_trinh_di.ma_cb = can_bo.ma_cb) "
sql = sql & " inner join doan on chuong_trinh_di.ma_qd=doan.ma_qd " sql = sql & " where can_bo.ho_ten='" & Trim(txtTen) & "'" & " And doan.DV_CHINH = '" & Trim(txtDVC) & "'"
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
Adodc1.RecordSource = sql
Adodc1.CommandType = adCmdText Adodc1.Refresh
rs.Open sql, Adodc1.ConnectionString, adOpenStatic txtSoDoan = rs.RecordCount
If rs.RecordCount < 1 Then
MsgBox "Không có đoàn nào có ngời mang tên " & txtTen & "!", vbInformation + vbOKOnly, "Thông báo!"
End If End Sub
Private Sub dong_Click() Unload Me
End Sub
Private Sub in_Click()
Dim sqlREFRESH As String Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset
sqlREFRESH = "select * from chuong_trinh_di "
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
Adodc1.RecordSource = sqlREFRESH Adodc1.CommandType = adCmdText
Adodc1.Refresh txtTen = "" txtSoDoan = "" txtDVC = "" txtTen.SetFocus End Sub
3. Mã lệnh xử lý form tìm kiếm theo chơng trình đi
Dim rs As New ADODB.Recordset Dim cmd As ADODB.Command Private Sub dong_Click()
Unload Me End Sub
Private Sub Form_Load() 'su kien form Load Dim ConnectionString As String
'tao ket noi CSDL
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
rs.Open "select distinct noi_dung from chuong_trinh_di", ConnectionString, adOpenKeyset, adLockBatchOptimistic
Do While Not rs.EOF
noidungdi.AddItem rs.Fields("noi_dung") rs.MoveNext
Loop rs.Close End Sub
Private Sub timkiem_Click() Dim ConnectionString As String Dim sql As String
Set cmd = New ADODB.Command
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
cmd.ActiveConnection = ConnectionString
cmd.CommandText = "SELECT * FROM chuong_trinh_di where noi_dung='" + noidungdi + "'"
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic With Adodc1
.RecordSource = "SELECT * FROM chuong_trinh_di where noi_dung='" + noidungdi + "'"
.ConnectionString = ConnectionString .Refresh 'tao nguon cho Ado End With
With DataGrid1
Set .DataSource = Adodc1 .Visible = True
.AllowUpdate = True .AllowDelete = False
.ForeColor = &H80000008 'thiet lap mau den End With
sodoan = rs.RecordCount rs.Close
End Sub
4. Mã lệnh xử lý form tìm kiếm theo đoàn
Dim rs As New ADODB.Recordset
Dim Check1 As Boolean, check2 As Boolean, check3 As Boolean, check4 As Boolean
Dim cmd As ADODB.Command Private Sub Combo1_Click() check3 = True
Private Sub denngay_Change() check2 = True
End Sub
Private Sub dong_Click() Unload Me
End Sub
Private Sub Form_Load() 'su kien form Load 'On Error Resume Next
Dim ConnectionString As String 'tao ket noi CSDL
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
rs.Open "doan", ConnectionString, adOpenKeyset, adLockBatchOptimistic With Adodc1
.RecordSource = "SELECT * FROM doan" .ConnectionString = ConnectionString .Refresh 'tao nguon cho Ado End With
Do While Not rs.EOF
Combo1.AddItem rs.Fields("ma_qd") rs.MoveNext
Loop rs.Close End Sub
Private Sub timkiem_Click() Dim ConnectionString As String Dim sql As String
On Error Resume Next 'bo qua loi thc thi cua Ado 'tao ket noi CSDL
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
cmd.ActiveConnection = ConnectionString sql = ""
Text5.Text = ""
If Check1 = True And check2 = True Then
sql = "NGAY_QD >=#" + Format(tungay, "dd/mm/yyyy") + "# and ngay_qd <=#" + Format(denngay, "dd/mm/yyyy") + "#"
End If
If Check1 = True And check2 = True And check3 = True Then
sql = "NGAY_QD >=#" + Format(tungay, "dd/mm/yyyy") + "# and ngay_qd <=#" + Format(denngay, "dd/mm/yyyy") + "# and ma_qd='" + Combo1 + "'" End If
If check3 = True Then
sql = "ma_qd='" + Combo1 + "'" End If
If Len(sql) = 0 Then
MsgBox "Bạn phải chọn điều kiện tìm ", vbOKOnly Else
cmd.CommandText = "SELECT * FROM doan where " & sql rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
With Adodc1
.RecordSource = "SELECT * FROM doan where " & sql .ConnectionString = ConnectionString
.Refresh 'tao nguon cho Ado End With
With DataGrid1
Set .DataSource = Adodc1 .Visible = True
.AllowUpdate = True .AllowDelete = False
.ForeColor = &H80000008 'thiet lap mau den End With
Check1 = False check2 = False check3 = False End If rs.Close End Sub
Private Sub tungay_Change() Check1 = True
End Sub
5. Mã lệnh xử lý form tìm kiếm theo nớc:
Dim rs As New ADODB.Recordset Dim cmd As ADODB.Command Private Sub dong_Click()
Unload Me End Sub
Private Sub Form_Load() 'su kien form Load Dim ConnectionString As String
'tao ket noi CSDL
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
rs.Open "nuoc", ConnectionString, adOpenKeyset, adLockBatchOptimistic With Adodc1
.RecordSource = "SELECT * FROM nuoc " .ConnectionString = ConnectionString .Refresh 'tao nguon cho Ado End With
Do While Not rs.EOF
Combo1.AddItem rs.Fields("ten_nuoc") rs.MoveNext
End Sub
Private Sub timkiem_Click() Dim ConnectionString As String
On Error Resume Next 'bo qua loi thc thi cua Ado 'tao ket noi CSDL
Set rs = New ADODB.Recordset Set cmd = New ADODB.Command
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
cmd.ActiveConnection = ConnectionString cmd.CommandText = "SELECT doan.ma_qd
,doan.ngay_qd,doan.nguoi_ki_qd,doan.nguon_kinh_phi,doan.dv_chinh,doan.dv_p hoi_hop,doan.so_nguoi FROM doan,nuoc,chuyen_di where
doan.ma_qd=chuyen_di.ma_qd and nuoc.ma_nuoc=chuyen_di.ma_nuoc and nuoc.ten_nuoc='" + Combo1 + "'"
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic With Adodc1
.RecordSource = "SELECT
doan.ma_qd,doan.ngay_qd,doan.nguoi_ki_qd,doan.nguon_kinh_phi,doan.dv_chin h,doan.dv_phoi_hop,doan.so_nguoi FROM doan,nuoc,chuyen_di where
doan.ma_qd=chuyen_di.ma_qd and nuoc.ma_nuoc=chuyen_di.ma_nuoc and nuoc.ten_nuoc='" + Combo1 + "'"
.ConnectionString = ConnectionString .Refresh 'tao nguon cho Ado End With
With DataGrid1
Set .DataSource = Adodc1 .Visible = True
.AllowUpdate = True .AllowDelete = False
.ForeColor = &H80000008 'thiet lap mau den End With
sodoan = rs.RecordCount End Sub
6. Form tìm kiếm theo chuyến đi:
Dim rs As ADODB.Recordset Dim cmd As ADODB.Command Private Sub dong_Click()
Unload Me End Sub
Private Sub Form_Load() 'su kien form Load Dim ConnectionString As String
'tao ket noi CSDL
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
With Adodc1
.RecordSource = "SELECT * FROM chuyen_di " .ConnectionString = ConnectionString
.Refresh 'tao nguon cho Ado End With
End Sub
Private Sub timkiem_Click()
On Error Resume Next 'bo qua loi thc thi cua Ado 'tao ket noi CSDL
'khoidong
Set cmd = New ADODB.Command Set rs = New ADODB.Recordset Dim ConnectionString As String
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BaitapVB\DOAN DI -VB\csdl\QUANLYDOAN.mdb;Persist Security Info=False"
cmd.ActiveConnection = ConnectionString
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic With Adodc1
.RecordSource = "SELECT * FROM chuyen_di where ngay_di >='" + Format(ngaydi, "dd/mm/yyyy") + "' and ngay_ve<='" + Format(ngayve, "dd/mm/yyyy") + "'"
.RecordSource = "SELECT * FROM chuyen_di where ngay_di >=#" + Format(ngaydi, "dd/mm/yyyy") + "# and ngay_ve<=#" + Format(ngayve, "dd/mm/yyyy") + "#"
.ConnectionString = ConnectionString .Refresh 'tao nguon cho Ado End With
With DataGrid1
Set .DataSource = Adodc1 .Visible = True
.AllowAddNew = True .AllowUpdate = True .AllowDelete = False
.ForeColor = &H80000008 'thiet lap mau den '.Top = 2880 'vi tri cua dtaGrid
'.Height = 1335 'chiau cao cua DataGrid