AG-TECH CORPAG-TECH CORP

ENGLISH

Pervasive Btrieve Alignment DLL

Pervasive Btrieve Alignment DLL (PALN32.DLL)

概要

概要 VB(32bit)からPervasive.SQLのBtrieveAPIを直接呼びたい場合、数値型変数の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お問い合わせ

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

お問い合わせ
必須会社名

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

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