亚洲av色香蕉一区二区三区,十四以下岁毛片带血a级,亚洲 校园 欧美 国产 另类,亚洲av日韩av一区谷露,色欲av无码一区二区三区

  • 相關(guān)軟件
    >利用VB動(dòng)態(tài)設(shè)計(jì)多“主細(xì)表”應(yīng)用 創(chuàng)建者:webmaster 更新時(shí)間:2005-07-02 01:44

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

      一.數(shù)據(jù)庫的建立


      一個(gè)設(shè)計(jì)合理的數(shù)據(jù)庫就是管理軟件成功的一半。因此我們?cè)陂_發(fā)之初就應(yīng)該先慎重設(shè)計(jì)好數(shù)據(jù)庫的結(jié)構(gòu)。筆者在開發(fā)人事管理軟件時(shí)建立一個(gè)名為:HR.mdb的數(shù)據(jù)庫,該庫包括下面三個(gè)表:
     


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


      很顯然,Employee與Vita和Relative表之間是“一對(duì)多”的關(guān)系。即一條Employee記錄對(duì)應(yīng)多條Vita和Relative記錄,亦即Employee為主表,Vita和Relative為細(xì)表。由于在設(shè)計(jì)ACCESS數(shù)據(jù)庫時(shí)每個(gè)表必須要有一個(gè)主關(guān)鍵字(PrimaryKey),因此筆者設(shè)計(jì)了一個(gè)“職工ID”字段作為三個(gè)表相互連接的字段,同時(shí)也作為Employee表的主關(guān)鍵字。而另外兩個(gè)表的主關(guān)鍵字就采用自動(dòng)編號(hào)(AutoNum)字段了。


      二.建立表之間的連接


      數(shù)據(jù)庫設(shè)計(jì)好之后就可以著手設(shè)計(jì)各種應(yīng)用,但程序設(shè)計(jì)中關(guān)鍵的問題是如何建立“主細(xì)表”之間的連接。


      建立“主細(xì)表”之間的連接有兩種方法:


      1、利用VB的數(shù)據(jù)窗體向?qū)伞爸骷?xì)表”的連接。


      根據(jù)向?qū)?,可以生成一個(gè)主表和一個(gè)細(xì)表的連接。但是這種方法生成的連接有它的缺陷。首先是它只能生成兩個(gè)表的連接,對(duì)我們上面所說的情況就無能為力了;其次是開發(fā)者在為向?qū)峁?shù)據(jù)庫時(shí),系統(tǒng)把數(shù)據(jù)庫的絕對(duì)路徑加入了DATA控件,非常不利于程序的分發(fā)。下面介紹筆者使用的一種方法。


      2、動(dòng)態(tài)創(chuàng)建“主細(xì)表”的連接


      新建一個(gè)Form,然后添加三個(gè)DATA控件和三個(gè)DBGRID控件。三個(gè)DATA控件的名稱分別為:datPrimaryRS,datSecondaryRS,DatThirdRS;三個(gè)DBGRID控件的名稱分別為:grdPrimaryRS,grdSecondaryRS,grdDatThirdRS。三個(gè)DATA控件Form上既沒有指定DatabaseName,也沒有指定RecordSource,只是在Form調(diào)用時(shí)才動(dòng)態(tài)賦值。三個(gè)DBGRID控件倒是指定了所對(duì)應(yīng)的DATA控件。下面是Form_Load()函數(shù):
     


    PrivateSubForm_Load()
    datPrimaryRS.DatabaseName=App.path&“ HR.mdb”
    datPrimaryRS.RecordSource=
    "select*from[Employee]Orderby[職工ID]"
    datSecondaryRS.DatabaseName=App.path&“ HR.mdb
    datThirdRS.DatabaseName=App.path&“ HR.mdb
    '創(chuàng)建主表網(wǎng)格記錄集
    datPrimaryRS.Refresh
    EndSub


      這里只是創(chuàng)建和顯示了主表的數(shù)據(jù),那么兩個(gè)細(xì)表的數(shù)據(jù)如何創(chuàng)建和顯示呢?從主細(xì)表的概念我們知道,我們查看主表的任何一條記錄,細(xì)表必須同時(shí)顯示出對(duì)應(yīng)的多條記錄。因此我們必須對(duì)主表的任何一條記錄成為當(dāng)前記錄時(shí)觸發(fā)的事件編碼。而該事件就是Reposition。
     


    PrivateSubdatPrimaryRS_Reposition()
    Screen.MousePointer=vbDefault
    OnErrorResumeNext
    datSecondaryRS.Refresh
    DatThirdRS.Refresh
    '使網(wǎng)格與主表記錄集同步
    datSecondaryRS.RecordSource="select[職工ID],
    [起始日期],[終止日期],[所在單位及部門],[任職情況]
    from[Vita]where[職工ID]="&datPrimaryRS.Recordset!
    [職工ID]&"Orderby[起始日期]"
    DatThirdRS.RecordSource="select[職工ID],[親人姓名],
    [關(guān)系],[所在單位及部門],[任職情況]
    from[Relative]where[職工ID]="&
    datPrimaryRS.Recordset![職工ID]&""
    datSecondaryRS.Refresh
    DatThirdRS.Refresh
    '為dynasets和快照顯示當(dāng)前記錄位置
    datPrimaryRS.Caption="當(dāng)前記錄:"&
    (datPrimaryRS.Recordset.AbsolutePosition+1)
    EndSub


      很顯然,如果有三個(gè)、四個(gè)…等多個(gè)細(xì)表也可以如法炮制。


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

    相關(guān)文章
    本頁查看次數(shù):