最近我在用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???????????????????????????????????????????
解决方案 »
- windows mediaplayer给播放列表添加项目
- 怎样用adoquery做《同一个字段》同时《满足2个条件》的查询??
- 高分请教
- 关于将数据库备份到网络上其他的机器
- API实现的打印可以预览吗,很急,请帮帮忙!!!在线等。
- 用delphi怎么关闭所有打开MDI子窗体?
- 在程序中自动创建DBCheckbox
- 大家平时在家里写的程序有没有进行备份,都是用什么来进行备份的?
- 关于打印连续走纸的问题
- 请问我怎么从这文本里面获取 哈哈 的工资?文本保持在c:\test\abc.txt
- 请问如何能够让access不要生成.ldb的临时文件或者把这个临时文件生成到其他地方,象c盘或者其他目录下面(在线给分)
- 要通过公网得到远程的轻量级数据,用什么方法好。
我运行你开始的代码,在oracle8中没有一点问题。
你怎么要动态的创建索引,建表时创建不行?
用TABLE+SQL(SELECT * FROM TABLE1 ORDER BY FIELDNAME)+QUERY
用ADOTABLE.SORT:='FIELDNNAME ASC(DESC)'
begin
with ttable.Create(self) do
begin
databasename:='d:\table';
tablename:='foo';
tabletype:=ttparadox;
with fielddefs do begin
add('age',ftinteger,0,true);
add('name',ftstring,25,false);
add('weight',ftfloat,0,false);
end;
createtable;
showmessage('ok');
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
table1.DatabaseName:='d:\table';
table1.TableName:='foo';
table1.TableType:=ttparadox;
with table1 do begin
close;
AddIndex('tempindex','age',[ixprimary]);
showmessage('thanks');
close;
end;
end;
这是我在delphi6+win2000下的代码。完全通过OK。
估计可能是你的问题。你按照我的代码去试,肯定行。