最近我在用Table组件编写单机数据库程序,基中用到Table的AddIndex方法,可是看了
Delphi的连机帮助和资料上的例子,都不能达到结果,真的有点麻烦,现在我把开发过程
和各位说一下,希望高手和行家指点指点,我快被逼疯了。:(开发环境如下,家里和单位都是同样的运行结果。
单位:Windows2000 professional,Delphi EnterPrise 6.0 (Build6.163)
同系统装有Visiual Stuio 6.0 (VC,VB,VFP)(同装有问题吗?) 家里: Windows98第二版,Delphi EnterPrise 6.0 (Build6.163)
同系统装有Visiual Stuio 6.0 (VC,VB,VFP)(同装有问题吗?)开发要求:
使用Table组件的AddIndex方法给一个已存在的数据表建立索引。步骤:
1. 数据表为D:\Delphi\DBF\UnsDay.DB,Paradox的
2. 建立BDE别名:BDE_DB
type: standard
default driver: Paradox
Endable Bcd: False
Path: D:\Delphi\DBF
3. 建立一个空的的窗体,放一个Table组件,一个DataSource组件,一个DBGird组件,
和一个按钮。
Table组件连接表,DataSource的DataBaseName属性为Table1,DBGird的
DataBaseName属性为DataSoure1,Table的DataBaseName为BDE_DB,Table属性为
Unsday.db,Active为true,然后建立按钮的Click事件。4.编辑Click事件代码:
procedure TForm3.Button1Click(Sender: TObject);
begin
Table1.Active:=False;
Table1.AddIndex('IdxStime','STIME',[ixPrimary]);// 其中STIME是一个字段名.
Table1.Active:=True;
end;5. 保存并按F9运行,出现EBDEngineError异常,'Table is busy'错误。问题:表是忙的?我的数据表这时除了Delphi在使用,没有其它程序在用。此时我在CSDN
上问了一下,并查了一些资料,加入如下语句,但还是不行,问题依旧‘Table is
busy’。 Table1.Active:=False;
Table1.Close;
Table1.Exclusive:=True; Table1.AddIndex('IdxStime','STIME',[ixPrimary]); Table1.Exclusive:=False;
Table1.Open;
Table1.Active:=True;
后又想到把其它组件与Table的连接断开,用Table的DisableControls和Enable
Controls两个属性,编译运行,不行!
Table1.DisableControls;
Table1.Active:=False;
Table1.Close;
Table1.Exclusive:=True; Table1.AddIndex('IdxStime','STIME',[ixPrimary]); Table1.Exclusive:=False;
Table1.Open;
Table1.Active:=True;
Table1.EnableControls; 想了很久,觉得表忙的话是不是有程序在用,或是组件?与是把Table组件与其它
组件断开,去掉DataSoure和DBGird组件,再编译运行,不行! 然后我在www.yahoo.com中输入Table is busy关键字搜索到一篇英文资料,说是
表好象要锁定什么的,于返回Delphi帮助,查到Table类的方法lock和unlock,
表忙的错误没了,可是又出现双重否定的结果,说是索引不能建在关闭的DataSet
上,与是把DataSet打开(open或active:=true),又说索引不能建在打开的DataSeth ,天哪?索引即不能建在打开的数据集上,也不能在关闭的数据集上,那在
什么上可建呢?我快疯了,感觉被BDE给嫖死了!!!!!!!!! Table1.Active:=False;
Table1.Close;
Table1.Exclusive:=True;
Table1.LockTable(ltWriteLock); // 锁定表,一开始我是读锁定,不行,改成
// 写锁定是可以了。 Table1.AddIndex('IdxStime','STIME',[ixPrimary]); Table1.UnLockTable(ltWriteLock);
Table1.Exclusive:=False;
Table1.Open;
Table1.Active:=True; 已经过去两天了,我在CSDN上也提了很多个这样的问题,可最终还是没有建成索引,
Delphi的帮助只介绍了AddIndex方法本身的用法,示例也就是一句,连Active要
设成False的提示也没有,就是说AddIndex相关的其它东西都没有说。很多网友让
我看帮助,可是我已经看了N次了,自认为英文还能过的去,实在不行时用金山词霸
指点一下。 再次,我将Table的类库DBtables.pas中的AddIndex函数中的每一个执行语句后加
入ShowMessage提示,想知道运行哪一个语句错了,可惜没有一个看到,可见连
AddIndex函数体都没有进入,和我用F7调试结果一样,为什么呢? 然后我去看BDE,设置也是好的,用SqL Expoloer的SQL语句
Create index idxstime on unsday (stime) 建立索引是可以的,BDE没问题
呀。
有哪位高手知道我的这个问题是怎么产生的?如何解决?是代码语句问题还是该语句 的相关配合设置没有设好?或是BDE有问题? 很多网友贴出来的关于AddIndex方法资料文章似乎和我已有一样,没有上机测试过,
另外,Delphi的版本不同,同一方法的使用也有不一样的。这里谢谢了。 谁能告诉我如何DeBug???????????????????????????????????????????
Delphi的连机帮助和资料上的例子,都不能达到结果,真的有点麻烦,现在我把开发过程
和各位说一下,希望高手和行家指点指点,我快被逼疯了。:(开发环境如下,家里和单位都是同样的运行结果。
单位:Windows2000 professional,Delphi EnterPrise 6.0 (Build6.163)
同系统装有Visiual Stuio 6.0 (VC,VB,VFP)(同装有问题吗?) 家里: Windows98第二版,Delphi EnterPrise 6.0 (Build6.163)
同系统装有Visiual Stuio 6.0 (VC,VB,VFP)(同装有问题吗?)开发要求:
使用Table组件的AddIndex方法给一个已存在的数据表建立索引。步骤:
1. 数据表为D:\Delphi\DBF\UnsDay.DB,Paradox的
2. 建立BDE别名:BDE_DB
type: standard
default driver: Paradox
Endable Bcd: False
Path: D:\Delphi\DBF
3. 建立一个空的的窗体,放一个Table组件,一个DataSource组件,一个DBGird组件,
和一个按钮。
Table组件连接表,DataSource的DataBaseName属性为Table1,DBGird的
DataBaseName属性为DataSoure1,Table的DataBaseName为BDE_DB,Table属性为
Unsday.db,Active为true,然后建立按钮的Click事件。4.编辑Click事件代码:
procedure TForm3.Button1Click(Sender: TObject);
begin
Table1.Active:=False;
Table1.AddIndex('IdxStime','STIME',[ixPrimary]);// 其中STIME是一个字段名.
Table1.Active:=True;
end;5. 保存并按F9运行,出现EBDEngineError异常,'Table is busy'错误。问题:表是忙的?我的数据表这时除了Delphi在使用,没有其它程序在用。此时我在CSDN
上问了一下,并查了一些资料,加入如下语句,但还是不行,问题依旧‘Table is
busy’。 Table1.Active:=False;
Table1.Close;
Table1.Exclusive:=True; Table1.AddIndex('IdxStime','STIME',[ixPrimary]); Table1.Exclusive:=False;
Table1.Open;
Table1.Active:=True;
后又想到把其它组件与Table的连接断开,用Table的DisableControls和Enable
Controls两个属性,编译运行,不行!
Table1.DisableControls;
Table1.Active:=False;
Table1.Close;
Table1.Exclusive:=True; Table1.AddIndex('IdxStime','STIME',[ixPrimary]); Table1.Exclusive:=False;
Table1.Open;
Table1.Active:=True;
Table1.EnableControls; 想了很久,觉得表忙的话是不是有程序在用,或是组件?与是把Table组件与其它
组件断开,去掉DataSoure和DBGird组件,再编译运行,不行! 然后我在www.yahoo.com中输入Table is busy关键字搜索到一篇英文资料,说是
表好象要锁定什么的,于返回Delphi帮助,查到Table类的方法lock和unlock,
表忙的错误没了,可是又出现双重否定的结果,说是索引不能建在关闭的DataSet
上,与是把DataSet打开(open或active:=true),又说索引不能建在打开的DataSeth ,天哪?索引即不能建在打开的数据集上,也不能在关闭的数据集上,那在
什么上可建呢?我快疯了,感觉被BDE给嫖死了!!!!!!!!! Table1.Active:=False;
Table1.Close;
Table1.Exclusive:=True;
Table1.LockTable(ltWriteLock); // 锁定表,一开始我是读锁定,不行,改成
// 写锁定是可以了。 Table1.AddIndex('IdxStime','STIME',[ixPrimary]); Table1.UnLockTable(ltWriteLock);
Table1.Exclusive:=False;
Table1.Open;
Table1.Active:=True; 已经过去两天了,我在CSDN上也提了很多个这样的问题,可最终还是没有建成索引,
Delphi的帮助只介绍了AddIndex方法本身的用法,示例也就是一句,连Active要
设成False的提示也没有,就是说AddIndex相关的其它东西都没有说。很多网友让
我看帮助,可是我已经看了N次了,自认为英文还能过的去,实在不行时用金山词霸
指点一下。 再次,我将Table的类库DBtables.pas中的AddIndex函数中的每一个执行语句后加
入ShowMessage提示,想知道运行哪一个语句错了,可惜没有一个看到,可见连
AddIndex函数体都没有进入,和我用F7调试结果一样,为什么呢? 然后我去看BDE,设置也是好的,用SqL Expoloer的SQL语句
Create index idxstime on unsday (stime) 建立索引是可以的,BDE没问题
呀。
有哪位高手知道我的这个问题是怎么产生的?如何解决?是代码语句问题还是该语句 的相关配合设置没有设好?或是BDE有问题? 很多网友贴出来的关于AddIndex方法资料文章似乎和我已有一样,没有上机测试过,
另外,Delphi的版本不同,同一方法的使用也有不一样的。这里谢谢了。 谁能告诉我如何DeBug???????????????????????????????????????????
解决方案 »
- OnClose的时候释放内存
- 为什么csdn的个人档案编辑改不了我的昵称?
- 判断控件是否单击或选中问题!!!在线急等!!!!!!!!!
- 一个关于在界面上加载图片的十分简单的小问题(急!!)
- 如何调用共用相同的事件处理程序
- 关于大数据量
- TEdit[QStdCtrls] 与TEdit[StdCtrls] 有什么区别呀?
- 为什么有些控件安装之后,Find declaration 找不到定义那?
- 好心人,那里有windows api中文帮助文件下载!
- 请问QuickRep中有没有控制每篇报表中显示的记录数的属性??
- 非delphi高手恐怕解决不了(请高手指教)-----400分
- 条码编程..................谁曾经做过
Create index idxstime on unsday (stime)只能是创建第二索引,所以可以成功,但你用
Table1.AddIndex('IdxStime','STIME',[ixPrimary]);
应该是创建主索引也就是关键字吧,所以不行。
我不能确定,但我自己用的时候是有这个问题,在能在create table时定义主索引。
我前几天也是用BDE+Paradox做得。可以的。
ly_88(飞龙)说不行。我觉得没有道理。建立索引只要表在其他的程序访问的情况下应该都可以建立的。
我就是在建立索引之后,用AddIndex.直接建立的。
AddIndex()是这样解释的。用于建立一个新的索引。其中,NAME参数用于指定索引的名字。Fields参数是一个字符串,用于指定索引的字段,字段与字段之间要用分号隔开;OPTIONS参数用于设置索引的选项,TIndexOptions是一个集合,可以包含下列元素:
ixPrimary: 建立主索引(不能用乎DBASE表)
ixUnique: 字段的值必须是相异的;
ixDescedning; 按降序排列;
IxCase Insensitive;大小写不敏感
IxExpression;创建DBASE表达式索引对了,你的TABLE的Active是在程序启动后打开的,还是原本打开的。
如果你原本就是打开的,可能问题会出在那里。你试试看。
不行的话,你把代码给我。我帮你看看。:)
所以会出现这些问题,把它设为False,然后在代码中再加入Active:=False;
才能建索引。具体请看我的归纳贴,谢谢axcyy!
http://expert.csdn.net/Expert/topic/1116/1116758.xml?temp=.1722376procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Close; //在这里我就已经写好了,但是,楼主没有注意罢了!
table1.Exclusive := True;
Table1.AddIndex('NewIndex1', 'CustNo', [ixPrimary]);
table1.Exclusive := false;
Table1.Open;
end;以上代码是经过我验证的代码,一定没有问题