0

我正在使用 Btrieve 和 Pervasive SQL Control Center 创建一个表。该表有 3 列:char 20、char 20 和 char 50。第一列是主键。当我通过代码插入记录时,第二列的第一个字符总是丢失。我假设是因为第一列正在覆盖它。在调查我为什么加载文件信息编辑器时。文件规范将记录长度列为 92。这对我来说没有意义,因为我明确地将表定义为记录长度为 90。

我还收到错误 22,这表明我的缓冲区的代码记录长度和实际表记录长度不同。

为了修复第二列中丢失的第一个字符,我更改了代码中的缓冲区,使第一列的长度为 21 个字符。我还将第 3 列更改为 51 以修复错误 22。

当我在创建表时将记录长度明确定义为 90 时,如何在我的示例中将记录长度设置为 92?

4

1 回答 1

1

您最有可能看到的是 Btrieve / Pervasive 中“空”处理的工件。
当您使用 Btrieve 创建文件时,您可以逐字节精确地布置记录。将“True Null”支持添加到 Pervasive 引擎后,任何创建为可为空(默认)的列在 Btrieve 文件中的字段前都有一个额外的字节。这允许引擎知道该字段是 null 还是空字符串。
因为您的表有三列,所以应该有三个额外的字节,但是因为其中一列是主键,所以它并不全为空,所以您只有两个额外的字节。
在您的情况下,如果您有一个现有的 Btrieve 文件并创建了 SQL 定义,那么在某些情况下这些额外的字段将不存在。
你有两个选择:

  • 在关闭“True Null”支持的情况下重新创建表。这是通过Set TrueNullCreate = Off在您的命令之前发出命令来完成的Create Table

  • 添加Not Null到表中的所有列并重新创建表。

于 2016-08-05T14:57:38.070 回答