如何从Delphi访问Visual FoxPro表?

时间:2014-09-11 02:35:38

标签: database delphi foxpro dbf visual-foxpro

我从文件整理软件中留下了DBFFPTCDX个文件的遗留集合。从CDX和FTP后缀来看,我认为它是一个Visual FoxPro数据库。从第一眼看到DBF文件,看起来它有field descriptors。我想检查那里存储的数据,并使用或提取任何有用的东西。

00000000:  31 0B 06 0E-2F 00 00 00-08 02 28 01-01 00 00 01  1/   (  
00000010:  00 00 00 00-00 00 00 00-00 00 49 40-01 7F 00 00            I@
00000020:  4E 41 4D 45-00 00 00 00-00 00 00 43-01 00 00 00  NAME       C
00000030:  FF 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00   
00000040:  43 41 54 5F-52 4F 4F 54-49 44 00 42-00 01 00 00  CAT_ROOTID B 
00000050:  08 00 04 00-00 00 00 00-00 00 00 00-00 00 00 00   
00000060:  50 52 4E 54-5F 49 44 00-00 00 00 42-08 01 00 00  PRNT_ID    B
00000070:  08 00 04 00-00 00 00 00-00 00 00 00-00 00 00 00   
00000080:  41 54 54 52-49 42 53 00-00 00 00 49-10 01 00 00  ATTRIBS    I
00000090:  04 00 04 00-00 00 00 00-00 00 00 00-00 00 00 00   
000000A0:  49 53 5F 45-58 43 4C 55-44 45 00 49-1A 01 00 00  IS_EXCLUDE I
000000B0:  04 00 04 00-00 00 00 00-00 00 00 00-00 00 00 00   
000000C0:  43 41 54 5F-49 44 00 00-00 00 00 42-1E 01 00 00  CAT_ID     B
000000D0:  08 00 0C 00-00 00 00 00-00 00 00 00-00 00 00 00   
000000E0:  54 53 00 00-00 00 00 00-00 00 00 37-26 01 00 00  TS         7&
000000F0:  08 00 14 00-00 00 00 00-00 00 00 00-00 00 00 00   

到目前为止我尝试了什么:

  • 将现成的Windows 7 ODBC驱动程序存根升级到版本6.01.8629.01
  • 将用户DNS创建为“免费表目录”并将其路径指向文件集

  • 在各种工具(如SQL Explorer和SQL Server导入/导出向导)中未列出该OBDC DNS的表。

  • 手动尝试SELECT * FROM任何DBF文件都会导致[Microsoft][ODBC Visual FoxPro Driver]Not a table.错误。

另外,我试过了:

  • 使用FOXPRO驱动程序创建BDE别名
  • 打开Database Desktop中的任何DBF文件

两次尝试打开表都导致Corrupt table/index header.错误。

另外,我只是尝试了tDBF component,但它看起来已经放弃并加载了Kylix Libc依赖项,因此无法在Delphi中编译而无法修复它。

大量问题:

  • 如何确认哪些文件确实是Visual FoxPro?
  • 上述症状是否表示真实数据损坏或仅仅是不兼容/配置错误?
  • 最后,如何使用现代的东西访问表并开始检查数据?

3 个答案:

答案 0 :(得分:3)

问:如何确认哪些文件确实是Visual FoxPro?

根据您的dbf数据转储,它似乎是Visual FoxPro。根据Microsoft的.dfb表文件结构的MSDN文档http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx

,第一个字节的值为0x31 Visual FoxPro, autoincrement enabled

另外还有关于您提及的文件扩展名的信息:

  • .dbf =固定长度字段的数据。
  • .cdx =复合指数。
  • .fpt =备忘录字段,图像和对象的数据。

问:上述症状是否表明存在真正的数据损坏或只是不兼容/配置错误?

抱歉在这里帮不了你......

问:最后,如何使用现代的东西来访问表并开始检查数据?

我之前使用Delphi的ADO(dbGo)组件设法访问dfb文件。我下载了“Microsoft Access数据库引擎2010可再发行组件”http://www.microsoft.com/en-us/download/confirmation.aspx?id=13255中包含的FoxPro OLE DB提供程序。

初始连接字符串如下所示:

Provider=VFPOLEDB.1;Data Source=[MY_FOXPRO_DIR_PATH];Password="";Collating Sequence=MACHINE

当我研究我的代码时,我使用了更长的代码,遗憾的是没有任何注释。无论如何我都扔了它:

Provider=VFPOLEDB.1;Data Source=[MY_FOXPRO_DIR_PATH];Mode=Share Deny None;Extended Properties="";User ID="";Mask Password=False;Cache Authentication=False;Encrypt Password=False;Collating Sequence=MACHINE;DSN="";DELETED=True;CODEPAGE=1252;MVCOUNT=16384;ENGINEBEHAVIOR=90;TABLEVALIDATE=3;REFRESH=5;VARCHARMAPPING=False;ANSI=True;REPROCESS=5

答案 1 :(得分:0)

为什么不试图找到Visual Fox Pro 9的副本,看看它是否会打开文件。 (UniversalThread有一个VFP部分和VFP专家,您也可以在这里提出问题。)

如果您可以在VFP中打开它,只需将其复制到.CSV或制表符分隔文件,您就可以将其导入到您想要的任何系统中。

有时VFP表(.DBF,.CDX,.FPT)链接到"数据库" (容器的种类),它扩展了它们的字段名称并添加了触发器之类的东西等。在某处查找.DBC文件。或者他们可以独立。我不确定如果你试图打开一个VFP表会发生什么,它是DBC(数据库容器)的一部分而你没有容器可用。

答案 2 :(得分:0)

如何确认哪些文件确实是Visual FoxPro?
dbf扩展和第一个字节h31表示它是Visual FoxPro表。

上述症状是否表明实际数据损坏或仅仅是不兼容/配置错误?
Microsoft ODBC驱动程序与VisualFoxPro

有一些问题

最后,如何使用现代的东西访问表并开始检查数据?
我认为最好的方法是使用Vista Software的Apollo数据库引擎。 http://www.apollodb.com/default.asp