ODBC Interface では、Scalable SQL と Btrieve のデータ型が ODBC SQL のデータ型にマップされます。次に、Scalable SQL と Btrieve のデータ型 の一覧と、それらに対応するマップされた Scalable SQL と Btrieve の
ODBC データ型を示します。
SQL エンジンのバージョンによって異なるサポートされるデータ型
ODBC Interface では、接続時に使用されている SQL エンジンでサポート され てい るす べて のデ ータ 型を サポ ート しま す。 バッ クエ ンド とし て Scalable SQL v3.01 エンジンを使っているときは、UNSIGNED BINARY を 除く Btrieve のデータ型がすべてサポートされます。また、Scalable SQL v4.0 バックエンドでは、Btrieve のデータ型がすべてサポートされます。
Scalable SQL v4.0 エンジンでは、v3.01 エンジンによってサポートされて いるものに加えて、いくつかの新しいデータ型がサポートされています。
データ型によって異なる Null の扱い
Scalable SQL/Btrieve のデータ型の中には、値として Null をとらないもの があります。たとえば、WHERE COL1 IS NULL のような条件句を使って いるときに COL1 が Null 値をとらないデータ型である場合、このテスト は False と評価されてしまいます。Null 値をとらないデータ型のカラムを テストするときは、WHERE および HAVING 句で IS NULL または IS
NOT NULL を使わずに、特定の値または特定の値の範囲を使ってください。
表 2-2
Scalable SQL/Btrieve のデータ型と ODBC のデータ型の対応
Scalable SQL/Btrieve のデータ型
ODBCのデータ型 CREATE TABLEの パラメータ
Null値をとるか どうか
AUTOINC(2) SQL_SMALLINT AUTOINC(2) いいえ
AUTOINC(4) SQL_INTEGER AUTOINC(4) いいえ
BFLOAT(4) SQL_REAL BFLOAT(4) いいえ
BFLOAT(8) SQL_DOUBLE BFLOAT(8) いいえ
BIT SQL_BIT なし いいえ
Scalable SQL/Btrieve のデータ型
ODBCのデータ型 CREATE TABLEの パラメータ
Null値をとるか どうか
CHAR
(Btrieve では STRING)
SQL_CHAR 最大長 はい
CURRENCY* SQL_BIGINT CURRENCY はい
DATE SQL_DATE なし はい
DECIMAL SQL_DECIMAL 精度、スケール はい
FLOAT(4) SQL_REAL FLOAT(4) いいえ
FLOAT(8) SQL_FLOAT または
SQL_DOUBLE
FLOAT(8) いいえ
INT(1) SQL_TINYINT INT(1) いいえ
INT(2) SQL_SMALLINT INT(2) いいえ
INT(4) SQL_INTEGER INT(4) いいえ
INT(8)* SQL_BIGINT INT(8) いいえ
LOGICAL(1) SQL_BIT LOGICAL(1) いいえ
LOGICAL(2) SQL_SMALLINT LOGICAL(2)
LSTRING SQL_VARCHAR 最大長 はい
LVAR SQL_LONGVARBINARY 最大長 いいえ
MONEY SQL_DECIMAL 精度 はい
NOTE SQL_LONGVARCHAR 最大長 いいえ
NUMERIC SQL_NUMERIC 精度、スケール はい
NUMERICSA
(Btrieve では NUMERIC SIGNED ASCII)
SQL_NUMERIC 精度、スケール はい
NUMERICSTS
(Btrieve では NUMERIC SIGNED TRAILING SEPARATE)
SQL_NUMERIC 精度、スケール はい
TIME SQL_TIME なし いいえ
TIMESTAMP* SQL_TIMESTAMP タイムスタンプの精度 はい
UNSIGNED(1)* SQL_TINYINT UNSIGNED(1) いいえ
UNSIGNED(2)* SQL_SMALLINT UNSIGNED(2) いいえ
UNSIGNED(4)* SQL_INTEGER UNSIGNED(4) いいえ
UNSIGNED(8)* SQL_BIGINT UNSIGNED(8) いいえ
ZSTRING SQL_VARCHAR 最大長 はい
第 2 章 この表でアスタリスク (*) が表示されているデータ型は、Scalable SQL v4.0 エンジンによる接続時に だけ使用することができます。
『Microsoft ODBC 2.0プログラマーズリファレンス&SDKガイド』の「付録 D」で 説明されているすべての変換が、この表にあげた ODBC SQL のデータ型に対して サポートされています。
ODBC での AUTOINC データ型のインプリメンテーション
AUTOINC 型は SQL_INTEGER および SQL_SMALLINT 型にマップされ ますが、AUTOINC フィールドは、INSERT および UPDATE ステートメ ントに関して、Scalable SQL と Btrieve のもとで特殊な処理を必要としま す。ゼロ値を挿入すると、そのフィールドの行には一意の値が挿入されま す。一方、ゼロでない値は、テーブル内のそのフィールドに現れる値と重 複 し な い か ぎ り 、 そ の ま ま 挿 入 さ れ ま す 。Scalable SQL が AUTOINC フィールドに対し一意の値を挿入するのは AUTOINC フィールドがキーと して定義されている場合だけです。
符号付き整数として扱われるにもかかわらず、一種の 15 ビットまたは 31 ビットの符号なし整数として動作することによって、AUTOINC 型は絶対 値として照合されます。そのため、データベースのユーザは、選択を目的 として、負の値を一種のビットフラグとして使用することができます。値 を負の値に変更するには、UPDATE ステートメントを使用します。
NOTE および LVAR データ型の使い方
Scalable SQL および Btrieve では、データ型が NOTE または LVAR の フィールドは、1 つのテーブルまたはビューにつき 1 つだけ許容されます。
このフィールドは、つねに CREATE TABLE ステートメントで定義される 最後のフィールドであり、SELECT リストで一覧にされる最後のフィール ドでなければなりません。
注意
第 3 章 この章では、ODBC Interface とともに ODBC API を使ってプログラミング を行う方法について説明します。次に、この章の内容を示します。