Nguyen SVN > 04-12-19, 03:42 PM
Option Compare Database
Option Explicit
'----------------------------------------------------------------------------------------
'---・CREATE : 2019/11/16 12:30 Nguyen
'----------------------------------------------------------------------------------------
'****************************************************************************************
' Event Definition
'****************************************************************************************
'----------------------------------------------------------------------------------------
' Close Button
'----------------------------------------------------------------------------------------
'---BeforeClose
Public Event BeforeClose(Cancel As Integer)
'----------------------------------------------------------------------------------------
' Delete Button
'----------------------------------------------------------------------------------------
'---BeforeDelete
Public Event BeforeDelete(Cancel As Integer)
'---AfterDelete
Public Event AfterDelete()
'---ErrorDelete
Public Event ErrorDelete(Number As Long, Description As String)
'****************************************************************************************
' Variables
'****************************************************************************************
'----------------------------------------------------------------------------------------
' Property
'----------------------------------------------------------------------------------------
'---Form
Private Form_ As ClsContinuousForms
'---CloseButton
Private WithEvents CloseButton_ As ClsCloseButton
'---DeleteButton
Private WithEvents DeleteButton_ As ClsDeleteButton
'---Authority Mode
Private authMode_ As String
'---Authority
Private authority_ As String
'---AuthorityFRM
Private authFrm_ As String
'---AuthorityCTL
Private authCtl_ As String
'****************************************************************************************
' Property
'****************************************************************************************
'---Form
Property Get Form() As ClsContinuousForms
Set Form = Form_
End Property
'---CloseButton
Property Get CloseButton() As ClsCloseButton
Set CloseButton = CloseButton_
End Property
'---DeleteButton
Property Get DeleteButton() As ClsDeleteButton
Set DeleteButton = DeleteButton_
End Property
'---Authority Mode
Property Let AuthMode(value As String)
authMode_ = value
End Property
'---Authority
Property Get Authority() As String
Authority = authority_
End Property
'---AuthorityFRM
Property Let AuthFrm(value As String)
authFrm_ = value
End Property
'---AuthorityCTL
Property Let AuthCtl(value As String)
authCtl_ = value
End Property
'****************************************************************************************
' Constructor
'****************************************************************************************
Private Sub Class_Initialize()
' Default Value Property
Set Form_ = New ClsContinuousForms
Set CloseButton_ = New ClsCloseButton
Set DeleteButton_ = New ClsDeleteButton
authMode_ = "01"
authority_ = "1"
End Sub
'****************************************************************************************
' Event
'****************************************************************************************
'----------------------------------------------------------------------------------------
' CloseButton
'----------------------------------------------------------------------------------------
'---BeforeClose
Private Sub CloseButton__BeforeClose(Cancel As Integer)
RaiseEvent BeforeClose(Cancel)
End Sub
'----------------------------------------------------------------------------------------
' CloseButton
'----------------------------------------------------------------------------------------
'---BeforeDelete
Private Sub DeleteButton__BeforeDelete(Cancel As Integer)
RaiseEvent BeforeDelete(Cancel)
End Sub
'---AfterDelete
Private Sub DeleteButton__AfterDelete()
RaiseEvent AfterDelete
End Sub
'---Error Delete
Private Sub DeleteButton__ErrorDelete(Number As Long, Description As String)
RaiseEvent ErrorDelete(Number, Description)
End Sub
'****************************************************************************************
' Sub Function
'****************************************************************************************
'---Bind
Public Sub Bind(Frm As Access.Form)
Form_.Bind Frm
CloseButton_.Bind Frm
DeleteButton_.Bind Frm
' 'Authority
' If Nz(authFrm_) <> "" And Nz(authCtl_) <> "" Then
' authority_ = MOD_Authority.RetAuthorityLV(authFrm_, authCtl_, False)
' Select Case authMode_
' Case "01"
' Call MOD_Authority.ReflectFRM(Frm, authority_)
' Case "02"
' 'do nothing
' Case "03"
' Call MOD_Authority.ReflectFRM03(Frm, authority_)
' Case "SUB"
' Call MOD_Authority.ReflectFRMSUB(Frm, authority_)
' End Select
' End If
End Sub
Option Compare Database
Option Explicit
'----------------------------------------------------------------------------------------
'---・CREATE : 2019/11/16 12:30 Nguyen
'----------------------------------------------------------------------------------------
'****************************************************************************************
' Event Definition
'****************************************************************************************
'----------------------------------------------------------------------------------------
' Delete Button
'----------------------------------------------------------------------------------------
'---BeforeDelete
Public Event BeforeDelete(Cancel As Integer)
'---AfterDelete
Public Event AfterDelete()
'---ErrorDelete
Public Event ErrorDelete(Number As Long, Description As String)
'****************************************************************************************
' Variables
'****************************************************************************************
'----------------------------------------------------------------------------------------
' Property
'----------------------------------------------------------------------------------------
'---Delete Button
Private WithEvents DeleteButton_ As ClsDeleteButton
'---Authority
Private authority_ As String
'---Authority FRM
Private authFrm_ As String
'---Authority CTL
Private authCtl_ As String
'****************************************************************************************
' Property
'****************************************************************************************
'---Delete Button
Property Get DeleteButton() As ClsDeleteButton
Set DeleteButton = DeleteButton_
End Property
'---Authority
Property Get Authority() As String
Authority = authority_
End Property
'---Authority FRM
Property Let AuthFrm(value As String)
authFrm_ = value
End Property
'---Authority CTL
Property Let AuthCtl(value As String)
authCtl_ = value
End Property
'****************************************************************************************
' Constructor
'****************************************************************************************
Private Sub Class_Initialize()
' Default Value Property
Set DeleteButton_ = New ClsDeleteButton
authority_ = "1"
End Sub
'****************************************************************************************
' Event
'****************************************************************************************
'----------------------------------------------------------------------------------------
' Delete Button
'----------------------------------------------------------------------------------------
'---Before Delete
Private Sub DeleteButton__BeforeDelete(Cancel As Integer)
RaiseEvent BeforeDelete(Cancel)
End Sub
'---AfterDelete
Private Sub DeleteButton__AfterDelete()
RaiseEvent AfterDelete
End Sub
'---Error Delete
Private Sub DeleteButton__ErrorDelete(Number As Long, Description As String)
RaiseEvent ErrorDelete(Number, Description)
End Sub
'****************************************************************************************
' Sub Function
'****************************************************************************************
'---Bind
Public Sub Bind(Frm As Access.Form)
DeleteButton_.Bind Frm
' 'Authority
' If Nz(authFrm_) <> "" And Nz(authCtl_) <> "" Then
' authority_ = MOD_Authority.RetAuthorityLV(authFrm_, authCtl_, False)
' Call MOD_Authority.ReflectFRMSUB(Frm, authority_)
' End If
End Sub
ongke0711 > 04-12-19, 03:47 PM
Nguyen SVN > 04-12-19, 04:20 PM
(04-12-19, 03:47 PM)ongke0711 Đã viết: - Chức năng, công dụng của Class này là gì?
- Bạn nên đưa demo ứng dụng của class này để mọi người dễ hình dung, thử nghiệm tác dụng của nó. Chứ nhìn code đoán ý mất thời gian lắm.
ongke0711 > 04-12-19, 07:42 PM
(04-12-19, 04:20 PM)Nguyen SVN Đã viết: muc dich em viet nhằm giảm bớt lượng code cho việc xóa , đóng vvvv cho form nhìn cho đỡ dối mắt thôi ak.
ngoài ra thêm cả tính năng phân quyền sử dụng nữa ạ
thật ra là em cũng chưa hoàn thiện hết ạ, lên chưa demo dc ngay.
còn vài cái class như tự tính chiều cao của form, số lượng dòng hiển thị trong 1 form, đóng , xóa vẫn chua xong hết
AnNguyen > 05-12-19, 09:00 AM
(04-12-19, 07:42 PM)ongke0711 Đã viết: Ví dụ:Em cũng rất muốn viết class nhưng em chưa hiểu lắm với lại code của em cứ mỗi form lại 1 kiểu thêm,xóa,sửa khác nhau nên em cũng không biết chế biến thế nào ạ.
Code cho nút [Xoá]:
- Trước khi Xoá một dòng dữ liệu nào đó tôi thường có code để check xem đã có dữ liệu liên quan đến record đó chưa, nếu có rồi thì không cho xoá và ngược lại.
- Sau khi Xoá xong thì có thể sẽ phải Requery dữ liệu cho một Combobox, Listbox hay một Form nào đó trước đó để cập nhật. Vụ này cũng tương tự cho nút [Lưu]. Ví dụ: khi tôi đang nhập liệu cho Form hồ sơ nhân viên thì phát hiện "dân tộc" của người này chưa có trong danh sách combobox -> mở form Dân tộc để thêm dân tộc mới vào -> Lưu -> Requery cái comboBox của Form hồ sơ nhân sự đang nhập trước đó.
Ý kiến cá nhân tôi là vậy. Nên tập trung code cho nhưng cái nào có thể ứng dụng thực tế cho đỡ phí thời gian.
Nguyen SVN > 05-12-19, 11:47 AM
(04-12-19, 07:42 PM)ongke0711 Đã viết:(04-12-19, 04:20 PM)Nguyen SVN Đã viết: muc dich em viet nhằm giảm bớt lượng code cho việc xóa , đóng vvvv cho form nhìn cho đỡ dối mắt thôi ak.
ngoài ra thêm cả tính năng phân quyền sử dụng nữa ạ
thật ra là em cũng chưa hoàn thiện hết ạ, lên chưa demo dc ngay.
còn vài cái class như tự tính chiều cao của form, số lượng dòng hiển thị trong 1 form, đóng , xóa vẫn chua xong hết
Một số ý kiến cá nhân là:
- Nếu là tôi thì tôi không viết Class cho mấy cái nút lệnh.
- Class phân quyền, định vị trí form, chiều cao/ rộng của Form thì rất OK để viết.
Lý do:
- Trong thực tế thiết kế các Form của tôi, các nút lênh cơ bản như: Mở, Đóng, Xoá v... nó cũng có nhiều tuỳ biến theo ngữ cảnh của Form chứ không đơn giản là Docmd.Close, Docmd.RunCommand acCmdDelete v.v..
- Nhiều tuỳ biến thì bạn không thể đưa hết vô class được, nêu đưa vô thì class cũng nặng nề lắm.
- Bạn chỉ nên thiết kế class cho các đối tượng nào có thể là không thay đổi khi qua bất kỳ Form nào.
Ví dụ:
Code cho nút [Xoá]:
- Trước khi Xoá một dòng dữ liệu nào đó tôi thường có code để check xem đã có dữ liệu liên quan đến record đó chưa, nếu có rồi thì không cho xoá và ngược lại.
- Sau khi Xoá xong thì có thể sẽ phải Requery dữ liệu cho một Combobox, Listbox hay một Form nào đó trước đó để cập nhật. Vụ này cũng tương tự cho nút [Lưu]. Ví dụ: khi tôi đang nhập liệu cho Form hồ sơ nhân viên thì phát hiện "dân tộc" của người này chưa có trong danh sách combobox -> mở form Dân tộc để thêm dân tộc mới vào -> Lưu -> Requery cái comboBox của Form hồ sơ nhân sự đang nhập trước đó.
Ý kiến cá nhân tôi là vậy. Nên tập trung code cho nhưng cái nào có thể ứng dụng thực tế cho đỡ phí thời gian.
ongke0711 > 05-12-19, 12:07 PM
(05-12-19, 11:47 AM)Nguyen SVN Đã viết: công nhận vs anh là nếu chỉ có mỗi xóa vs đóng không thì ko dùng class.
tất nhiên cũng có nhiều form vs subform phức tạp liên kết vs nhau việc xóa dữ liệu không đơn giản chỉ là 1 dòng DOCMD là xong ngay dc.
anh thử tưởng tượng xem nếu 1 cái hệ thống nó dc tích hợp sẵn class phân quyền , xóa , đóng , mở, tính chiều cao , số lượng dòng hiển thị vvvv gộp hết vào 1 sự kiện mở form thì có phải code ngắn và nhìn thoáng và tiết kiệm thời gian đi bao nhiêu không ?