ENGLISH

製品アップデート/追加モジュール
最新の製品アップデートをはじめ、修正プログラム、
追加モジュールなどをご用意しております。

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お問い合わせ

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

お問い合わせ

    必須会社名

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

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