一个很有趣的关于数据库的问题。。。(200分)

  • 主题发起人 主题发起人 baggiooo
  • 开始时间 开始时间
B

baggiooo

Unregistered / Unconfirmed
GUEST, unregistred user!
当用TABLE控件打开一个DATABASE DESKTOP从未打开过的DBASE数据库时,系统会报错“INDEX DOES NOT EXISTS:xxx.mdx”,而用DATABASE DESKTOP打开时,在报错的同时会有三个选项“Open readonly”“Open failed”“Open and detach”,“Open and detach”的意思是打开并产生一个索引文件,可我发现实际上并未产生,但是此后再用TABLE控件打开则可以,不会报错。那么,我可以请问各位专家:如何在自己的程序里实现DATABASE DESKTOP的这种“Open and detach”的功能呢?
 
刚试过,没问题呀?
 
删除原先索引,从新建立索引
 
这是因为DELPHI与FOXPRO两个的索引文件的命名方式不同造成的。
在DELPHI中,系统创建的索引文件的名字的后缀为:"*.mdx";
在FOXPRO中,系统创建的索引文件的名字的后缀为:"*.idx"。

你这个DBF文件肯定是用FOXPRO或FOXBASE等创建的,而不是用DELPHI创建的,
所以你用TABLE构件打开时,只有"*.idx"文件,而没有"*.mdx"文件,
所以系统报找不到索引。
当你用DESKTOP打开时,也报错,但是它随即将表结构的信息更改了,
所以你再用TABLE构件打开时,就没有问题了。

你想要实现这个功能的话,首先要找到DBF表的索引信息
(如是否有索引,索引名字是什么等),然后找相应的"*.mdx"文件即可。
 
>>“Open and detach”的意思是打开并产生一个索引文件
不是这个意思,“Open and detach”是说把table与它的
index脱离开,(即认为这个table没有index),
从而可以打开这个table,不必寻找index。

“Open and detach”的功能是由BDE的API:DbiRegisterCallBack
来完成的,你看一下Help,这个函数的例子恰恰就是教人怎样“Open and detach”的 :-)
 
多人接受答案了。
 
//faint!!

这个问题应该200都给我,其他人根本没明白提问者的意思!!!
:-(
 
后退
顶部