• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    利用VB動態設計多“主細表”應用

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 19次 | 進入軟件測試論壇討論

    領測軟件測試網 方云波

    ---- 在開發人事管理軟件的工程中,當我們建立一個職工檔案記錄時,通常都會遇到設計職工履歷表、職工家屬情況的問題,我這里介紹一種用“主細表”方法的開發思路。

    ---- 一. 數據庫的建立

    ---- 一個設計合理的數據庫就是管理軟件成功的一半。因此我們在開發之初就應該先慎重設計好數據庫的結構。筆者在開發人事管理軟件時建立一個名為:HR.mdb的數據庫,該庫包括下面三個表:


    職工的自然情況一般是下面這些內容的:(Employee)
    職工姓名 性別 出生日期 民族 政治面貌 婚否……
    職工履歷表的內容一般是下面這些內容的:(Vita)
    起始時間 終止時間 所在單位及部門 任職情況……
    職工家屬情況一般是下面這些內容的:(Relative)
    親人姓名 與本人關系 所在單位及部門 任職情況……

    ---- 很顯然,Employee 與Vita和Relative表之間是“一對多”的關系。即一條Employee記錄對應多條Vita和Relative記錄,亦即Employee為主表,Vita和Relative為細表。由于在設計ACCESS數據庫時每個表必須要有一個主關鍵字(Primary Key),因此筆者設計了一個“職工ID”字段作為三個表相互連接的字段,同時也作為Employee表的主關鍵字。而另外兩個表的主關鍵字就采用自動編號(AutoNum)字段了。

    ---- 二. 建立表之間的連接

    ---- 數據庫設計好之后就可以著手設計各種應用,但程序設計中關鍵的問題是如何建立“主細表”之間的連接。

    ---- 建立“主細表”之間的連接有兩種方法:

    ---- 1、 利用VB的數據窗體向導生成“主細表”的連接。

    ---- 根據向導,可以生成一個主表和一個細表的連接。但是這種方法生成的連接有它的缺陷。首先是它只能生成兩個表的連接,對我們上面所說的情況就無能為力了;其次是開發者在為向導提供數據庫時,系統把數據庫的絕對路徑加入了DATA控件,非常不利于程序的分發。 下面介紹筆者使用的一種方法。

    ---- 2、 動態創建“主細表”的連接

    ---- 新建一個Form,然后添加三個DATA控件和三個DBGRID控件。三個DATA控件的名稱分別為:datPrimaryRS,datSecondaryRS,DatThirdRS;三個DBGRID控件的名稱分別為:grdPrimaryRS,grdSecondaryRS,grdDatThirdRS。三個DATA控件Form上既沒有指定DatabaseName,也沒有指定RecordSource,只是在Form調用時才動態賦值。三個DBGRID控件倒是指定了所對應的DATA控件。下面是Form_Load()函數:


    Private Sub Form_Load()
    datPrimaryRS.DatabaseName = App.path & “\HR.mdb”
    datPrimaryRS.RecordSource =
    "select * from [Employee] Order by [職工 ID]"
    datSecondaryRS.DatabaseName = App.path & “\HR.mdb
    datThirdRS.DatabaseName = App.path & “\HR.mdb
    '創建主表網格記錄集
    datPrimaryRS.Refresh
    End Sub

    ---- 這里只是創建和顯示了主表的數據,那么兩個細表的數據如何創建和顯示呢?從主細表的概念我們知道,我們查看主表的任何一條記錄,細表必須同時顯示出對應的多條記錄。因此我們必須對主表的任何一條記錄成為當前記錄時觸發的事件編碼。而該事件就是Reposition。


    Private Sub datPrimaryRS_Reposition()
    Screen.MousePointer = vbDefault
    On Error Resume Next
    datSecondaryRS.Refresh
    DatThirdRS.Refresh
    '使網格與主表記錄集同步
    datSecondaryRS.RecordSource = "select [職工ID],
    [起始日期],[終止日期],[所在單位及部門],[任職情況]
    from [Vita] where [職工ID]=" & datPrimaryRS.Recordset!
    [職工ID] & " Order by [起始日期]"
    DatThirdRS.RecordSource = "select [職工ID],[親人姓名],
    [關系],[所在單位及部門],[任職情況]
    from [Relative] where [職工ID]=" &
    datPrimaryRS.Recordset![職工ID] & ""
    datSecondaryRS.Refresh
    DatThirdRS.Refresh
    '為 dynasets 和快照顯示當前記錄位置
    datPrimaryRS.Caption = "當前記錄: " &
    (datPrimaryRS.Recordset.AbsolutePosition + 1)
    End Sub

    ---- 很顯然,如果有三個、四個…等多個細表也可以如法炮制。

    ---- 至此,一個靈活的,表數不限的主細表連接就建立起來了。只要將三個DBGRID的AllowAddNew、AllowDelete和AllowUpdate三個屬性設置為TRUE,那么就可以對這些主細表進行各種數據庫表作了。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>