请教dBase 7 的 MDX丢失后怎么办?(100分)

  • 主题发起人 主题发起人 yysun
  • 开始时间 开始时间
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
dBase 7 改变了 DBF 文件的结构.
所以,以前清除索引标志的方法(第28字节置0)不灵光了.

请教如果 mdx 丢失了,该如何处理?
 
http://www.inprise.com/devsupport/bde/bdeapiex 中的Index部分.

如果有用的话,我就彻底相信您的话了,该我发财的运气,挡都挡不住.

我在ex-ex上也回答了您同样的问题! *_^

 
很高兴在 Ex-ex 上遇见您,老朋友。
如果您在此解决我的问题,Ex-ex上的100分也归您了。我保证。

在您上次指点下,我已经下在了您所提的文档和所有的例子,
Index部分的函数,需要先将 Table 打开,以获得 Handle,
但是没有mdx文件的话,Table是打不开的 ...

昨日研究了很久,没找到办法,所以同时发问,该不会您在forums.inprise.com
上也回答了我这个问题吧?
 
见笑见笑,我没到forums.inprise.com里去过,
说实话,我对文件型数据库研究很少--很久没用过了,
现在也没时间研究.

以后发现新办法再向您建议吧! *_^
不过万一今晚Zif来了,给您了一个解决办法,我的
400分可就没戏了:-(
(那个网址还是从他那里知道的呢!)

顺便问一句,我在ex-ex上的成绩怎么样?

(刚刚得了一个C,不然是连续十个A呢!这样的战绩其他"富翁"们好像也没有!)
 
不行,说没时间是假的,哪有到手的分数跑掉的道理?

我刚试了一下,用Database Desktop打开表,
当提示错误时,选择open and detach,这样索引信息就没了,
这个表变成了一个"自由身".

不知老孙是否需要的这个?

我可真够累的,ex-ex上又搞了一下 *_^
 
谢谢 dwwang,可是如何自己编程实现呢?
因为我的数据库有好30-40各DBF,以往总是自动索引的,现在可不能一个一个让用户
到 Database Desktop 中去过堂 :)

就是想了解 Database Desktop 在选择 open and detach 后是如何处理的.

Ex-ex中又被您 Lock 上了,您可就跑不掉了 :) 麻烦您了.
 
刚刚上网就看见您的信,真巧,
可是看来今晚是搞不定了,明天一定再研究研究.

不好意思,

不过请您把我ex-ex上的answer reject 了吧,因为
大部分高手都是晚上来,他们也许有办法.
 
dwwang, 很高兴有在线上见面了, 真很巧.
对这个问题,老是麻烦您的我很不好意思.
Ex-ex上让它去吧,在这里有了答案后,去给您加那外国分也容易些.
 
您可千万别这么客气(看来我们相互以"您"相称
是改不了了,那也就"让他去吧" :-))

我们在这里都是相互交流,相互帮助,为了共同的爱好嘛!
我从论坛上也学了很多东西呢!还不都是您开这个论坛的功劳?
 
还是觉得有问题,就又看了一下。
您说的DBase7是指那个版本?

我用VDbase/DBase for windows建了表以后,
用Open and Detach去掉索引,发现就是第28字节
01变成00。您确认没有什么别的原因吗?
 
我用 Visual dbase 7,它的文件结构大大改变,它现在字段名可到31位,
支持Primary Key,Referential Integrity, 文件头用68个字节,其中第28字节
仍然为 mdx 的标志,

以后字段描述数组,每个字段的描述为48字节(以前是32字节)
RecStructure = record
Field_Name: array[0..31] of char;
Field_Type: char;
Field_Len: Byte;
i1, i2, i3,
Field_idx: Byte;
dummy:array[0..9] of char;
end;
其中有1字节表示该字段的索引信息。

这是我的初步进展。我希望用 BDE 的 API,实现Open and Detach后去掉索引的功
能,但是又回到老问题:好象这些API都需要先将 Table 打开,以获得 Handle,
但是没有mdx文件的话,Table是打不开的 ...

虽然现在通过直接文件操作,可以清除索引标志了,但是总觉不保险。
 
再补充一下,字段描述数组后是 Referential Integrity的信息,我还没有研究
出它的结构,请多指教 :)
 
我以为您一定要用Delphi来解决这个问题呢!
OK,下面这个网址的最后一个程序,可以删除/全部重建
出现错误的vdbase的索引,希望能够搞定! ^_^
(还是VDbase源代码呢!)

http://ourworld.compuserve.com/homepages/RStrieff/
 
非常感谢你,我总是很佩服,你能找到这种 URL.

下载后发现,那是 dBase 的 prg 程序,主要针对 Visual dBase IV。
我想要 Delphi 的程序,想要针对 Visual dBase 7。
 
彻底没戏啦!(瘫倒在椅子上)

到底有没有这种东东呢?

另外,Visual Dbase7 是个产品吗?
Inprise的网页上还有介绍吗?
Delphi能够建VDB7的表吗?
 
Visual dBase 7 是个很新的产品,Inprise的网页上还没有其技术资料,(可能这
就是不如 M$ 的地方之一)。

我在forums.inprise.com问dBase 7的DBF结构,得到的回答是:
MOST unfortunately, it is NOT published. --tex

Delphi中用你上次提供的BDE API,能自动升级DBF,还能建立Primary Key,RI。

不久,我就会研究出 dBase 7 的文件结构的。因为它丢失mdx后仍然很愚蠢就打
不开,必须清除索引标志。我需要来个硬清。

我的Database Desktop比dBase 7先出来,BDE是最新的,D-D显然能先不打开dbf,
然后清除索引标志。Detach it.

这个方法在研究中 ... 到底哪个API呢?
 
我的问题总算解决了,
方法一,弄清 DBF 结构,硬性清除其索引标志字节。临时措施而已。
方法二,使用 BDE 函数,居然就在 BDE32.hlp中关于DbiRegisterCallBack的
Example中. 这才是正道。

很遗憾是方法二是我花费了很多时间研究出DBF结构后刚刚得知的。
在dwwang提供的http://www.inprise.com/devsupport/bde/bdeapiex中,可以
下载BDE的最新范例(html),用我为本论坛做的HTML检索器查mdx,果然也找到了
DbiRegisterCallBack的最新用法呢 :)

感谢dwwang和我讨论了这么长时间和提供的各种信息。
 
借这个问题试验一下计分系统。
 
后退
顶部