XSQLDA を理解する
動的 SQL での作業 へ戻る
DSQL アプリケーションはすべて、1 つ以上の拡張 SQL ディスクリプタ領域(XSQLDA
)を宣言していなければなりません。 XSQLDA
構造体の定義は、ibase.h
ヘッダー ファイル内(InterBase include
ディレクトリ)にあります。 アプリケーションは、使用する XSQLDA
のインスタンスを宣言します。
XSQLDA
は、ホスト言語のデータ構造体で、DSQL は、SQL 文の文字列を処理する際に、データベースとの間でデータをやり取りするためにこれを使用します。 XSQLDA
には、2つの種類 --- 入力ディスクリプタと出力ディスクリプタ --- があります。 input および output の両ディスクリプタは、XSQLDA
構造体を使用して実装されています。
XSQLDA
の 1 つのフィールド、sqlvar
は、XSQLVAR
構造体です。 sqlvar
は特に重要で、これは、XSQLVAR
は、各 input パラメータまたは返される列ごとに定義されなければならないからです。 XSQLDA
のように、XSQLVAR
は、ibase.h
(InterBase の include
ディレクトリ内)で定義されている構造体です。
アプリケーションは、先に XSQLVAR
のインスタンスを宣言することはありませんが、その代りに、DSQL 文で必要な数の XSQLVAR
構造体用に、記憶領域を動的に確保し、その後、文が実行されたら、適宜それらを解放する必要があります。
次の図は、XSQLDA
と XSQLVAR
の関係を表したものです:
- 入力
XSQLDA
は、1 つのXSQLDA
構造体と、入力パラメータと同じ数のXSQLVAR
構造体で構成されます。 - 出力
XSQLDA
は、1 つのXSQLDA
構造体と、文から返されるデータ項目と同じ数のXSQLVAR
構造体で構成されます。
XSQLDA
とそれに関連する XSQLVAR
構造体は、メモリ内の連続した領域に一括して割り当てられます。
isc_dsql_prepare()
、
isc_dsql_describe()
、isc_dsql_describe_bind()
の各関数は、XSQLVAR
構造体の適切な割り当て数を判定するために使用でき、XSQLDA_LENGTH
マクロは、適切な大きさの領域をア割り当てるために使用することができます。
XSQLDA_LENGTH
マクロの詳細については、「XSQLDA_LENGTH マクロの利用」を参照してください。