製品アップデート/追加モジュール

ダウンロード条件


お客様が当社の Web サイトからダウンロードしたファイルは、別途記載のない限り、無断で複製あるいは再配布することは許可されていません。

ダウンロードしたファイルの中には、特定ソフトウェアのライセンスをお客様がお持ちであることを前提としたものがあります。このような場合、お客様がそのソフトウェアのライセンスをお持ちでないと使用することができません。

ダウンロードしたファイルの使用はあくまでお客様の責任です。当社は、ダウンロードしたファイルの運用結果やその使用によるお客様の損害に対して、たとえその問題の存在を知り得たとしても、いかなる保証も行いません。

当社は、お客様に対して、ダウンロードしたファイルの使用方法などの個別サポートを一切提供いたしません。


AG-TECH製品ライン


ご利用いただくお客様層に合わせた AG-TECH サポートサービスをご用意しております。



製品別FAQ参考資料
サポートサービスサポートフォーム

お問い合わせはこちら

製品アップデート/追加モジュール

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

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。そうでない場合には、エラーが発生しています。