我正在尝试从数据库文件(员工c树数据结构)中读取数据。这是一个非常古老的产品,由于各种原因,我不再可以使用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是什么意思?至少使用某种术语来描述这件事,我可以做更多的谷歌研究。
谢谢!
答案 0 :(得分: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。