《十七章BorlandDatabaseEngine》由会员分享,可在线阅读,更多相关《十七章BorlandDatabaseEngine(41页珍藏版)》请在金锄头文库上搜索。
1、第十七章Borland Database EnginenForm WizardnTable 與連繫元件nTable 的屬性與方法nTqueryn資料庫與統計圖1 7 -1 Form WizardnForm Wizard 是一種精靈的方式, 一步一步指導使用者建立資料表的輸出入表單, 請看以下範例說明。範例17-1an請使用Form Wizard 建立一個fri.db 的輸出入表單。17 -2 Table 與連繫元件n在資料庫程式設計裡, 常見的資料存取方式是透過連繫元件, 逐一巡覽、編輯資料庫。利用此一方式存取資料可不用寫任何程式, 即可完成資料編輯任務, 其缺點是只能逐筆由使用者目視搜尋;
2、另一種方式是自己寫程式進行資料編輯, 這種方式比較彈性, 您可以自己下達指令進行記錄的新增、或搜尋後修改、刪除等任務, 請看17-3 節。資料連繫元件nBCB 的資料連繫元件, 如下圖所示, 這些元件可以配合各種資料源元件(例如BDE 、ADO 、dbExpress 或InterBase) 來展示資料表的記錄, 讓程式設計者不用寫任何程式即可完成資料的編輯動作。BCB 的資料連繫元件有二維表格的DBGrid (請看範例17-2a), 個別欄位的連繫元件則有DBText 、DBEdit 、DBMemo 、DBImage, 讓程式設計者不用寫任何程式即可逐筆瀏覽、新增、修改、刪除含有文字(Alph
3、a) 、備註(Memo) 及圖形(Graphic) 等型別的欄位, 請看範例17-2b 。範例17-2an示範以Table 元件配合二維表格連繫元件DBGrid 存取fri.db 的內容。範例17-2bn示範個別欄位連繫元件的使用。欄位編輯器n以上都是透過人工的方式連繫資料庫, BCB 另有一種資料連繫方式, 稱為欄位編輯器, 也可以縮短應用程式的開發, 它的優點是程式設計者可以將欄位編輯器的欄位物件直接拖曳到表單, 即可完成輸出入表單的製作。此外欄位編輯器另有兩種特殊欄位, 分別是計算欄位與查閱欄位。計算欄位n依據資料庫正規化的規則, 可計算而得的欄位不能放入資料庫。所以,若某一欄位可由同一
4、資料庫的某些資料表的某些欄位計算而得, 則稱此欄位為計算欄位, 且此欄位不能存入資料庫。例如, 若某一資料表已有國文、英文與數學成績, 則此三科的平均, 並不能儲存入資料庫, 往後若要求其平均, 均要自行計算。為了減輕程式設計師的負擔, BCB 便提供 計算欄位供程式設計師使用。關於計算欄位的使用, 請看範例17-2d查閱欄位n依據資料正規化的規則, 為求欄位內容的單一性, 任何欄位均只能在同一資料庫出現一次。所以, 若某一欄位需要在不同的欄位重覆引用, 則應將此欄位先以代碼表示, 然後任一資料表需引用此欄位時, 均以代碼表示。例如, 學校的成績處理系統, 學生的名字已存在學生基本資料表, 則
5、每次在輸入成績資料時, 便不能再輸入學生姓名與成績, 只能以學生代碼與成績的方式輸入, 以免造成資料的重覆性。所以在學生成績資料表中就沒有學生姓名, 若要取得學生姓名, 則可透過欄位編輯器的查閱欄位至學生基本資料表查閱而得, 請看範例17-2e 。範例17-2cn請以欄位編輯器展示stugrd.db 的內容。範例17-2dn同上範例, 但增加 平均 欄位, 計算國、英及數三科的平均。範例17-2en同上範例, 但增加查閱欄位, 印出學生姓名, 其中含有姓名欄的stuname.db 內容如下圖:主要次要明細(Master Detail)n於學生資料表中, 通常一個學生含有許多次的考試成績, 或於
6、客戶資料表中, 每一個客戶通常都有好幾筆交易, 這就是一種一對多的關係, 例如stuname.db 是學生基本資料表, 資料內容請參閱範例17-2e 。(為了能產生關聯, 其中Id 欄已製作索引。)nstugrd.db 是每位學生的每次考試成績資料表, 如右圖。(為了能與stuname.db 產生關聯, 其中Id 欄已製作索引)n以下範例將介紹如何於觀看學生基本資料表(stuname.db) 時, 能同時顯示指定學生的全部成績, 此即為 主要/ 次要明細 的功能。範例17-2fn以Table 示範主要/ 次要明細表。17 -3 Table 的屬性與方法n上一節使用資料庫連繫元件, 所以不用任何
7、程式即可瀏覽與編輯資料庫內容。其優點是省時省事, 但這些功能對實務的進銷存等問題, 還是不足, 本節要說明的是Table 的屬性與方法如下:資料項屬性n自行使用Table 的方法存取資料庫, 仍然可以使用上一節連繫元件存取資料項, 若不使用連繫元件, 則可使用以下資料項屬性存取資料項。Table1-FieldValues 欄位名稱 ;Table1-FieldByName( 欄位名稱)-型別轉換函數;Table1-Fields-Fields欄位索引-型別轉換函數;在以上敘述中, 型別轉換函式可為AsVariant 、AsSring 、AsInteger 、AsFloat 、AsCurrency
8、、AsDateTime 及AsBoolean, 其目的是將原始資料轉為與目的物件相同的資料型別。例如, 以下式子均可取得grade.db 的Name欄位。Edit1-Text = Table1-FieldValuesName ;Edit1-Text = Table1-FieldByName(Name)-AsString ;Edit1-Text = Table1-Fields-Fields0-AsString ;n若已將欄位物件(TField) 加入欄位編輯器, 則可使用欄位物件名稱, 代表某一資料項, 例如以下式子是代表存取Name 欄位的內容。Table1Name-Value / 要注意大小
9、寫Ta b le 1Name - AsS t r i ng記錄指標n每一個資料集均有一個記錄指標, 如下圖。此記錄指標的功能即為指向記錄編輯對象, 也就是往後資料表的新增、修改與刪除對象均是此記錄指標所指的記錄。nTable 元件移動記錄指標的方式如下表:開啟或關閉資料表nTable 元件移動記錄指標的方式如下表:範例17-3an示範各種記錄項屬性的用法與指標的移動。增加或刪除記錄n增加或刪除一筆記錄的方法如下表:編輯(Edi t)或寫入(Post)狀態n編輯或寫入狀態的設定方法如下表:循序查詢(不用索引檔)n不用索引檔的資料查詢方法如下表:索引查詢n使用索引查詢將可縮短查詢時間, 索引查詢方
10、法如下表:範例17-3b示範Locate 查詢, 並修改記錄內容。題目分析n於fri.db 中, 查詢 洪子堯, 若資料表中有此記錄, 則將指標移到 洪子堯, 並將 洪子堯 的身高欄位改為110 。範例17-3cn示範Lookup 查詢。範例17-3dn示範Gotokey, 並修改紀錄內容。範例17-3en示範Findkey, 並修改紀錄內容。範例17-3fn示範紀錄的新增與刪除。17 -4 TQu e r yn前面的Table 元件是一種程序式的語言, 你必須一步一步的告知編繹器你要怎麼作, 例如你必須一步一步的移動記錄, 然後更正資料, 但本節的Query 元件可以下達SQL 敘述, SQ
11、L 敘述的優點為它是非程序性語言, 例如你要從fri.db 中取身高大於160 的記錄, 只要下達以下SQL 敘述:Select * From fri Where Height 160 / 身高的欄位為Heightn至於編繹器取資料的過程如何, 你都可以不必了解。SQL 敘述的另一優點是提升執行速度, 因為SQL 敘述可以在眾多資料表中只取合乎條件的部份欄位出來, 不像Table 元件會將牽涉到的資料表全部提出, 所以只要資料庫系統慢慢龐大之後, 使用Table 元件所撰寫的程式都會造成網路及記憶體很大的負載。使用SQL 敘述的第三優點為SQL 是一種資料庫廠商標準語言, 只要學一次SQL 敘
12、述, 下次你換一種程式語言, 都不用重新學習, 即可以將SQL 敘述, 套上新的語言。對於SQL 敘述不熟的讀者請看第十九章。nQuery 元件可於設計階段與執行階段下達SQL 敘述, 以下我們將分別於設計階段與執行階段說明Query 元件的使用。範例17-4an如何於設計階段執行SQL 敘述。(本例欲連結別名為horng 的資料庫,資料表為stugrd.db)範例17-4bn同上範例, 但於執行階段執行SQL 敘述。範例17-4cn同上範例, 但加上參數的傳遞。範例17-4dn示範如何關聯多個資料表。範例17-4en如何新增、刪除及更正資料。範例17-4fn如何由使用者於執行階段下達SQL 敘述。範例17-4gn同上範例, 但設計一個更具親和性的搜尋資料介面。1 7 - 5 資料庫與統計圖n我們於10-16 節已介紹Chart 元件的用法, 其功能為繪製各種統計圖, 本節則要介紹資料庫的繪圖元件DBChart 。DBChart 是繼承Chart 的元件, 所以其用法大致與Chart 相同, 只是多了連繫屬性DataSouce 與ValueSource 。以下將示範如何將grade.db 的內容以DBChart 表現, grade.db 內容如下:範例17-5an如何將grade.db 的內容以DBChart 表現。