0

我正在尝试从数据库文件(其中雇员 c-tree 数据结构)中读取数据。这是一个非常古老的产品,由于各种原因,我不再可以使用 ODBC 驱动程序。

我发现数据基本上只是逐行的“平面文件”。所以我的计划是简单地从文件中读取原始二进制数据,实际上,我自己定制了 ODBC。

使用 c-tree 公司自己提供的工具,我什至能够获取每个字段地址的详细信息(即它的开始位置)、它的长度(字节数组的长度)以及我认为实际上是告诉我如何对字段进行编码(见下文):

ADDRESS  LENGTH  TYPE(encoding?)        FIELD NAME
0        8       (128-0x80) CT_ARRAY    Reserved
8        4       (59-0x3B) CT_INT4U     Record_ID
12       2       (41-0x29) CT_INT2U     Type
14       2       (41-0x29) CT_INT2U     Changes
16       52      (144-0x90) CT_FSTRING  Name

我是否正确假设像“(128-0x80)”之类的东西应该是我需要将该字段解码为实际文本的唯一信息?还是可能有一些我在这里没有考虑的进一步加密?

还有谁能告诉我“(128-0x80)”到底是什么?我将 0x80 识别为十六进制,但 128 是什么意思?至少,用某种术语来描述这件事,我可以做更多的谷歌研究。

提前致谢!

4

1 回答 1

0

这种类型编码纯粹是内部的,作为我们对该数据类型的字节值表示。

例如:80x(十六进制)= 128(十进制)= 数据类型 CT_ARRAY,其他数据类型也是如此。

地址长度类型(编码?)字段名称

0 8 (128-0x80) CT_ARRAY 保留

8 4 (59-0x3B) CT_INT4U 记录_ID

12 2 (41-0x29) CT_INT2U 类型

14 2 (41-0x29) CT_INT2U 更改

16 52 (144-0x90) CT_FSTRING 名称

您可以在文档中在线查看数据类型描述: https ://docs.faircom.com/doc/ctreeplus/28396.htm

这很可能是一个固定长度的记录。可变长度记录将包含每个需要考虑的 10 字节标头。此外,这似乎是一个 1 或 2 字节(16 位应用程序)打包对齐数据记录,应始终予以考虑。其他 C 结构编译器定义的对齐方式会使数据提取复杂化。

“保留”字段可能只是我们的 1 字节已删除记录标记和已删除记录堆栈值的占位符标记(也在我们的文档中描述)。但是,它也可以包含仅与该应用程序相关的应用程序特定数据,因为它是 8 字节长。

不应该对数据进行其他加密或编码(当然没有 Unicode)。

不幸的是,此 ODBC 驱动程序已停产。有一种方法可以让您轻松提取 c-treeACE 数据库的所有数据,但您需要联系 FairCom 支持以获取更多信息。支持链接是faircom.com/support

于 2018-11-05T21:53:52.317 回答