Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

2/4/10

Tính giá trị 1 công thức lưu trong table

Hỏi: Mình có table tblData thế này
  tblData
tblData
TK NODAU CODAU PSNO PSCO NOCUOI COCUOI
110 50000 0 20000 6000 24000 0
111 150000 0 10000 2000 138000 0
112 245000 0 15000 3000 227000 0
113 15000 0 2000 11000 2000 0
114 85000 0 3000 4000 78000 0
211 0 20000 6000 3000
11000
212 0 135000 7000 8000
120000
213 0 36000 5000 1000
30000
214 0 42000 6000 6000
30000

tblketqua( Chimuc,Congthuc,giatri)
Mình có các công thức lấy giá trị trên table tblData để cộng trừ nhân chia, và công thức này được lưu trên tblKetqua. Mình muốn tính toán và điền giá trị cuối cùng vào ô giatri trên tblketqua.


Đáp:
Lấy giá trị thông qua hàm Dlookup. Tổng quát, ta viết 1 function để lấy giá trị trên tblData như sau:
Function myIndex(Dong As String, Cot As String) As Long
 myIndex = DLookup(Cot, "tblData", "[TK]='" & Dong & "'")
End Function

Công thức lưu của bạn phải phát biểu dạng:
myIndex("110", "nodau")-(myIndex("113", "PSno") + myIndex("114", "PSCo"))
Lưu các công thức này vào field Congthuc trên tblketqua.

Ví dụ:
TBLKETQUA
TBLKETQUA
CHITIEU CONGTHUC SOTIEN
I. TÀI SẢN myIndex("110", "coCuoi")+ myIndex("111", "coCuoi")+ myIndex("113", "coCuoi") 0
1. Tài sản cố định myIndex("111", "noCuoi")-myIndex("112", "noCuoi") 0
2. Vật liệu myIndex("110", "nodau")-(myIndex("113", "PSno") + myIndex("114", "PSCo")) 0
II. NGUỒN VỐN myIndex("211", "Codau")+myIndex("212", "Codau")+myIndex("213", "Codau") 0
1. Tỷ lệ vốn chủ sở hữu myIndex("111", "NoCuoi") 0
Dùng hàm eval để thực thi các công thức dạng chuỗi. Eval(StringExp)
Run 1 query update để cập nhật giá trị công thức vào ô giá trị:
Private Sub cmdTinhKQ_Click()
SQL = "UPDATE TBLKETQUA SET SOTIEN = Eval([congthuc])"
DoCmd.SetWarnings False
DoCmd.RunSQL SQL
MsgBox " Da update thanh cong"
DoCmd.SetWarnings True
DoCmd.OpenTable "TBLKETQUA"
End Sub
Chúc thành công:
Mời xem demo: Download
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum