【问题标题】:How can I access Visual FoxPro tables from Delphi?如何从 Delphi 访问 Visual FoxPro 表?
【发布时间】:2014-09-11 02:35:37
【问题描述】:

我从文件组织软件中收集了 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?
  • 上述症状是否表明实际数据损坏或只是不兼容/配置错误?
  • 最后,如何使用现代的东西来访问表并开始检查数据?

【问题讨论】:

  • 关于第二点 - VFP ODBC 驱动程序将打开 Visual FoxPro 和任何其他版本(可能)回到 dBase 和 Clipper 等 DOS 产品 - 所以如果它像那样窒息,它更有可能要么不是真正的 DBF 格式,要么是损坏而不是配置问题。我正在查看字段描述符从哪里开始,对我来说这对 DBF 来说是错误的,它们应该稍后出现。
  • @Alan B,从我拼凑的内容来看,字段描述符应该从字节偏移量 32 开始,这似乎是上面的情况。 (我不是 DBF 专家)
  • 看起来像,结构解释here。最快的检查是用excel打开.dbf。
  • @Sertac Akyuz +1 for Excel,亲爱的!

标签: database delphi foxpro dbf visual-foxpro


【解决方案1】:

问:如何确认哪些文件是真正的 Visual FoxPro?

根据您的 dbf 数据转储,它似乎是 Visual FoxPro。根据 Microsoft 的 .dfb 表文件结构 http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx 的 MSDN 文档,第一个字节的值为 0x31,即 Visual FoxPro, autoincrement enabled

关于您提到的文件扩展名的其他所有信息:

  • .dbf = 固定长度字段的数据。
  • .cdx = 复合索引。
  • .fpt = 备注字段、图像和对象的数据。

问:上述症状是否表明实际数据损坏或只是不兼容/配置错误?

抱歉,这里帮不了你……

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

我之前曾设法使用 Delphi 的 ADO (dbGo) 组件访问 dfb 文件。我下载了包含在“Microsoft Access Database Engine 2010 Redistributable”http://www.microsoft.com/en-us/download/confirmation.aspx?id=13255 中的 FoxPro OLE DB Provider。

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

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

【讨论】:

  • 奇怪,但对我而言,您链接的 MS 下载不包含 VFPOLEDB,我已将其删除并转入另一个:microsoft.com/en-us/download/details.aspx?id=14839
  • 关于过度填充的连接字符串:我有同样的现象,交互式构建 connstring 并得到与你相同的,唯一的区别(我相信这是区域性的)是 CODEPAGE 参数。
  • 感谢您的反馈!我很好奇,你能访问你的文件吗?
  • 不,很遗憾。目前,我正在努力解决来自 OLE DB 提供程序的大量错误,其中最奇怪的是“对象已打开”。
  • 您是否尝试过按照 Sertac Akyuz 的建议使用 excel 打开您的 .dbf 文件之一?
【解决方案2】:

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

如果您可以在 VFP 中打开它,您可以简单地将其复制到 .CSV 或制表符分隔的文件中,您应该能够将其导入到您想要的任何系统中。

有时 VFP 表(.DBF、.CDX、.FPT)会链接到“数据库”(一种容器),该数据库会扩展其字段名称并添加触发器等内容。在某处查找 .DBC 文件.或者它们可以是独立的。我不确定如果您尝试打开作为 DBC(数据库容器)的一部分的 VFP 表并且没有可用的容器会发生什么。

【讨论】:

    【解决方案3】:

    我如何确认哪些文件是真正的 Visual FoxPro?
    dbf 扩展名,第一个字节 h31 表示它是一个 Visual FoxPro 表。

    上述症状是否表明真正的数据损坏或只是不兼容/配置错误?
    Microsoft ODBC 驱动程序与 VisualFoxPro 存在一些问题

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多