2016-08-05 10 views
0

Я использую Btrieve и Pervasive SQL Control Center для создания таблицы. Таблица имеет 3 столбца: char 20, char 20, & char 50. Первым столбцом является первичный ключ. Когда я вставил запись через код, первый символ второго столбца всегда отсутствовал. Я предположил, что первая колонка переписывала его. Изучая, почему я загрузил Редактор информации о файлах. Спецификация файла перечисляет длину записи как 92. Это не имеет смысла для меня, потому что я четко определил таблицу как имеющую длину записи 90.Какова длина записи, затронутая в PSQL v9 при создании таблиц?

Я также получал ошибку 22, что свидетельствует о различной длине записи моего буфера в коде и фактической длины записи таблицы.

Чтобы исправить недостающий первый символ во втором столбце, я изменил свой буфер в коде, так что первый столбец был длиной 21 символ. Я также изменил третий столбец на 51, чтобы исправить ошибку 22.

Как длина записи устанавливается в 92 в моем примере, когда я четко определял длину записи как 90 при создании таблицы?

ответ

1

Что вы, скорее всего, видите, является артефактом обработки «null» в Btrieve/Pervasive.
Когда вы создаете файл с помощью Btrieve, вы размещаете запись точно побайтно. Когда в движок Pervasive была добавлена ​​поддержка «True Null», любой столбец, созданный как обнуляемый (по умолчанию), имеет дополнительный байтовый префикс поля в файле Btrieve. Это позволяет движку знать, является ли поле нулевым или пустым.
Поскольку в таблице было три столбца, должно было быть три дополнительных байта, но поскольку один из столбцов был Первичным ключом, он не все null, поэтому у вас есть только два дополнительных байта.
В вашем случае, если у вас есть существующий файл Btrieve и создано определение SQL, в некоторых случаях таких дополнительных полей не будет.
У вас есть два варианта:

  • воссоздают стол с поддержкой «Правда Null» выключен. Это делается путем выдачи команды Set TrueNullCreate = Off перед вашей командой Create Table.

  • Добавить Not Null во все столбцы таблицы и воссоздать таблицу.