|
|
 |
用Dephi程序维护Paradox 数据表的索引 |
热 ★★★★ |
|
用Dephi程序维护Paradox 数据表的索引 |
|
作者:闵涛 文章来源:闵涛的学习笔记 点击数:990 更新时间:2009/4/23 18:24:04  |
|
|
索引文件对于改善数据查询速度有着举足轻重的作用,充分使用索引文件可以极大改善数据库应用程序的性能,这一点恐怕是难以否认的.
在应用过程中,用户的查询条件可能是多种多样的,如果能根据用户查询建立和选择索引,对于保证应用程序的性能,无疑是很有帮助的.
另外,由于停电等意外事故很容易造成数据库中的索引文件未及时更新甚至于损坏,此时如果应用程序再出几个错误信息,无疑将使用户的处境雪上加霜.
因而,动态维护数据库索引文件,将使你的数据库应用程序更有稳定性和可靠性.笔者将以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; 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下测试通过。
没有相关教程
|
|
| 教程录入:mintao 责任编辑:mintao |
|
|
上一篇教程: 有“背景”的窗体 下一篇教程: 用修改文件时间的方法来加密文件 |
|
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网] |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| |
|
|
|
|
|
 |
同类栏目 |
 |
 |
赞助链接 |
 |
|
500 - 内部服务器错误。
|
|
|
|
|
|