ENGLISH

Pervasive Btrieve Alignment DLL

Pervasive Btrieve Alignment DLL (PALN32.DLL)

概要

VB(32bit) から Pervasive.SQL の Btrieve API を直接呼びたい場合、数値型変数の Byte Alignment の問題を回避するために、基本的に三つの方法があります。

1)Btrieveとの受け渡しに、ユーザ定義型を使わない。

2)データバッファに使うユーザ定義型の中で、数値変数のかわりにバイト型配列を使う。VB内ではバイト型配列を数値変数に変換してから使用する。変換する方法は様々あります。

3)もう一つの方法が弊社のPervasive.SQL SDK製品に同梱されているPervasive Btrieve Alignment DLL (PALN32.DLL)を使う方法です。プログラムの初めに、DDFからBtrieveファイル構造をPALN32.DLLに読み込めば、あとはVBのプログラムに一行追加するだけで、レコード内容の正しい読み書きが可能になります。


資料

Visual Basic では、32 ビット・アプリケーションをコンパイルするときに、UDT (ユーザ定義データ型) のメンバーの配置を、その個別のメンバーのサイズに応じて、8 ビット、16 ビット、または 32 ビット境界に合わせます。構造体とは異なり、データベース行はパックされます。つまり、フィールドとフィールドの間に未使用領域はありません。アライメントをオフにする手段はないため、Visual Basic アプリケーションがデータベースにアクセスできるように構造体のパック、アンパックを行うための方法が必要です。Pervasive Btrieve Alignment DLL (PALN32.DLL) はこのようなアライメント問題に対処するために作られています。

Visual Basic の場合、いろいろな変数のビット境界で要素のアライメントが行われます。次の表はさまざまなデータ型をまとめたもので、Visual Basic の処理の仕方を示しています。

Visual Basicの型 型定数 標準サイズ(バイト数) 境界
Byte FLD_BYTE 任意 1 バイト(なし)
String FLD_STRING 任意 1 バイト(なし)
Boolean FLD_LOGICAL 2 2 バイト
Integer FLD_INTEGER 2 2 バイト
Currency FLD_MONEY 4 4 バイト
Long FLD_INTEGER 4 4 バイト
Single FLD_IEEE 4 4 バイト
Double FLD_IEEE 8 4 バイト

プログラムからは、BTRCALL 関数を呼び出してVisual Basic の Btrieve 呼出しを利用します。この関数を利用するには、プロジェクトにBTRAPI.BASモジュールを含めます。
その他の必要な関数はPALN32.DLL の中にあります。


PALN32.DLL をプロジェクトに含める方法

[プロジェクト]->[参照設定] の順にクリックし、Pervasive Btrieve Alignment Library モジュールをチェックします。
表示されない場合には、[参照] をクリックしてファイルを指定し、リストに追加します。

次の表は、各関数およびその関数が必要とする特定のモジュールの一覧です。

関数 目的 場所 パラメータ 戻り値
RowToStruct 1 行分のByte 型データを VisualBase UDT に変換します。 PALN32.DLL ≫ row (1 to n) As Byte
パックされたデータを取得するための入力配列。
≫ fld (1 to n) As FieldMap
個々のフィールドのデータ型を決定するために使用する FieldMap 配列。
≫udt As Any
データを格納するためのUDT。
≫ udtSize As Long
UDT のサイズ。LenB( )を使用してこの値を生成します。
≫ Integer
OK であれば 0。そうでない場合には、エラーが発生しています。
SetFieldMap FieldMap 要素のメンバーを設定します。 PALN32.DLL ≫ map As FieldMap
FieldMap 配列の要素。
≫ dataType As Integer
フィールドの種別で、次の定数上で渡されます。
– FLD_STRING
– FLD_INTEGER
– FLD_IEEE
– FLD_MONEY
– FLD_LOGICAL
– FLD_BYTE
– FLD_UNICODE
≫ size As Long
データベースに格納されるフィールドのサイズ(バイト数)。
≫ Nothing
SetFieldMap FromDDF FieldMap 型の配列の、すべてのメンバーを設定します。 PALN32.DLL ≫ path As String
データ・ソースに渡す完全なパス名。
≫ table As String
テーブルの名前。
≫ userName As String
予約済み。ヌル文字列を渡します(たとえば、””)。
≫ passwd As String
予約済み。ヌル文字列を渡します(たとえば、””)。
≫ map (1 to n) As FieldMap
書込み先のFieldMap 配列。レコードの中のフィールド数に従い、それぞれ正確な要素数が入っていなければなりません。
≫ unicode As Integer
文字列がASCII 文字としてレコードの中に保存されている場合には 0。そうでない場合には、Unicode として格納されます。
≫ Integer
OK であれば0。そうでない場合には、エラーが発生しています。
StructToRow Visual Base UDT を 1 行分の数の Byte 型データに変換します。 PALN32.DLL ≫ row (1 to n) As Byte
パックされたデータを格納するための出力配列。
≫ fld (1 to n) As FieldMap
個々のフィールドのデータ型を決定するために使用する FieldMap 配列。
≫ udt As Any
データが取得されるUDT。
≫ udtSize As Long
UDT のサイズ。LenB( )を使用してこの値を生成します。
≫ Integer
OK であれば 0。そうでない場合には、エラーが発生しています。

Contactお問い合わせ

お気軽にお問い合わせください。

お問い合わせ

    必須会社名

    個人のお客様は「個人」と入力してください。

    必須お名前
    必須メールアドレス
    必須メールアドレス(確認)
    必須ライセンス ありなし
    ダウンロード目的