PSQL Programmer's Guide (v11)

Visual Basic (言語インターフェイス モジュール)

ここでは、Btrieve API の Visual Basic ソース モジュールについて説明します。

Visual Basic は 32 ビット アプリケーションをコンパイルする際、UDT(ユーザー定義データ型)のメンバーをそれぞれ、その特定のメンバーのサイズに応じて 8 ビット、16 ビット、32 ビットの境界に配置します。構造体と違い、データベース行はパック化されます。つまり、フィールド間に未使用スペースがないということです。配置をオフにする方法はないので、Visual Basic アプリケーションがデータベースにアクセスできるように構造体をパック化およびアンパック化する方法が必要です。Pervasive Btrieve アライメント 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 を取り込むには

以下の表に、各関数とその関数が必要とする特定のモジュールを示します。

関数
用途
場所
パラメーター
戻り値
BTRCALL
Btrieve オペレーションを実行するには
BTRAPI.BAS
  • OP As Integer
    Btrieve API Guide』に示すような Btrieve オペレーション番号。
  • Pb$ As String
    レコードを取得または格納するためか、Btrieve に構造体を渡すための文字列に、ポジション ブロックを格納します。
  • Db As Any
    データ バッファー。このパラメーターは、レコードを取得または格納するためか、Btrieve に構造体を渡すために使用します。
  • DL As Long
    データ バッファーの長さ。
  • Kb As Any
    キー バッファー。
  • Kl As Integer
    キー バッファーの長さ。
  • Kn As Integer
    キー番号。
  • Integer
    オペレーションから返される Btrieve ステータス コード。特定のコードの詳細については、『Status Codes and Messages』を参照してください。
RowToStruct
Visual Base 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
    問題なければ 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_UNICODE1
  • size As Long
    データベースに格納されているようなバイト単位のフィールドのサイズ。
  • なし
SetFieldMapFromDDF
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 です。それ以外は、ユニコードとして格納されます。
  • Integer
    問題なければ 0 です。それ以外はエラーが発生しました。
StructToRow
バイト行に Visual Base 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
    問題なければ 0 です。それ以外はエラーが発生しました。
1 フィールド タイプ FLD_UNICODE は、データベース行(パック構造)だけでなく UDT(ユーザー定義データ型)内の両方に UNICODE で格納される Visual Basic の String 型のフィールドを指定するのに使用します。フィールドに FLD_STRING 型が使用されると、データベース行ではデフォルトの ANSI コード ページ文字セットに変換されます。ただし、UDT(ユーザー定義データ型)では UNICODE が使用されます。要するに、文字列フィールドをPervasive PSQL データベースに UNICODE で格納したい場合は、フィールド タイプに FLD_UNICODE を選択するということです。文字列フィールドを、デフォルトであるシステムの ANSI コード ページ文字セットでデータベースに格納したい場合は、FLD_STRING を選択します。


Pascal (言語インターフェイス モジュール)

インターフェイス ライブラリ