<output id="os3gq"><ruby id="os3gq"></ruby></output>

    1. <mark id="os3gq"></mark>
    2. 我的報銷管理學習總結筆記-七夜
      Access軟件網QQ交流學習群(群號碼198465573),歡迎您的加入!
      首頁 >技術文章> 程序人生


      我的報銷管理學習總結筆記

      發表時間:2012/7/28 9:16:40 評論(2) 瀏覽(4441)  評論 | 加入收藏 | 復制
         
      摘 要:我的報銷管理學習總結筆記
      正 文:

      制作流程:

      1、  建立數據庫資料存放數據庫的數據表;

      2、  連接后臺數據庫的相關表到前臺客戶端界面表中;

      3、  設置相關的后臺數據庫鏈接路徑;

      4、  設置前臺數據庫的代碼相關引用的順序和完整性;

      5、  設置導航按鈕界面;

      6、  創建frmyg_child窗體,用于顯示員工信息的基礎數據,首先要設置好此窗體的記錄源:Select tblCodeyg.* FROM tblCodeyg;  修改該窗體的屬性的記錄集類型為快照,方便后面的權限操作;默認視圖要修改為:數據表;相關字段列表直接拖到主窗體區域;

      7、  考慮到此窗體內的數據需要設置修改功能,直接在員工序號的文本框的獲得焦點事件中輸入以下代碼:

      On Error GoTo Err_ygId_GotFocus:
      selectstr = Me.
      ygId
      Forms!usysfrmMain!labFind.Tag = 1
      Forms!usysfrmMain!btnEdit.Tag = 999
      Exit_ygId_GotFocus:
      Exit Sub
      Err_ygId_GotFocus:
      Resume Exit_ygId_GotFocus

      并在模塊中定義selectstr變量為文本型。

        '文本型變量
      Public selectstr As String

      frmyg_child屬性的成為當前事件文本框中輸入

      =selectrecord()

       

      同時因為本窗體后面需要添加修改子窗體,所以我們有必要將能在本窗體設計時候的所有后續功能直接一次性添加完成。下面再添加一個修改后返回修改紀錄的原始定位功能代碼,先在模塊中定義一個文本型變量;

          '文本型變量
      Public g_CurrentSelectStrID As String

      實現上述功能需要在窗體計時器觸發事件中輸入如下代碼:

      Acchelp_FindstrRecord (g_CurrentSelectStrID)
          '
      計時器執行一次后不再執行

      Me.TimerInterval = 0

       

      8、  建立frmyg_child的刪除記錄的功能,直接在窗體建立時候完成,在窗體代碼模塊中輸入以下代碼:

      Public Sub btnDel()
      If MsgBox("
      您確認要刪除嗎
      ?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then
      DoCmd.Echo False
      Call AccHelp_DeleteFldstrRow ("tblCodeyg", "ygId", selectstr)
      Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
      DoCmd.Echo True
      End If
      End Sub

       

      9、  創建frmyg_child_add窗體,用于新增員工資料;創建一個文本框命名為ygxm,用于新增員工姓名的裝載;調整頁眉頁腳,頁眉區域從平臺文件ActiveX一區里復制幾個控件,調整整個窗體的各項屬性。

      10、          設置員工姓名新增窗體的代碼

      Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object)

      Select Case Button
      Case "
      保存
      "
      cmd_Save
      Case "
      關閉
      "
      DoCmd.Close
      End Select
      End Sub

      Private Sub cmd_Save()
      Dim rst As DAO.Recordset

      If IsNull(Me.ygxm) Then
      MsgBox "
      請輸入員工姓名!", vbCritical, "提示:
      "
      Me.ygxm.SetFocus
      Exit Sub
      End If

      Me.Refresh
      If Acchelp_StrDataIsExist("tblCodeyg", "ygxm", Me.ygxm) = True Then
      MsgBox "
      你輸入的數據已經存在,請重新輸入", vbCritical, "警告
      "
      Me.ygxm.SetFocus
      Exit Sub
      End If

      If MsgBox("您確認要保存嗎?", vbOKCancel + vbInformation, "提示") = vbOK Then
      Set rst = CurrentDb.OpenRecordset("tblCodeyg", dbOpenDynaset)
      rst.AddNew
      rst("ygId") = acchelp_autoid("Y",2, "tblCodeyg", "ygId")
      rst("ygxm") = Me.
      ygxm
      rst.Update
      rst.Close
      Set rst = Nothing
      '
      刷新數據
      If IsLoaded("usysfrmMain") Then
      DoCmd.Echo False
      Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
      DoCmd.Echo True
      End If
      MsgBox "
      保存成功!", vbInformation, "提示"
      Me.ygxm = Null

      Me.ygxm.SetFocus    此是作者自行添加的語句,目的是為了保存后員工姓名文本框自動獲得焦點,提高輸入速度。
      End If
      End Sub

      11、           制作員工姓名修改界面:

      制作員工姓名文本框,修改其名稱未ygxm,調整窗體頁眉頁腳,并吧ActiveX_02中的控件復制到頁眉區域;調整整個窗體的屬性,由于在建立frmyg_child窗體時候就對ygxm文本框的獲得焦點事件的代碼進行了書寫以及frmyg_child窗體的成為當前屬性中進行了設置,所以在該修改界面時候省略了以上步驟。直接設置frmyg_child_edit窗體加載事件:

       Me.RecordSource = "Select * FROM tblCodeyg Where ygId = '" & selectstr & "'"

      以下語句是為了實現使光標回到修改前的記錄功能所必須的一個賦值語句

      g_CurrentSelectStrID = selectstr

       

      同時,我們需要對員工姓名修改窗體的ygxm文本框的控件來源屬性進行設置為:

      Ygxm

      現在對整個窗體的操作代碼進行書寫:

      Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object)
      If IsNull(Me.ygxm) Then
      MsgBox "
      請輸入員工姓名!", vbCritical, "提示:
      "
      Me.ygxm.SetFocus
      Exit Sub
      End If

      Me.Refresh
      DoCmd.Echo False
      Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
      DoCmd.Echo True
          '
      觸發子窗體計時器事件

      Forms!usysfrmMain!frmChild.Form.TimerInterval = 300
      DoCmd.Close acForm, "frmyg_child_Edit"
      End Sub

       

      12、              調整相關權限,便于在設計中實時檢查設計程序是否符合我們的預期目標;包括新增、刪除、修改等;

      按同樣的步驟,制作報銷類別的相關基礎窗體和新增修改窗體。(過程此處省略)

       

      現在來設計報銷明細窗體的相關基礎窗體、新增、修改等窗體,以及相關功能:

      1、  由于我們現在所需要建立的窗體是基于幾個不同的表的數據,所以我們要先建立查詢;

      2、  建立查詢:qryBxmx  獲取各個相應字段,并為其添加中文名稱,注意中文名稱后方冒號要用英文格式。保存為qryBxmx;

      3、 建立報銷明細的基礎窗體:

      4、  建立窗體的記錄源Select qryBxmx.* FROM qryBxmx,將所有字段拖到窗體中;保存該窗體,名稱為frmBxmx_child  ,將該窗體的默認視圖改為記錄表,記錄集類型改為快照;  

      5、  添加該窗體的對應打開按鈕和管理員權限;

      6、  為了方便在后面使用修改功能,需要在報銷明細文本框屬性的獲得焦點事件中輸入以下代碼:

      On Error GoTo Err_報銷編號_GotFocus:
      selectstr = Me.
      報銷編號

      Forms!usysfrmMain!labFind.Tag = 1
      Forms!usysfrmMain!btnEdit.Tag = 999
      Exit_
      報銷編號_GotFocus:
      Exit Sub
      Err_
      報銷編號
      _GotFocus:
      Resume Exit_
      報銷編號_GotFocus

      7、  在報銷明細基礎窗體的成為當前屬性中輸入以下內容=selectrecord();

      8、  設置報銷明細的基礎窗體的計時器事件,方便修改后光標返回修改前的記錄集;計時器的代碼為:

      Acchelp_FindstrRecord (g_CurrentSelectStrID)
      '
      計時器執行一次后不再執行

      Me.TimerInterval = 0

      9、  設置報銷明細基礎窗體的刪除光標所在行的代碼:

      Public Sub btnDel()
      If MsgBox("
      您確認要刪除嗎
      ?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then
      DoCmd.Echo False
      Call AccHelp_DeleteFldstrRow("tblBxmx","mxId",selectstr)
      Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child"
      DoCmd.Echo True
      End If
      End Sub

      10、          建立以查詢作為數據源的窗體的 目的就在于實現相關數據的查詢,所以我們可以在建立報銷明細基礎窗體的就直接先把查詢所需代碼編輯進去。查詢功能實現的相關代碼如下:【以下代碼有些生澀難懂】

      Public Sub btnFind()
      DoCmd.OpenForm "usysfrmFind"
          '
      文本型對應 3 ,日期型對應 1 ,數值型對于
      2
      Forms!usysfrmFind!cobfldName.RowSource = "
      報銷日期;1;類別名稱;3;員工姓名;3;報銷金額;2;報銷摘要;3;
      "
          '
      指定查詢數據來源

      Forms!usysfrmFind!labDataSource.Caption = "qryBxmx"
      End Sub

      Public Sub FindEnd()
      Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "
      報銷編號", True)

          '記錄下來報表的數據來源
      strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource

      End Sub

      由于我們以查詢為目的建立起來的基礎窗體,將有可能通過使用報表來將查詢所獲得的信息反映出來,所以這里可一步到位的將將來所需要用到的動態報表所需代碼制作進去。如果有需要制作報表的話。在以上代碼中以紅色字體來體現建立動態報表的功能。  由于記錄以查詢后結果為數據源使用到了一個全局變量strRptReSource  ,所以要在模塊代碼中對此變量進行定義,定義語句如下

          '在模塊中聲明報表數據源的全局變量
      Public strRptReSource As String

       

      11、              建立報銷明細的新增窗體:由于報銷明細有六個字段,其中有五個字段是需要用戶輸入,一個字段是自動增加,所以添加5個文本框,并調整大小及布局;修改標簽和名稱;需要注意的是報銷類別和員工姓名的命名為lbidygid,而不是bxlbygxm,因為該查詢對應的記錄是lbidygid而不是bxlbygxm;設置此彈出窗體的各項屬性,美化窗體的各個控件。

      12、              由于我們在新增報銷明細時候可能會遇到需要給新的員工增加相關記錄或者產生了一些新的費用類別,所以,在這里可直接制作【快捷添加】的功能模塊。(此功能不是必須的,可選擇制作也可以不制作)步驟如下:

      13、              ActiveX二區的控件復制到報銷類別和員工姓名文本框后面,用于實現該功能,    進入剛添加的報銷類別后面的按鈕的屬性對話框,,將其名稱命名為 cmdBX (屬性-其他選項卡-名稱),員工姓名后面的一個命名為 cmdYG 。之后進入該窗體的代碼編輯界面,新起一行,輸入這樣的代碼:

      Private Sub cmdBX_ButtonClick(ByVal Button As Object)
      DoCmd.OpenForm "frm_CodeBxlb_child_Add"
      End Sub

      Private Sub cmdYG_ButtonClick(ByVal Button As Object)
      DoCmd.OpenForm "frmyg_child_Add"
      End Sub

      14、              然后是需要對原報銷類別和員工姓名的基礎窗體的新增窗體的代碼進行適當的修改,在以下代碼處進行修改:用色代碼為實現本功能的新增代碼:以實現CmdBX為例,CmdYG同理;

      If IsLoaded("usysfrmMain") Then

       

      If IsLoaded("frmBxmx_child_Add") = True Then
      Forms!
      frmBxmx_child_Add!lbId.Requery   
      ‘通過一個跳轉語句,跳到后面直接執行彈出提示“保存成功”的窗體,從而跳過對報銷類別新增窗體的加載,達到繼續停留在原來的報銷明細基礎窗體的 目的;

      GoTo
      100
      End If

      DoCmd.Echo False
      Forms!usysfrmMain!frmChild.SourceObject = "frm_CodeBxlb_child"
      DoCmd.Echo True
      End If
      MsgBox "
      保存成功!", vbInformation, "提示"

      100: MsgBox " 保存成功 !", vbInformation, " 提示 "  ‘通過100這個語句直接跳轉出來
      Me.lbmc = Null
      End If
      End Sub

       

       

       

      15、            為了實現提高輸入速度的目的,我們有必要對輸入的各個控件設置一個自動跳轉的功能,以及自動展開組合框列表的功能,組合框類表自動展開是通過對組合框的獲得焦點事件設置Me.lbId.Dropdown 代碼來實現;而自動跳轉是通過對上一個空間的更新后事件設置 Me.ygId.SetFocus 來實現,即在更新后事件中直接設置某個控件獲得焦點。而且這兩個功能可以同時使用,以達到提升輸入速度的目的;

      16、              輸入報銷明細的新增代碼

      Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object)

      Select Case Button
      Case "
      保存
      "
      cmd_Save
      Case "
      關閉
      "
      DoCmd.Close
      End Select
      End Sub

      Private Sub cmd_Save()
      Dim rst As DAO.Recordset

      If IsNull(Me.bxrq) Then
      MsgBox "
      請輸入報銷日期!", vbCritical, "提示:
      "
      Me.bxrq.SetFocus
      Exit Sub
      End If

      If IsNull(Me.lbId) Then
      MsgBox "
      請輸入報銷類別!", vbCritical, "提示:
      "
      Me.lbId.SetFocus
      Exit Sub
      End If

      If IsNull(Me.ygId) Then
      MsgBox "
      請輸入員工姓名!", vbCritical, "提示:
      "
      Me.ygId.SetFocus
      Exit Sub
      End If

      If IsNull(Me.bxje) Then
      MsgBox "
      請輸入報銷金額!", vbCritical, "提示:
      "
      Me.bxje.SetFocus
      Exit Sub
      End If

      Me.Refresh
      If MsgBox("
      您確認要保存嗎?", vbOKCancel + vbInformation, "提示
      ") = vbOK Then
      Set rst = CurrentDb.OpenRecordset("tblBxmx", dbOpenDynaset)
      rst.AddNew
      rst("mxId") = acchelp_autoid("M",10, "tblBxmx", "mxId")
      rst("bxrq") = Me.
      bxrq
      rst("lbId") = Me.
      lbId
      rst("ygId") = Me.
      ygId
      rst("bxje") = Me.
      bxje
      rst("bxzy") = Me.
      bxzy
      rst.Update
      rst.Close
      Set rst = Nothing
      '
      刷新數據
      If IsLoaded("usysfrmMain") Then
      DoCmd.Echo False
      Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child"
      DoCmd.Echo True
      End If
      MsgBox "
      保存成功!", vbInformation, "提示"
      Me.bxrq = Null
      Me.lbId = Null
      Me.ygId = Null
      Me.bxje = Null
      Me.bxzy = Null
      End If

      在保存之后將焦點定位到下一個新增記錄的報銷日期文本框控件上,提高輸入效率

      Me.bxrq.SetFocus
      End Sub

      設置報銷類別和員工姓名的級聯菜單,格式未組合框,報銷類別文本框的行來源屬性Select tblCodeBxlb.* FROM tblCodeBxlb; 依次修改文本框屬性的以下屬性:    

      數據選項卡

      綁定列: 1

          格式選項卡

      列數: 2

      列寬: 0cm ; 2cm

      列表行數: 20

      列表寬度: 2cm

      另外,為了實現新增數據時候日期型數據避免減少輸錯的情況,可對日期型控件進行相關設置。設置要注意的要點是,日期型數據控件的初始值賦值一般可在新增窗體的加載事件中完成,添加如下代碼:

      Me.bxrq.Value = Date

      而新增窗體的記錄集承接來自日期控件的數據時候,賦值語句要做相應的更改,即由原來的rst("bxrq") = Me.bxrq   需要修改為:rst("bxrq") = Me.bxrq.value   ;并且由于每次新增窗體給記錄集增加一條完整的新記錄集后我們需要對日期型控件重新上當天的值,而不是將其清空,所以原來的清空代碼Me.bxrq = Null需要修改為:  me.bxrq.value = Date ;

      制作修改窗體,建立空白窗體,建立5個文本框,并分別給文本框輸入標題以及給標簽屬性取名,bxrq,lbid,ygid,bxje,bxzy;修改文本框的控件來源屬性與其控件的屬性名稱是一樣的;添加彈出窗口的菜單欄控件,設置相關控件的級聯菜單。設置整個窗體的各項屬性;設置加載窗體屬性代碼:

      Me.RecordSource = "Select * FROM tblBxmx Where mxId = '" & selectstr & "'"

      同時是的模塊變量獲得記錄集的編號,方便計時器時間觸發后返回操作前光標所在位置;

      g_CurrentSelectStrID = selectstr

       

      ‘加載與selectstr相對應的當條記錄及的所有字段,通過修改窗體上的已定義好對應名稱的各個文本框控件顯示出基礎窗體光標所在行的相關字段信息。

      17、    為修改窗體鍵入如下代碼:

      Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object)

      If IsNull(Me.bxrq) Then
      MsgBox "
      請輸入報銷日期!", vbCritical, "提示:
      "
      Me.bxrq.SetFocus
      Exit Sub
      End If

      If IsNull(Me.lbId) Then
      MsgBox "
      請輸入報銷類別!", vbCritical, "提示:
      "
      Me.lbId.SetFocus
      Exit Sub
      End If

      If IsNull(Me.ygId) Then
      MsgBox "
      請輸入員工姓名!", vbCritical, "提示:
      "
      Me.ygId.SetFocus
      Exit Sub
      End If

      If IsNull(Me.bxje) Then
      MsgBox "
      請輸入報銷金額!", vbCritical, "提示:
      "
      Me.bxje.SetFocus
      Exit Sub
      End If

      Me.Refresh
      DoCmd.Echo False
      Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child"
      DoCmd.Echo True
      '
      觸發子窗體計時器事件

      Forms!usysfrmMain!frmChild.Form.TimerInterval = 300
      DoCmd.Close acForm, "frmBxmx_child_Edit"
      End Sub

      18、    查詢功能的設計與應用:由于我們在報銷明細基礎窗體的設計中就已經將相關代碼編輯進去了,故這里無需進行相關的代碼設計就可以實現查詢功能了;

      19、    創建報表

      利用向導創建一個以查詢qryBxmx為數據來源的靜態報表,選定字段為報銷類別和報銷金額,分組選項選擇報銷類別,在設計視圖中更改報表標簽、調整格式,更改報表名稱為rptBxmx這樣就建立了一個以報銷類別未分組依據的靜態報表。更改報表屬性的  工具欄屬性為rptToolBar;打開frmbxlb_child窗體,在代碼中增加以下打開本報表的代碼:

      Public Sub btnPreview()
      DoCmd.OpenReport "rptBxmx", acViewPreview
      End Sub

      由于靜態報表本身意義不大,這里我們把報表修改成為一個動態報表!驹恚和ㄟ^一個全局變量來記錄要打開那些數據源,再通過控制報表的打開事件,先判定原frmbxmx_child有無執行了一次查詢,有執行按條件查詢的話就將查詢所獲得查詢后的數據源信息賦值給全局變量strRptReSource,若沒有進行按條件查詢的話就直接將所有的數據源賦值給該全局變量,由于我們實現給報表定義數據源的代碼已經在基礎窗體制作時候完成了,所以現在就只需要對該報表的打開事件進行代碼的添加】,該動態報表的打開事件代碼如下:

      ‘先判斷全局變量strRptReSource是否為空,

      If strRptReSource = "" Then

      ‘為空的話表示基礎窗體沒有對數據源進行查詢,也就是篩選數據源,所以現在如果要打開報表,所獲得的數據源應該是整個基礎窗體的數據源
      Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource
      Else

      ‘不為空的話就直接將賽選過的數據源復制給該全局的值付給報表作為數據來源
      Me.RecordSource = strRptReSource
      End If

      20、    制作一個以人員為分類依據的動態報表,命名為rptbxmx_yg;其打開事件代碼同樣要輸入以下代碼:

      If strRptReSource = "" Then
      Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource
      Else
      Me.RecordSource =
      strRptReSource
      End If

      21、    由于現在有基于兩個不同種的分類的報表,所以我們要制作一個打開報表的中轉切換面板,找到frmbxmx_child的代碼窗口中的如下代碼:

      Public Sub btnPreview()

      DoCmd.OpenReport "rptBxmx", acViewPreview

      End Sub

      將其修改為以下代碼:

      Public Sub btnPreview()

      ‘打開frmBxmx_child_rpt窗體
      DoCmd.OpenForm "frmBxmx_child_rpt"
      End Sub

      在制作frmbxmx_child_rpt窗體的時候,其他選項卡的模式屬性,將其從默認值否,這是與其他新增、修改等窗體不同的地方,如果模式選項屬性選擇是的時候,你會發現當你運行你的功能時候,彈出報表后,報表并沒有獲得焦點,而原來的主數據窗體卻是你的焦點,不符合我們的使用習慣。

      當然這個選擇窗體我們完全可以不用像教程那樣復雜的制作,只用做兩個功能按鈕就行了,單擊按鈕一彈出按報銷類別匯總的報表,單擊按鈕二彈出按員工姓名匯總的報表。這屬于非;A的部分,在VBA基礎知識里單擊事件的講座里就有了,這里不寫了。

      最后這一段其實體現的是一個道理,就是我們程序要實現一個功能不是只有一種方法,而是有很多種方法,有的方法簡單,有的方法系統,有的方法可能是為以后其他的在做考慮,遇到跟教程有不同想法的地方,可先跟著教程聯系,通過后,也可以嘗試用自己的構思,看是否也能解決或者實現相應功能。達到舉一反三的作用。

      至此,報銷管理教程學習完畢。期間雖有很多代碼有些不是太明白,但能夠看懂大概就行了,相信隨著學習的深入,這些問題將不在是問題。


      Access軟件網交流QQ群(群號:198465573)
       
       相關文章
      學習報銷管理系統后感  【陳明杰  2010/5/6】
      VBA基礎教程及報銷教程學習心得  【清清山泉  2010/8/3】
      報銷教程學習心得  【夸越時空  2010/11/8】
      報銷教程之學習小結  【張曉  2011/3/23】
      對于報銷教程之學習小結  【陸晨杰  2011/5/25】
      報銷系統學習筆記  【Aaron  2011/6/11】
      學習報銷教程小結  【煮茶論道  2011/6/20】
      報銷系統課程學習心得  【徐海軍  2011/9/21】
      報銷教程學習小結筆記  【高嵩  2011/11/10】
      學習報銷教程心得  【黃金地段  2011/11/14】
      我的學習筆記之《報銷管理系統制作流程概要》  【李賢海  2011/11/24】
      我的access2007報銷管理系統學習心得總結  【小李哥  2011/11/29】
      個人學習報銷教程的小結  【邢金玲  2012/1/5】
      報銷管理系統學習體會筆記  【風信子  2012/2/14】
      報銷系統學習總結  【沙洲冷  2012/7/24】
       
       訪客評論
      2012/7/28杜小杰
      UP

      2012/7/28麥田
      夠認真的

      總記錄:2篇  頁次:1/1 9 1 :
       
       發表評論
      評論內容 (必填)

      常見問答
      技術分類
      相關資源
      文章搜索
      關于作者

      七夜

      文章分類

      文章存檔

      友情鏈接
       
         
      湖北11选5