2016-08-05 1 views
0

J'utilise Btrieve et le Pervasive SQL Control Center pour créer une table. La table a 3 colonnes: char 20, char 20, & char 50. La première colonne est la clé primaire. Lorsque j'ai inséré un enregistrement par le code, le premier caractère de la deuxième colonne était toujours manquant. J'ai supposé que la première colonne l'écrasait. En recherchant pourquoi j'ai chargé l'éditeur d'informations sur les fichiers. La spécification de fichier énumère la longueur d'enregistrement 92. Cela n'a pas de sens pour moi parce que j'ai clairement défini la table comme ayant des longueurs d'enregistrement de 90.Comment la longueur d'enregistrement est-elle affectée dans PSQL v9 lors de la création de tables?

Je recevais également l'erreur 22 qui est indicative de la longueur d'enregistrement différente de mon tampon dans le code et la longueur réelle de l'enregistrement de la table.

Pour corriger le premier caractère manquant dans la deuxième colonne, j'ai changé mon tampon dans le code de sorte que la première colonne avait 21 caractères de longueur. J'ai également modifié la troisième colonne pour qu'elle soit de 51 afin de corriger l'erreur 22.

Comment la longueur d'enregistrement est-elle définie sur 92 dans mon exemple lorsque j'ai défini clairement les longueurs d'enregistrement comme 90 lors de la création de la table?

Répondre

1

Ce que vous voyez le plus souvent est un artefact de la gestion "null" dans Btrieve/Pervasive.
Lorsque vous créez un fichier à l'aide de Btrieve, vous planifiez l'enregistrement exactement octet par octet. Lorsque le support "True Null" a été ajouté au moteur Pervasive, toute colonne créée comme nullable (par défaut) a un octet supplémentaire préfixant le champ dans le fichier Btrieve. Cela permet au moteur de savoir si le champ est nul ou une chaîne vide.
Étant donné que votre table avait trois colonnes, il devait y avoir trois octets supplémentaires, mais parce que l'une des colonnes était la clé primaire, elle ne contient pas toutes les valeurs NULL, donc vous avez seulement deux octets supplémentaires.
Dans votre cas, si vous aviez un fichier Btrieve existant et avez créé la définition SQL, ces champs supplémentaires ne seraient pas présents dans certains cas.
Vous avez deux options:

  • Recréez la table avec le soutien "True Null" désactivé. Ceci est fait en émettant la commande Set TrueNullCreate = Off avant votre commande Create Table.

  • Ajoutez Not Null à toutes les colonnes de la table et recréez la table.