ongke0711 > 17-03-20, 02:02 PM
Option Compare Database
Option Explicit
Dim arrArgs() As String
Private Sub cmdClose_Click()
Set WS = Nothing 'Phai dóng WS, neu không Access không thoát hoan toàn.
DoCmd.Close
End Sub
Private Sub cmdHuy_Click()
WS.Rollback
WS.BeginTrans
Me.Refresh 'Tránh báo lõi #name khi click nhieu lan.
End Sub
Private Sub cmdLuu_Click()
WS.CommitTrans
SetFormState False
Me.Recalc 'De AllowEdit có tác dung
'Requery các form liên quan
Select Case arrArgs(2)
Case "frmDSPhieuNhapXuat"
Forms!frmDSPhieuNhapXuat!sfmDSPhieuNX.Requery
Case Else
'do nothing
End Select
End Sub
Private Sub cmdThem_Click()
'Xu ly WS de tranh loi khi them moi.
If Me.cmdLuu.Enabled = True Then
If msgBoxUni("B" & ChrW(7841) & "n có mu" & ChrW(7889) & "n L" & ChrW(432) & "u d" & ChrW(7919) & " li" & ChrW(7879) & "u hi" & ChrW(7879) & "n t" & ChrW(7841) & "i tr" & ChrW(432) & ChrW(7899) & "c khi m" & ChrW(7903) & " phi" & ChrW(7871) & "u m" & ChrW(7899) & "i?", vbQuestion + vbYesNo, "Thông báo") = vbYes Then
WS.CommitTrans 'Phai ket thuc phiên Transaction cu, moi gan rs cho subF duoc.
Else
WS.Rollback
End If
End If
arrArgs(0) = "Add"
NapPhieuNhap
SetFormState True
End Sub
Private Sub Form_Load()
Set WS = DBEngine.Workspaces(0)
If Len(Nz(Me.OpenArgs, "")) > 0 Then
arrArgs = Split(Me.OpenArgs, "|")
Else 'Mo tu Menu
ReDim arrArgs(0 To 2) As String
arrArgs(0) = "Add"
arrArgs(1) = ""
arrArgs(2) = ""
End If
NapPhieuNhap
End Sub
Sub NapPhieuNhap()
Dim db As DAO.Database
'Dim rs As DAO.Recordset, rs2 As DAO.Recordset '-->Khai báo toàn cuc
Dim strSQL As String, strSQL2 As String
Set db = CurrentDb
Select Case arrArgs(0)
Case "Add"
strSQL = "SELECT * FROM tblNhapXuat WHERE 1=2"
strSQL2 = "SELECT 'Xóa' As Xoa,* FROM tblNhapXuat_CT WHERE 1=2"
Case "Edit"
strSQL = "SELECT * FROM tblNhapXuat WHERE ID=" & arrArgs(1)
strSQL2 = "SELECT 'Xóa' As Xoa, * FROM tblNhapXuat_CT WHERE IDPhieu=" & arrArgs(1)
End Select
Set rs = Nothing 'Tránh lõi khi gán rs moi, khi chon dòng khác - Sua
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
Set Me.Recordset = rs
Set rs2 = Nothing
Set rs2 = db.OpenRecordset(strSQL2, dbOpenDynaset)
If rs2.BOF And rs2.EOF Then
'Bãy lôi khi mo recordset thêm moi. Chua có du lieu de MoveLast.
Else
rs2.MoveLast 'Phai activate rs2 de lay toàn bo record gán vào SubF, neu không se treo ung dung.
End If
Set Me.sfmNhapXuatCT.Form.Recordset = rs2
WS.BeginTrans
End Sub
Sub SetFormState(blnState As Boolean)
Me.cmdClose.SetFocus
Me.cmdLuu.Enabled = blnState
Me.cmdHuy.Enabled = blnState
Me.cmdThem.Enabled = blnState
Me.AllowEdits = blnState
Me.cmdThem.Enabled = Not blnState
Me.sfmNhapXuatCT.Locked = Not blnState
End Sub
dotrung > 23-03-20, 06:37 PM
ongke0711 > 01-04-20, 01:35 AM
Option Compare Database
Option Explicit
Function GetRecord(rs As DAO.Recordset, frm As Form)
On Error GoTo ErrHandler
Dim fld As Field
Dim ctl As control
For Each fld In rs.Fields
For Each ctl In frm.Controls
If ctl.Name = "txt" & fld.Name Or ctl.Name = "cbo" & fld.Name Or ctl.Name = "chk" & fld.Name Or ctl.Name = "fra" & fld.Name Then
ctl = rs.Fields("" & fld.Name & "").Value
ElseIf ctl.Name = "img" & fld.Name Then
If Not IsNull(rs.Fields("" & fld.Name & "").Value) Then
On Error Resume Next
ctl.Picture = CStr(rs.Fields("" & fld.Name & "").Value)
End If
End If
Next
Next
'rs.Close '-> Không close, de tái su dung cho hàm Update/Add trong form
'Set rs = Nothing'
Exit Function
Exit_ErrHandler:
On Error Resume Next
rs.Close
Set rs = Nothing
Exit Function
ErrHandler:
msgBoxUni "Mã l" & ChrW(7895) & "i: " & Err.Number & vbCrLf _
& "N" & ChrW(7897) & "i dung l" & ChrW(7895) & "i: " & Err.Description, vbCritical, "Get Record Error"
Resume Exit_ErrHandler
End Function
Function AddRecord(rs As DAO.Recordset, frm As Form)
On Error GoTo ErrHandler
Dim fld As Field
Dim ctl As control
rs.AddNew
For Each fld In rs.Fields
For Each ctl In frm.Controls
If ctl.Name = "txt" & fld.Name Or ctl.Name = "cbo" & fld.Name Or ctl.Name = "chk" & fld.Name Then
rs.Fields("" & fld.Name & "").Value = ctl
End If
Next
Next
rs.Update
'rs.Close
'Set rs = Nothing
Exit Function
Exit_ErrHandler:
On Error Resume Next
rs.Close
Set rs = Nothing
Exit Function
ErrHandler:
msgBoxUni "L" & ChrW(432) & "u d" & ChrW(7919) & " li" & ChrW(7879) & "u th" & ChrW(7845) & "t b" & ChrW(7841) & "i." & vbCrLf & vbCrLf _
& "Mã l" & ChrW(7895) & "i: " & Err.Number & vbCrLf _
& "N" & ChrW(7897) & "i dung l" & ChrW(7895) & "i: " & Err.Description, vbCritical, "Add Record Error"
Resume Exit_ErrHandler
End Function
Function UpdateRecord(rs As DAO.Recordset, frm As Form)
On Error GoTo ErrHandler
Dim fld As Field
Dim ctl As control
rs.Edit
For Each fld In rs.Fields
For Each ctl In frm.Controls
If ctl.Tag Like "no" Then
'do nothing'
Else
If ctl.Name = "txt" & fld.Name Or ctl.Name = "cbo" & fld.Name Or ctl.Name = "chk" & fld.Name Then
rs.Fields("" & fld.Name & "").Value = ctl
End If
End If
Next ctl
Next fld
rs.Update
'fMsgBox getMes(26), vbInformation, getTit(1)'
'rs.Close
'Set rs = Nothing
Exit Function
Exit_ErrHandler:
On Error Resume Next
rs.Close
Set rs = Nothing
Exit Function
ErrHandler:
msgBoxUni "L" & ChrW(432) & "u d" & ChrW(7919) & " li" & ChrW(7879) & "u th" & ChrW(7845) & "t b" & ChrW(7841) & "i." & vbCrLf & vbCrLf _
& "Mã l" & ChrW(7895) & "i: " & Err.Number & vbCrLf _
& "N" & ChrW(7897) & "i dung l" & ChrW(7895) & "i: " & Err.Description, vbCritical, "Update Record Error"
Resume Exit_ErrHandler
End Function
Public Sub ClearRecord(frm As Form)
Dim ctl As control
For Each ctl In frm.Controls
If ctl.Tag Like "no" Then
'do nothing'
Else
Select Case ctl.ControlType
Case acTextBox, acComboBox
ctl.Value = ""
Case acCheckBox
ctl.Value = False
Case acImage
ctl.Picture = ""
Case Else
'do nothing'
End Select
End If
Next
End Sub
dotrung > 01-04-20, 10:29 PM
huuduy.duy > 16-04-20, 04:10 PM
(01-04-20, 01:35 AM)ongke0711 Đã viết: -----------------------------------------------------------------------------------------
Phần 2: Unbound Form với thiết kế kiểu Main - Subform
Do yêu cầu công việc phải chọn nhiều nhân viên từ Danh sách nhân viên chung, nên em thay Subform thành Listbox để chọn nhân viên qua lại giữ 2 Listbox.
Phần Form Phiếu Yêu cầu đào tạo: sẽ cập nhật thông tin như:
1/ Người yêu cầu, nội dung yêu cầu, Thời gian đào tạo, Nơi đào tạo, .. cập nhật vào bảng tblPhieuYeuCau
2/ Mỗi phiếu Yêu cầu như vậy sẽ chọn ra danh sách nhân viên từ 1 danh sách nhân viên chung của Cty cần đào tạo theo nội dung đó và ghi bảng tblNhanVienDaDaoTao.
Em lầm đến đoạn gọi Phiếu Yêu cầu lên để bổ sung thêm nhân viên cần đào tạo thì bị lỗi. Nhờ anh xem giúp
Trân trọng cảm ơn
Link
** Ngoài cách sử dụng Listbox, thì mình có thể sủ dụng Subform có checkbox để check những nhân viên cần chọn được không anh
[img]http://[/img]
Xuân Thanh > 16-04-20, 10:15 PM
huuduy.duy > 16-04-20, 11:27 PM
(16-04-20, 10:15 PM)Xuân Thanh Đã viết: 1/ Gọi hết danh sách nhân viên đưa vào list bên phảiCái này được rồi anh.
2/ Cái list bên trái chỉ làm list tạm. Sau khi đưa hết danh sách đã chọn từ list bên phải qua thì mới cập nhật vào tblPhieuYeuCau
huuduy.duy > 16-04-20, 11:39 PM
(16-04-20, 11:30 PM)Xuân Thanh Đã viết:(16-04-20, 11:27 PM)huuduy.duy Đã viết: Cái này được rồi anh.
Chỉ còn 1 cái là gọi lại cái đã nhập để bổ sung thêm nhân viên từ bên phải vào bên trái ạ
Thì lôi ngược cái table PYC đó ra dễ ẹc mà
ongke0711 > 17-04-20, 12:31 AM
(16-04-20, 04:10 PM)huuduy.duy Đã viết: Do yêu cầu công việc phải chọn nhiều nhân viên từ Danh sách nhân viên chung, nên em thay Subform thành Listbox để chọn nhân viên qua lại giữ 2 Listbox.
Phần Form Phiếu Yêu cầu đào tạo: sẽ cập nhật thông tin như:
1/ Người yêu cầu, nội dung yêu cầu, Thời gian đào tạo, Nơi đào tạo, .. cập nhật vào bảng tblPhieuYeuCau
2/ Mỗi phiếu Yêu cầu như vậy sẽ chọn ra danh sách nhân viên từ 1 danh sách nhân viên chung của Cty cần đào tạo theo nội dung đó và ghi bảng tblNhanVienDaDaoTao.
Em lầm đến đoạn gọi Phiếu Yêu cầu lên để bổ sung thêm nhân viên cần đào tạo thì bị lỗi. Nhờ anh xem giúp
Trân trọng cảm ơn
Link
** Ngoài cách sử dụng Listbox, thì mình có thể sủ dụng Subform có checkbox để check những nhân viên cần chọn được không anh