-
DeMo CommandButton
Xuân Thanh > 25-07-18, 10:42 AM
Đã có rất nhiều bài viết trên TTAC bàn về các Command Button treen Form Access nhưng vẫn có bạn thắc mắc về cách thiết kế và các lệnh thực thi của nó. Hôm nay tôi gửi các bạn bản Demo này để các bạn tham khảo
Một số vấn đề cần chú ý trong Demo
1/ Trong một Form của dự án Access luôn luôn có 9 Command : Đầu(cmdDau), Trước(cmdTruoc), Sau(cmdsau), Cuối(cmdCuoi), Thêm(cmdThem), Sửa(cmdSua), Lưu(cmdLuu), Xóa(cmdXoa) và Thoát(cmdThoat)
2/ Toàn bộ các lệnh đều được viết trong modul của dự án để dùng chung cho tất cả các Form và trong Form sẽ gọi lệnh tù modul
Ví dụ Hàm VeTruoc trong modul được viết thế này
Mã PHP:Public Function VeTruoc()
On Error GoTo Err_VeTruoc
Application.DoCmd.GoToRecord , , acPrevious
Exit_VeTruoc:
Exit Function
Err_VeTruoc:
MsgBox "Day la mau tin dau"
Resume Exit_VeTruoc
End Function
Thì trong Form nút lệnh cho cmdTruoc nhu sau
Mã PHP:Private Sub cmdTruoc_Click()
Call VeTruoc
End Sub
3/ Khi Fỏm Active thì toàn bộ các TextBox se bị Locked bằng hàm Locktxt như sau
Mã PHP:Public Function Locktxt(frmName As Form)
Dim cnt As Control
For Each cnt In frmName.Controls
If TypeName(cnt) = "TextBox" Then
cnt.Locked = True
End If
Next
End Function
Chỉ khi nào thêm mới hoặc chỉnh sửa mới cho UnLocked bằng hàm Unlocktxt
Mã PHP:Public Function UnLocktxt(frmName As Form)
Dim cnt As Control
For Each cnt In frmName.Controls
If TypeName(cnt) = "TextBox" Then
cnt.Locked = False
End If
Next
End Function
(Nếu thêm combobox hoặc các control khác, các bạn viết thêm vào)
4/ Có thể set ngay RecordSource cho form và ControlSource cho các textbox trên form ngay khi thiết kế hoặc set bằng VBA như trong Demo
5/ Trong Demo sử dụng cmdLuu thay cho cả hai trường hợp là khi Thêm mới hoặc Chỉnh sửa băng tham số n ở đầu modul(n=1 thì thêm, n=2 thì sửa) và Lưu hoặc Không Lưu(Hủy) bằng lệnh MsgBox chứa 2 tham số Yes và No. Nếu người dùng nhấn Yes thì Lưu và nhấn No thì Hủy. Khi nhập mới có kiểm tra trùng mã khóa chính
6/ Các vấn đè khác các bạn xem Demo đính kèm
Toàn bộ code trong modul được viết như sau
Mã PHP:Option Compare Database
Option Explicit
Dim n As Integer
Public Function VeDau()
Application.DoCmd.GoToRecord , , acFirst
End Function
Public Function VeTruoc()
On Error GoTo Err_VeTruoc
Application.DoCmd.GoToRecord , , acPrevious
Exit_VeTruoc:
Exit Function
Err_VeTruoc:
MsgBox "Day la mau tin dau"
Resume Exit_VeTruoc
End Function
Public Function VeSau()
On Error GoTo Err_VeSau
Application.DoCmd.GoToRecord , , acNext
Exit_VeSau:
Exit Function
Err_VeSau:
MsgBox "Day la mau tin cuoi"
Call VeDau
Resume Exit_VeSau
End Function
Public Function VeCuoi()
Application.DoCmd.GoToRecord , , acLast
End Function
Public Function Locktxt(frmName As Form)
Dim cnt As Control
For Each cnt In frmName.Controls
If TypeName(cnt) = "TextBox" Then
cnt.Locked = True
End If
Next
End Function
Public Function UnLocktxt(frmName As Form)
Dim cnt As Control
For Each cnt In frmName.Controls
If TypeName(cnt) = "TextBox" Then
cnt.Locked = False
End If
Next
End Function
Public Function Them(frmName As Form)
n = 1
Call UnLocktxt(frmName)
Call ThemEn(frmName)
End Function
Public Function Luu(frmName As Form, TabName As String, Ma As String)
Dim Ans
Ans = MsgBox("Ban muon luu mau tin nay?", vbYesNo, "Luu hay khong")
If Ans <> vbYes Then
frmName.Undo
Call LuuEn(frmName)
Else
If n = 1 Then
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(TabName, dbOpenTable)
rs.Index = "PrimaryKey"
rs.Seek "=", Ma
If Not rs.NoMatch Then
MsgBox "Trung Ma", , "Chu y"
Exit Function
Else
Call LuuEn(frmName)
End If
Else
Call LuuEn(frmName)
End If
End If
frmName.Requery
Call Locktxt(frmName)
End Function
Public Function Sua(frmName As Form)
n = 2
Call UnLocktxt(frmName)
frmName.cmdThem.Enabled = False
frmName.cmdXoa.Enabled = False
frmName.cmdDau.Enabled = False
frmName.cmdTruoc.Enabled = False
frmName.cmdSau.Enabled = False
frmName.cmdCuoi.Enabled = False
frmName.cmdLuu.SetFocus
frmName.cmdSua.Enabled = False
End Function
Public Function LuuEn(frmName As Form)
frmName.cmdSua.Enabled = True
frmName.cmdXoa.Enabled = True
frmName.cmdDau.Enabled = True
frmName.cmdTruoc.Enabled = True
frmName.cmdSau.Enabled = True
frmName.cmdCuoi.Enabled = True
frmName.cmdThem.Enabled = True
End Function
Public Function ThemEn(frmName As Form)
frmName.cmdSua.Enabled = False
frmName.cmdXoa.Enabled = False
frmName.cmdDau.Enabled = False
frmName.cmdTruoc.Enabled = False
frmName.cmdSau.Enabled = False
frmName.cmdCuoi.Enabled = False
frmName.cmdLuu.SetFocus
frmName.cmdThem.Enabled = False
End Function
Public Function LoadForm(frmName As Form, TabName As String)
frmName.RecordSource = TabName
Call Locktxt(frmName)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(TabName, dbOpenTable)
If rs.RecordCount = 0 Then
frmName.cmdSua.Enabled = False
frmName.cmdXoa.Enabled = False
frmName.cmdDau.Enabled = False
frmName.cmdTruoc.Enabled = False
frmName.cmdSau.Enabled = False
frmName.cmdCuoi.Enabled = False
End If
End Function
Public Function Xoa(frmName As Form, TabName As String, Ma As String)
Dim Ans
Ans = MsgBox("That su muon xoa mau tin nay?", vbYesNo, "Xoa Hay Khong")
If Ans = vbYes Then
DoCmd.SetWarnings (False)
Application.RunCommand acCmdDeleteRecord
MsgBox "Da xoa xong"
DoCmd.SetWarnings (True)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(TabName, dbOpenTable)
If rs.RecordCount = 0 Then
frmName.cmdSua.Enabled = False
frmName.cmdXoa.Enabled = False
frmName.cmdDau.Enabled = False
frmName.cmdTruoc.Enabled = False
frmName.cmdSau.Enabled = False
frmName.cmdCuoi.Enabled = False
Else
frmName.Repaint
Call VeDau
End If
Else
frmName.Repaint
Call VeDau
End If
End Function
Public Function ThoatForm(frmName As Form)
Application.DoCmd.Close
End Function
Và code cho frmKhachHang(Ví dụ cho một form)
Mã PHP:Option Compare Database
Option Explicit
Private Sub cmdCuoi_Click()
Call VeCuoi
End Sub
Private Sub cmdDau_Click()
Call VeDau
End Sub
Private Sub cmdLuu_Click()
Call Luu(Me, "tblKhachHang", Me.txtMa)
End Sub
Private Sub cmdSau_Click()
Call VeSau
End Sub
Private Sub cmdSua_Click()
Call Sua(Me)
End Sub
Private Sub cmdThem_Click()
Call Them(Me)
DoCmd.GoToRecord , , acNewRec
End Sub
Private Sub cmdThoat_Click()
Call ThoatForm(Me)
End Sub
Private Sub cmdTruoc_Click()
Call VeTruoc
End Sub
Private Sub cmdXoa_Click()
Call Xoa(Me, "tblKhachHang", Me.txtMa)
End Sub
Private Sub Form_Load()
Call LoadForm(Me, "tblKhachHang")
Me.txtMa.ControlSource = "MaKhach"
Me.txtTen.ControlSource = "TenKhach"
End Sub
Bản Demo viết vội chưa test kỹ. các bạn nhớ kiểm tra lại
Thân mến