Help viết code dùm mình cái form nay voi

Xem file nhé. Mấy cái nút giao dịch, hoàn thành thì tự làm được rồi đúng không.
 

Đính kèm

  • Database6.accdb.zip
    2.6 MB · Lượt xem: 273
không biết em viết code để update như thế này có đúng ko,. anh kiểm tra dùm em với. nhưng giờ em muốn update cái textbox tổng số tiền vào luôn vào cái table dsthuoc_ban thì làm thế nào hả anh. em gửi file anh viết vào dùm em với.

Private Sub OK_Click()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Dsthuoc_kho", dbOpenDynaset)
Set rs2 = db.OpenRecordset("Dsthuoc_ban", dbOpenDynaset)
If rs1.RecordCount <> 0 Then
rs1.MoveFirst
End If

With rs1

Do Until rs1.EOF
.Edit
!soluong = rs1!soluong
!tempx = "0"

.Update
rs1.MoveNext
Loop

End With

rs1.Close

Set rs1 = Nothing
With rs2


.AddNew
!slban = rs2!slban


End With

rs2.Close

Set rs2 = Nothing


End Sub
 

Đính kèm

  • hn_unlock.rar
    1.7 MB · Lượt xem: 269
File em gửi trống không phần VBA code thì chẳng lẻ anh phải gõ lại hết code từ lúc đầu chỉ em sao? Code từng event đôi khi sẽ liên quan đến nhau, muốn làm event này sẽ là kết quả từ code của event khác.
Trong file này em xác định lại là làm theo kiểu nào? theo các table, query của bsQ hay làm khác đi nhưng nghiệp vụ thì vẫn giữ nguyên?
Nếu làm giống bsQ thì sẽ không dùng table tạm cho Unbound form như anh đề nghị ban đầu. Em phân tích cấu trúc table của bsQ sẽ thấy không có table tạm tức là bsQ thiết kế frmBanLe có recordsource trực tiếp là query banle => các code cho nút [Hoàn Thành] và [HủyGD] sẽ khác. Anh đã viết code lại trong file Database6.accdb đó. Theo cách nhìn của anh qua các table và query thì bsQ sẽ làm như sau:
- Khi chọn [Hoàn thành] sẽ chạy query "saved" và add new record.
- Khi chọn [Hủy] sẽ xóa records trong 2 tables là Dsthuoc_ban và Dsthuoc_kho. Trong Dsthuoc_ban: sẽ xóa các record có dòng done=0, trong Dsthuoc_kho: sẽ xóa các record có field tempx<>0.
- Các event này đều liên quan đến hdID. (Em đã code phần hdID chưa?)
Code nó sẽ là:
--------------------------------------
Private Sub huygd_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String, strDelete As String

strSQL = "SELECT Dsthuoc_kho.*, Dsthuoc_ban.slban " & _
"FROM Dsthuoc_kho INNER JOIN Dsthuoc_ban ON Dsthuoc_kho.mathuoc = Dsthuoc_ban.mathuoc " & _
"WHERE (((Dsthuoc_kho.tempx)<>0));"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)

If rs.RecordCount <> 0 Then
rs.MoveFirst
End If

With rs
Do Until rs.EOF
.Edit
!soluong = !soluong + !tempx
!tempx = 0
!slban = 0
.Update
.MoveNext
Loop
End With

DoCmd.SetWarnings False
strDelete = "DELETE * FROM Dsthuoc_ban WHERE done=0"
CurrentDb.Execute strDelete
DoCmd.SetWarnings True


Me.List_banle.Form.DataEntry = True

End Sub
------------------------------------
Private Sub ok_Click()

DoCmd.OpenQuery "saved"
Me.List_banle.Form.DataEntry = True

End Sub
-----------------------------------

Còn việc em muốn update textbox thành tiền và Dsthuoc_ban thì dùng macro setvalue hoặc thêm code: Dsthuoc_ban.thanhtien=Me.txtThanhTien. Mấy cái này dễ em tự nghiên cứu thêm đi.
 
file đó em có viết code rồi mà anh, mà không biết có đúng không. để em update lại file này. khi em nhập số liệu vào ô slban thì cột soluong và slban nó chạy thẳng vào table dsthuoc_kho và dsthuoc_ban khi chưa nhấp nút hoàn thành. giờ em muốn khi nhấp nút hoàn thành thì dữ liệu nó mới update vào được không anh. với lại em muốn khi em nhấp nút hoàn thành thì cột thành tiền nó cũng update vào table dsthuoc_ban luôn thì sao hả anh. em chỉ mới học qua access thôi mong anh thông cảm. nói chung em chỉ còn viết code cho cái form ban le nữa là xong. nếu anh viết code form banle giống của bs.quan thì viết dùm em vào file với. nếu anh rảnh thì giúp em, còn không được cũng ko sao. cảm ơn anh nhiều.
 

Đính kèm

  • hn_unlock2.rar
    1.8 MB · Lượt xem: 259
Tại sao e ko nghĩ khác đi là khi nhấn nút hoàn thành thì chỉ thêm record mới như code a làm ở trên vì đã tự động lưu rồi. Còn nếu ko muốn lưu sẽ bấm nút hủygd hoặc chọn nút X close -> chỉ code cho nút Huỷ gd và áp dụng giống vậy cho nút X thôi.
 
Private Sub slban_BeforeUpdate(Cancel As Integer)
If Me.tempx <> 0 Then
Me.soluong = Me.soluong + Me.tempx - Me.slban
Me.tempx = Me.slban
Me.done = "1"
Else
Me.soluong = Me.soluong - Me.slban
Me.tempx = Me.slban

Me.thanhtien_thuc = Me.slban * Me.dongia

End If
End Sub
 
ở cột slban em phải thêm 1 dòng me.done="1" sau else nữa thì thấy nó mới nhảy sang 1. cám ơn anh nhiều. em làm được rồi.
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Kỹ thuật giải trình thanh tra BHXH

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top