|
|
导航: |
论坛 -> 论坛精华贴
斑竹:liumazi,iamdream |
|
作者: |
|
2003/5/7 0:44:21 |
标题: |
动态改变据库表(Access库)的索引 |
浏览:4639 |
|
加入我的收藏 |
楼主: |
如何在delphi程序里实现:
1.动态改变据库表的索引,如删除索引。
2.动态改变数据库表(Access库)间关联的属性,如把级联更新加上。 我的QQ号:31989727。 谢谢! kk
----------------------------------------------
各位老兄好!谢谢大家帮助支持,希望我们互相学习,共同畅游这知识的海洋。 |
作者: |
|
2003/5/7 12:11:52 |
1楼: |
抄的,你研究一下:
---- 以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] ---- 下面是一个例子:
---- 假设有一个存放通讯录数据表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.
----------------------------------------------
|
作者: |
|
2003/5/7 21:50:55 |
2楼: |
谢谢你,以后我还会有很多机会麻烦你的,还望你多多指教。
----------------------------------------------
各位老兄好!谢谢大家帮助支持,希望我们互相学习,共同畅游这知识的海洋。
|
作者: |
|
2004/12/24 9:35:48 |
3楼: |
如何做一个简单工资系统
----------------------------------------------
杨霁人
|
作者: |
|
2011/7/13 22:05:09 |
5楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2011/7/13 22:09:02 |
6楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2011/7/13 22:44:45 |
7楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2011/7/13 22:58:17 |
8楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2011/7/26 0:28:57 |
9楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2011/8/10 21:58:49 |
10楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
|