線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1920
推到 Plurk!
推到 Facebook!

用Delphi程式維護Paradox 資料表的索引

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-19 14:22:21 IP:61.221.xxx.xxx 未訂閱
用Delphi程式維護Paradox 資料表的索引 -------------------------------------------------------------------------------- 在 數 據 庫 編 程 中, 索 引 文 件 對 於 改 善 數 據 查 詢 速 度 有 著 舉 足 輕 重 的 作 用, 充 分 使 用 索 引 文 件 可 以 極 大 改 善 數 據 庫 應 用 程 序 的 性 能, 這 一 點 恐 怕 是 難 以 否 認 的. 在 應 用 過 程 中, 用 戶 的 查 詢 條 件 可 能 是 多 種 多 樣 的, 如 果 能 根 據 用 戶 查 詢 建 立 和 選 擇 索 引, 對 於 保 證 應 用 程 序 的 性 能, 無 疑 是 很 有 幫 助 的. 另 外, 由 於 停 電 等 意 外 事 故 很 容 易 造 成 數 據 庫 中 的 索 引 文 件 未 及 時 更 新 甚 至 於 損 壞, 此 時 如 果 應 用 程 序 再 出 幾 個 錯 誤 信 息, 無 疑 將 使 用 戶 的 處 境 雪 上 加 霜. 因 而, 動 態 維 護 數 據 庫 索 引 文 件, 將 使 你 的 數 據 庫 應 用 程 序 更 有 穩 定 性 和 可 靠 性. 筆 者 將 以Delphi 編 程 中 常 用 的Paradox 數 據 庫 ? 例, 介 紹 數 據 庫 索 引 文 件 的 動 態 維 護. Paradox 數 據 表 索 引 分 ? 主 索 引(Primary Index) 即 關 鍵 字(Primary Key) 索 引 和 次 索 引(Secondary Index), 其 中 主 索 引 對 應.PX 文 件, 次 索 引 對 應.XG* 和.YG* 文 件. 一. 創 建 表 索 引 (1) 用Table.AddIndex 來 實 現 方 法:AddIndex( IndexName,FieldNames,Options ) 其 中:( 詳 見Delphi 幫 助) IndexName: 索 引 名 稱, 僅 在 指 定 次 索 引 時 有 作 用. FieldNames: 索 引 域, 可 指 定 多 個 域, 各 域 之 間 用 分 號 隔 開, 如'Field1;Field2;Field3' Options: 索 引 選 項, 可 ?[ixPrimary, ixUnique, ixDescending, ixCaseInsensitive, ixExpression] 其 中: ixPrimary : 建 立 的 索 引 ? 主 索 引( 不 適 用 於dBase 數 據 表). ixUnique : 不 允 許 重 複 值 的 索 引. ixDescending: 按 降 序 索 引. ixCaseInsensitive: 索 引 排 序 時 按 忽 略 大 小 寫( 不 適 用 於dBase 數 據 表). ixExpression: 建 立 表 達 式 索 引( 適 用 於Delphi3.0, 僅 適 用 於dBase 數 據 表). ixNonMaintained: 是 否 不 需 要BDE 自 動 維 護( 適 用 於Delphi1.0). 下 面 是 一 個 例 子: 假 設 有 一 個 存 放 通 訊 錄 數 據 表MyComm.DB( 類 型 ?Paradox) 存 放 於 本 地 目 錄d:\mynote 下, 現 建 立 一 個 主 索 引( 索 引 域 ? 編 號ID) 和 一 個 次 索 引( 索 引 域 ? 編 號ID 和 姓 名Name, 索 引 名 稱 ?NameIndex). with table1 do begin close; Exclusive := true; DatabaseName := 'd:\MyNote'; TableName := 'MyComm.DB'; Open; {建立主索引 } AddIndex('','ID',[ixPrimary]); {建立次索引 } AddIndex('NameIndex','ID;Name',[]); close; end; (2)用SQL來實現 對Paradox資料表來說,用SQL只能建立次索引. 在SQL語法中,用來建立索引的語句是: Create Index IndexName On TableName (IndexField1,IndexField2,..) 其中: IndexName?一個次索引的名稱,如MySecIndex1等. TableName?對應資料表的名稱,如MyTable等. TableName後面?索引域列表,所有索引域有圓括號括起來, 各索引域之間用逗號隔開. 下 面 是 一 個 例 子: 假 設 有 一 個 存 放 通 訊 錄 數 據 表MyComm.DB( 類 型 ?Paradox) 存 放 於 本 地 目 錄 d:\mynote 下, 現 建 立 一 個 次 索 引( 索 引 域 ? 編 號ID 和 姓 名Name, 索 引 名 稱 ?NameIndex). with query1 do begin close; DatabaseName := 'd:\MyNote'; {建立次索引NameIndex} sql.clear; sql.add( 'Create Index NameIndex On MyComm(ID,Name)' ); execSql; end; 二. 刪 除 表 索 引 (1) 用Table.DeleteIndex 來 實 現 DeleteIndex 只 能 刪 除 次 索 引 名 稱. 方 法:DeleteIndex( IndexName ) 其 中:( 詳 見Delphi 幫 助) IndexName: 次 索 引 名 稱. 下 面 是 一 個 例 子: 假 設 有 一 個 存 放 通 訊 錄 數 據 表MyComm.DB( 類 型 ?Paradox) 存 放 於 本 地 目 錄 d:\mynote 下, 現 有 一 個 次 索 引( 索 引 域 ? 編 號ID 和 姓 名Name, 索 引 名 稱 ?NameIndex), 將 刪 除 之. with table1 do begin close; Exclusive := true; DatabaseName := 'd:\MyNote'; TableName := 'MyComm.DB'; Open; {刪除次索引} DeleteIndex('NameIndex'); close; end; (2) 用SQL 來 實 現 在SQL 語 法 中, 用 來 刪 除 索 引 的 語 句 是: Drop Index TableName.IndexName 要 刪 除 次 索 引 時,IndexName ? 一 個 次 索 引 的 名 稱, 如'MyTable.MySecIndex1' 等. 要 刪 除 主 索 引 時,IndexName ?'primary', 如'MyTable.primary'; 值 得 注 意 的 是, 在 刪 除 主 索 引 成 功 後, 數 據 表 的 所 有 次 索 引 也 自 動 刪 除. 下 面 是 一 個 例 子: 假 設 有 一 個 存 放 通 訊 錄 數 據 表MyComm.DB( 類 型 ?Paradox) 存 放 於 本 地 目 錄 d:\mynote 下, 已 定 義 一 個 主 索 引( 索 引 域 ? 編 號ID) 和 一 個 次 索 引( 索 引 域 ? 編 號ID 和 姓 名Name, 索 引 名 稱 ?NameIndex). 現 在 因 ? 索 引 損 壞, 要 刪 除 索 引, 以 便 重 新 索 引. with query1 do begin close; DatabaseName := 'd:\MyNote'; {刪除次索引NameIndex } sql.clear; sql.add( 'Drop Index MyComm.NameIndex' ); execSql; {刪除主索引 } sql.clear; sql.add( 'Drop Index MyComm.Primary' ); execSql; end; 三. 注 意 事 項: (1) 在 索 引 更 改 時, 應 保 證 對 應 的 數 據 表 可 以 以 獨 占 方 式(Exclusive=true) 打 開, 否 則 會 引 起 錯 誤. (2) 上 述 方 法 略 加 修 改 後, 也 可 用 於dBase,Oracle 等 其 它 數 據 庫 的 數 據 表. (3) 如 果 需 要 重 新 對 索 引 文 件 進 行 索 引, 請 參 考BDE 的Dbi 函 數 說 明: RegenIndex, RegenIndexes. (4) 以 上 程 序 在Delphi3.0 下 測 試 通 過。
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-15 5:54:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!