Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Thủ Thuật] DeMo CommandButỏ
#1
Đã 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 FormTabName As StringMa 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 1 Then
            Dim rs 
As Recordset
            Set rs 
CurrentDb.OpenRecordset(TabNamedbOpenTable)
            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 FormTabName As String)
    frmName.RecordSource TabName
    Call Locktxt
(frmName)
    Dim rs As Recordset
    Set rs 
CurrentDb.OpenRecordset(TabNamedbOpenTable)
    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 FormTabName As StringMa 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(TabNamedbOpenTable)
        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


File đính kèm
.zip   DeMo CommandButton.zip (Kích cỡ: 35.19 KB / Tải về: 25)
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn ongke0711 , huuduy.duy , DooHoaangPhuuc


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Thủ Thuật] Demo Hàm report tự canh đều chiều cao ( Không kẻ line)) maidinhdan 77 15,491 07-11-18, 09:07 PM
Bài mới nhất: mrtoanbin
  [Thủ Thuật] Demo Tổng hợp tất cả các kiểu thông báo tiếng việt trong Access maidinhdan 39 8,469 22-09-18, 12:40 PM
Bài mới nhất: NguyenDungAnh
  [Hàm] [Demo] Hàm kiểm tra IP tắt hay mở maidinhdan 10 2,419 26-07-18, 04:27 PM
Bài mới nhất: Cuong Servenet
  Xin file demo theo yêu cầu, tùy biến các query theo câu lệnh SQL Đình Phán 12 1,849 19-08-17, 07:08 AM
Bài mới nhất: cpucloi
  Class ADO - Kết nối SQL Server (Demo) ongke0711 7 2,082 11-06-17, 12:17 PM
Bài mới nhất: tieu_ngao

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line