Thủ Thuật Access

Thế Giới Thủ Thuật với Access

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

Posted by Noname on 04.02.2010

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

5 phản hồi to “Tính giá trị 1 công thức lưu trong table”

  1. Anonymous said

    Đọc bài viết tính giá trị của một công thức lưu trong table của anh Noname, tôi rất thích vì đó là điều tôi rất cần. Tuy nhiên, tôi áp dụng vào công việc thì bị lỗi do tbldata của tôi có TK không được lưu trong congthuc. Khi đó khi thực hiện update sẽ báo lỗi.Anh có thể hướng dẫn cho tôi cách khắc phục không? (Mỗi một đơn vị mà tôi cần lưu số liệu vào table sẽ có một TBldata khác nhau, với các TK khác nhau, nhưng congthuc thi phai viet tonghop lấy tất cả TK)Ví dụ: Tbldata này có TK 2111,2112,2113 nhung tbldata khac thì có 2111,2131.2141 Mà công thức thì gộp đủ tất cả 2111,2112,2113,2131,2141 vì là cùng nhóm tính chất.Email của tôi là tranchautuyet@yahoo.com.vn.

  2. Noname said

    Nếu bạn lưu ở nhiều table khác nhau thì hàm MyIndex của bạn phải truyền thêm thông số table. Function myIndex(Dong As String, Cot As String, tb as string) As Long myIndex = DLookup(Cot, tb, "[TK]='" & Dong & "'")End FunctionVà công thức bạn lưu phải truyền thêm tên table nữa!

  3. lovelysnow said

    Tôi muốn xin địa chỉ email của anh Naname được không. Tôi đang ứng dụng thủ thuật của anh chỉ vào việc khai thác dữ liệu từ cân đối lưu vào table. Tuy nhiên, tôi còn một chỉ tiêu chưa lấy được như sau:Tôi muốn tính tổng tài sản có hoặc tài sản nợ dựa vào cân số trên cân đối kế toán ( Dựa vào tính chất cân đối kế toán cộng tất cả số dư các tài khoản , còn tổng tài sản có hoặc nợ thì có một số tài khoản lấy chênh lệch ( như là tài khoản thanh toán 5199 của ngân hàng chẳng hạn, thường có 2 số dư, theo quy định phải tính chênh lệch giữa dư có và dư nợ và nằm bên tài sản có hoặc tài sản nợ còn tùy)Như vậy, giả sử tôi lấy cân số dư cuối nợ để tính và dư cuối nợ của 5199 lớn hơn dư cuối có của 5199 thì tôi sẽ trừ bớt dư cuối có của 5199 và ngược lại thì tôi phải trừ bớt dư cuối nợ của 5199 ( vì chênh lệch sẽ nằm bên tài sản nợ)Cột công thức thì không thể sử dụng hàm IFF rồi.Anh có cách gì hay thì chỉ tôi với.Cảm ơn anh Thật nhiều

  4. Noname said

    duytuan2002@gmail.comBạn gửi kèm ví dụ luôn nhé!

  5. Anonymous said

    SAO MINH LAM THEO DE MO CUA BAN MA KO DC?

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

 
%d bloggers like this: