tranthanhan1962 > 25-11-17, 07:53 AM
pherotao > 25-11-17, 11:58 AM
(25-11-17, 07:53 AM)tranthanhan1962 Đã viết: Nếu bạn sử dụng form không có recordsource thì bạn phải viết toàn bộ code cho các button navigation, delete,save. Bạn suy nghĩ thật kỹ trước khi áp dụng điều này
tranthanhan1962 > 25-11-17, 03:00 PM
Private Sub Luu_Click()
Dim dbsmainFromsubForm As Database 'Khai báo biến cho tập tin FromsubForm.mdb (cơ sở dữ liệu)
Dim rstTHoaDonNX As Recordset 'Khai báo biến cho table nhận dữ liệu mới (table THoaDonNX)
Dim strMaHD, strSoHD, strLoaiHD, strMaKH, strMaNV, strGhiChu As String 'Khai báo biến string (kiểu dữ liệu text) cho các field (MaHD, SoHD, LoaiHD, MaKH, MaNV, GhiChu)
Dim datNgay As Date 'Khai báo biến date (Kiểu dữ liệu ngày) cho field Ngay
Set dbsmainFromsubForm = CurrentDb 'Xác định biến dbsmainFromsubForm là CSDL hiện hành (CSDL đang làm việc)
Set rstTHoaDonNX = dbsmainFromsubForm.OpenRecordset("T_HoaDon_NX", dbOpenDynaset) 'Xác định biến rstTHoaDonNX là table THoaDonNX kiêm lệnh mở table
'Thiết đặt các biến bằng với các giá trị textbox trên form
strMaHD = MaHD.Value
strSoHD = SoHD.Value
strLoaiHD = LoaiHD.Value
datNgay = Ngay.Value
strMaKH = MaKH.Value
strMaNV = MaNV.Value
strGhiChu = GhiChu.Value
Chuyển các giá trị biến vào table
rstTHoaDonNX.AddNew ' lênh tạo mới record cho table
rstTHoaDonNX![MaHD] = strMaHD
rstTHoaDonNX![SoHD] = strSoHD
rstTHoaDonNX![LoaiHD] = strLoaiHD
rstTHoaDonNX![Ngay] = datNgay
rstTHoaDonNX![MaKH] = strMaKH
rstTHoaDonNX![MaNV] = strMaNV
rstTHoaDonNX![GhiChu] = strGhiChu
rstTHoaDonNX.Update ' lệnh cập nhật record cho table
rstTHoaDonNX.Close ' lệnh đóng table
End Sub
pherotao > 25-11-17, 07:06 PM
maidinhdan > 25-11-17, 11:00 PM
(25-11-17, 07:06 PM)pherotao Đã viết: Rất cảm ơn anh ạ! Vậy tiếp theo, sẽ liên kết với subform thế nào, để khi bấm ''Ghi", sẽ có 1 câu lệnh xét xem, nếu : subform rỗng (chủ yếu là MAHH) thì sẽ báo lỗi và ko cho lưu. Nhờ a xem xét giúp thêm ạ!
maidinhdan > 27-11-17, 11:11 PM
(21-11-17, 08:00 PM)pherotao Đã viết: Mình gửi lại file này: mainForm_subForm nhờ bạn (cùng mọi người) xem hộ và giúp đỡ!
Trên Form "F_HoaDon_NX", tôi có nhúng 1 subform là "sub_HangHoa_NX". Tôi có thêm các nút lệnh: "Xóa, Sửa, Thêm, Ghi, Không".
Nút "Thêm" thì tôi làm được rồi, chỉ còn nút "Ghi" là chưa được, vì tôi muốn:
1. Nếu chưa nhập đầy đủ thông tin bắt buộc trên mainForm (MaHD, ngày, MaKH, MaNV), khi ấn "Ghi", sẽ báo lỗi. Lúc này subForm trong trạng thái khóa (locked = true);
2. Khi mainForm đã đầy đủ thông tin, sẽ tự động mở subForm (locked = false), sẽ tự động nhảy con trỏ vô subFom (cụ thể là vô MaHH);
3. Trong quá trình nhập liệu trên subForm, nếu để MaHH rỗng mà bấm "Ghi" thì sẽ báo lỗi,...;
4. mainForm đầy đủ thông tin mà subForm rỗng thì cũng báo lỗi;
5. mainForm đầy đủ thông tin mà subForm rỗng (hoặc có dữ liệu), khi bấm "Không" thì mọi "dữ liệu" đang thao tác trên mainFom và subForm (chưa lưu vô Table) sẽ xóa hết.
Xin cảm ơn bạn cùng mọi người!
Private Sub Ghi_Click()
Call Kiemtra
End Sub
Private Sub MaNV_AfterUpdate()
Call Kiemtra
End Sub
Private Sub sub_HangHoa_NX_Enter()
Call Kiemtra
End Sub
Private Sub Them_Click()
DoCmd.GoToRecord , , acNewRec
End Sub
Sub Kiemtra()
'1. Neu chua nhap day du thong tin bat buoc tren mainForm (MaHD, ngay, MaKH, MaNV), khi an "Ghi", se bao loi. Luc nay subForm trong trang thai khoa (locked = true);
'2. Khi mainForm da day du thong tin, se tu dong mo subForm (locked = false), se tu dong nhay con tro vo subFom (cu the la vo MaHH);
If IsNull(Me.MaHD) Or IsNull(Me.Ngay) Or IsNull(Me.MaKH) Or IsNull(Me.MaNV) Then
MsgBox "Mot so thong tin chua dien day du: (MaHD, ngày, MaKH, MaNV)", vbInformation, "Thông báo"
Me.sub_HangHoa_NX.Locked = True
Exit Sub
Else
Me.sub_HangHoa_NX.Locked = False
Forms![F_HoaDon_NX]![sub_HangHoa_NX].Form![MaHH].SetFocus
End If
End Sub
Private Sub Form_Error(DataErr As Integer, Response As Integer)
MsgBox "Loi chua nhap day du du lieu"
End Sub
Private Sub Khong_Click()
'5. mainForm day du thong tin ma subForm rong (hoac co du lieu), khi bam "Khong" thi moi "du lieu" dang thao tac tren mainFom va subForm (chua luu vo Table) se xoa het.
Dim rs As Recordset
Dim sql As String
Dim xacnhan As String, a As String
sql = "SELECT * FROM T_HangHoa_NX WHERE MaHD='" & Me.MaHD & "'"
Set rs = CurrentDb.OpenRecordset(sql)
If rs.EOF Then
a = "Sub form rong, chua co du lieu, Xac nhan xoa du lieu lien quan den MaHH nay"
xacnhan = MsgBox(a, vbInformation + vbYesNo, "Nh" & ChrW(7855) & "c nh" & ChrW(7903))
If xacnhan = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM T_HoaDon_NX WHERE MaHD='" & Me.MaHD & "'"
Me.Refresh
DoCmd.SetWarnings True
End If
Exit Sub
End If
If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF ' Thuc hien den khi nao con tro den vi tri cuoi cung
' Duyet tu cot
For i = 0 To rs.Fields.Count - 1
If IsNull(rs.Fields(i)) = True Then
If rs.Fields(i).Name <> "GhiChu" Then
a = "Phat hien Cot: " & rs.Fields(i).Name & " chua co du lieu, Xac nhan xoa du lieu lien quan den MaHH nay"
xacnhan = MsgBox(a, vbInformation + vbYesNo, "Nhac nho")
If xacnhan = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM T_HoaDon_NX WHERE MaHD='" & Me.MaHD & "'"
Me.Refresh
DoCmd.SetWarnings True
End If
Exit Sub
End If
End If
Next
rs.MoveNext
Loop
End If
Set rs = Nothing
End Sub
pherotao > 27-11-17, 11:26 PM
pherotao > 29-11-17, 08:55 PM
maidinhdan > 30-11-17, 02:11 AM
(29-11-17, 08:55 PM)pherotao Đã viết: Anh maidinhdan ơi, có 1 trục trặc nhỏ trong code mà anh viết gửi em như sau:
1. Khi nhấn "Không", nó có thi hành xóa dữ liệu nhưng hiển thị trên form là #Deleted [img]]http://www.mediafire.com/file/j1cp4fs8fyrvnso/MAIN-SUB.jpg[/img], mặc dầu em thấy anh có thêm lệnh Me.Refresh;
2. Anh gõ thử 1 từ nào đó tại ô "Hóa Đơn", sau đó a nhấn "Không", nó có cảnh báo nhưng chưa xóa; nhấn "Không" lần 2 nó mới xóa và hiện ra chữ #Deleted.
3. Nếu Nhập đầy đủ thông tin trên mainForm và subForm thì khi nhấn "Không" thì nó đứng luôn (thay vì nó sẽ không lưu những gì mình đã nhập trước đó).
4. Khi nhập đầy đủ mainForm, subForm để trống, nhấn nút "Ghi", chẳng những nó không cảnh báo mà còn tự lưu thông tin vô T_HoaDon_NX luôn.
Nhờ anh xem lại dùm em ạ! Chân thành cảm ơn!
http://www.mediafire.com/file/j1cp4fs8fy...IN-SUB.jpg[/img]]http://www.mediafire.com/file/j1cp4fs8fyrvnso/MAIN-SUB.jpg[/img][/url]
' Khai báo biến cục bộ
Dim So As Byte
Dim SX As Byte
Private Sub cmdSua_Click()
DoitenSuaxoa
End Sub
Private Sub cmdthem_Click()
DoitenThemLuu
End Sub
Sub DoitenThemLuu()
Me.Soden.SetFocus
If So = 0 Then
Me.cmdthem.Caption = "Luu Them"
Me.cmdSua.Enabled = False
So = 1
SX = 1
Else
So = 0
SX = 0
Me.cmdclose.SetFocus
Me.cmdthem.Caption = "Thêm"
Me.cmdSua.Caption = "Sua/Xoa"
If pbQuyenThem = False Then Me.cmdthem.Enabled = False
Me.cmdSua.Enabled = True
Call Luu
End If
End Sub
Sub DoitenSuaxoa()
If SX = 0 Then
Me.cmdSua.Caption = "Xóa"
Me.cmdthem.Caption = "Luu Sua"
So = 1
SX = 1
Me.cmdthem.Enabled = True
If pbQuyenXoa = True Then
Me.cmdSua.Enabled = True
Else
Me.cmdSua.Enabled = False
End If
Else
So = 0
SX = 0
Me.cmdSua.Caption = "Sua/Xoa"
Me.cmdthem.Caption = "Thêm"
Call Xoa
End If
End Sub
Sub Xoa() 'Gọi phương thức .Xóa
Dim cls As clsCVDen
Set cls = New clsCVDen
With cls
.Xoa Me.SoTT
End With
Set cls = Nothing
Form_Load
End Sub
Sub Luu() 'Phuc vu cho Ham Them+Sua ( Do tôi tạo class nó tự động hiểu là thao tác Sửa hay Thêm dựa vào phương thức .TestSua
Dim cls As clsCVDen
Set cls = New clsCVDen
With cls
.TestSua Me.SoTT
.Ngayden = Nz(Me.Ngayden)
.Soden = Nz(Me.Soden)
.Update
End With
Set cls = Nothing
Form_Load
End Sub
advnamk > 30-11-17, 02:07 PM