2016-08-05 3 views
0

Ich verwende Btrieve und das Pervasive SQL Control Center, um eine Tabelle zu erstellen. Die Tabelle hat 3 Spalten: char 20, char 20, & char 50. Die erste Spalte ist der Primärschlüssel. Als ich einen Datensatz durch Code eingefügt habe, fehlte immer das erste Zeichen der zweiten Spalte. Ich nahm an, weil die erste Spalte es überschrieb. Bei der Untersuchung, warum ich den Dateiinformationseditor geladen habe. Die Dateispezifikation listet die Aufzeichnungslänge als 92 auf. Dies ergibt für mich keinen Sinn, weil ich die Tabelle klar definiert habe als Aufzeichnungslängen von 90.Wie wirkt sich die Satzlänge in PSQL v9 beim Erstellen von Tabellen aus?

Ich habe auch Fehler 22 erhalten, der auf eine unterschiedliche Aufzeichnungslänge von meiner hinweist Puffer im Code und die tatsächliche Länge des Tabellensatzes.

Um das fehlende erste Zeichen in der zweiten Spalte zu beheben, änderte ich meinen Puffer im Code, so dass die erste Spalte 21 Zeichen lang war. Ich habe auch die 3. Spalte geändert, um 51 zu sein, um den Fehler 22 zu beheben.

Wie wird die Datensatzlänge auf 92 in meinem Beispiel festgelegt, wenn ich die Datensatzlängen eindeutig als 90 beim Erstellen der Tabelle definiert?

Antwort

1

Was Sie wahrscheinlich sehen, ist ein Artefakt der "Null" -Behandlung in Btrieve/Pervasive.
Wenn Sie eine Datei mit Btrieve erstellen, legen Sie den Datensatz genau Byte für Byte an. Wenn der Pervasive-Engine "True Null" -Unterstützung hinzugefügt wurde, hat jede Spalte, die als Nullable (Standard) erstellt wurde, ein zusätzliches Byte, das dem Feld in der Btrieve-Datei vorangestellt ist. Dadurch kann die Engine wissen, ob das Feld Null oder eine leere Zeichenfolge ist.
Da Ihre Tabelle drei Spalten hatte, sollte es drei zusätzliche Bytes gegeben haben, aber da eine der Spalten Primärschlüssel war, ist sie nicht Null, so dass Sie nur zwei zusätzliche Bytes erhalten.
In Ihrem Fall, wenn Sie eine vorhandene Btrieve-Datei hätten und die SQL-Definition erstellt hätten, wären diese zusätzlichen Felder in einigen Fällen nicht vorhanden.
Sie haben zwei Möglichkeiten:

  • die Tabelle neu erstellen mit „Wahr Null“ Unterstützung ausgeschaltet. Dies geschieht, indem Sie den Befehl Set TrueNullCreate = Off vor dem Befehl Create Table eingeben.

  • Fügen Sie Not Null zu allen Spalten in der Tabelle hinzu und erstellen Sie die Tabelle neu.

Verwandte Themen