Access開發培訓
                        網站公告
                        ·Access專家課堂QQ群號:151711184    ·Access快速開發平臺下載地址及教程    ·歡迎加入Access專家課堂微信群!    ·如何快速搜索本站文章|示例|資料    
                        您的位置: 首頁 > 技術文章 > 同城交流

                        子窗體合計的計算

                        時 間:2018-01-29 16:16:22
                        作 者:半夜羅   ID:36948  城市:成都
                        摘 要:子窗體合計顯示
                        正 文:

                        輸入數據時為了及時反應子窗體的合計,雖然可以用簡單的方法,但速度不太讓人滿意,為此我采用了ADO的方式,寫了一個自定義函數,只要有數量、單價,就會即時計算出金額與合計金額,速度非常滿意。而且在刪除時自動修改行號。正式表不是不需要存儲金額字段的,但臨時表中必須要設一個金額字段。有了這個函數只需在數量、單價的更新后事件中  =批量填充金額(),和子窗體的確認刪除后事件  =批量填充金額() 即可。刪除某一行后,行號自動重新填充編號,合計金額也自動重新計算。
                        我根本不懂英語,所以寫的代碼基本都是用中文,有時也在中文前加一個字母,管他的,只要能得到結果,只要能看懂,又不是必須英文,將就吧。
                        在修改時的加載事件中同樣  =批量填充金額()
                        更新后事件已經在相應的文本框中有了,不需要在窗體的更新后事件中再重復。
                        Public Function dm批量填充金額()
                        '--------------------------------------------定義記錄集
                            Dim rst As Object
                            Dim strSQL As String
                            '----------------------------------------定義序號與合計金額的變量
                            Dim i序號 As Currency
                            Dim Sum金額 As Currency
                            '----------------------------------------如果臨時表中沒有數據時,退出
                            If DCount("*", "入庫單銷售單明細臨時表") = 0 Then Exit Function
                            '----------------------------------------打開記錄集
                            strSQL = "select * from 入庫單銷售單明細臨時表 "
                            Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
                            '----------------------------------------'如果當前處理未保存狀態,先進行保存
                            If Me.Dirty Then Me.Dirty = False
                            '-----------------------------------------給變量設定初始值
                            i序號 = 0 And Sum金額 = 0
                            '-----------------------------------------從第一條記錄開始
                            rst.MoveFirst
                            '-----------------------------------------循環進行
                            Do Until rst.EOF
                                '-------------------------------------允許修改
                                rst.Edit
                                '-------------------------------------修改各字段的值,這里是序號與金額
                                rst!序號 = Format(i序號 + 1, "00")
                                rst!金額 = my45(Nz(rst!數量, 0) * Nz(rst!單價, 0), 2)    '四舍五入,否則會出錯,這里調用了自定義四舍五入函數
                                '-------------------------------------修改后,就要更新,否則不會被修改
                                rst.Update
                                '-------------------------------------重新設定序號與合計金額的變量
                                i序號 = rst!序號
                                Sum金額 = Sum金額 + rst!金額
                                '-------------------------------------下一條記錄
                                rst.MoveNext
                            Loop
                            '-------------------------------------將合計金額斌給主窗體
                            Me.Parent!金額 = Sum金額
                            rst.Close
                            Set rst = Nothing
                            Me.Parent!狀態 = "未保存"
                        End Function
                        另附UMVSoft老師的四舍五入函數,這里就用到了。
                        Public Function my45(a As Double, n As Integer) As Double
                          my45 = Int(a * 10 ^ n + 0.51 ) / 10 ^ n
                        End Function

                        Access軟件網官方交流QQ群 (群號:150401543)       Access源碼網店

                        常見問答:

                        技術分類:

                        相關資源:

                        專欄作家

                        關于我們 | 服務條款 | 在線投稿 | 友情鏈接 | 網站統計 | 網站幫助