開発者リファレンス : データ アクセス方法 : ODBC Guide : Zen ODBC リファレンス
  
このページをシェアする                  
Zen ODBC リファレンス
接続文字列、メタデータのバージョン、制限、および SQL 文法についてのリファレンス情報
この章では、リレーショナル インターフェイスおよび ODBC について説明します。
データ ソース名接続文字列キーワード
開いたテーブルを閉じる
SQL 文法のサポート
使用できるデータ型
無限の表現
データ ソース名接続文字列キーワード
DSN への接続に使用される接続文字列には、ドライバーの定義済みキーワードをいくつでも含むことができます。これらのキーワードを使用することにより、ドライバーはデータ ソースへ接続するのに十分な情報を得ることができます。ドライバーは、データ ソースとの接続に必要なキーワードを定義します。
Zen の接続文字列およびキーワードの完全な説明については、ODBC 接続文字列を参照してください。
開いたテーブルを閉じる
SQLFreeStmt に SQL_CLOSE オプションを指定して呼び出すと、SQLState は変更されますが、hStmt が使用している開いたテーブルは閉じません。hStmt が現在使用しているテーブルを閉じるには、SQLFreeStmt に SQL_DROP オプションを指定して呼び出す必要があります。
次の例では、Emp と Dept のテーブルは開いたままになります。
SQLPrepare(hStmt, "SELECT * FROM Emp, Dept", SQL_NTS)
SQLExecute(hStmt)
SQLFetch until SQL_No_Data_Found
SQLFreeStmt(hStmt, SQL_CLOSE)
その次に SQLPreparehStmt で呼び出されたとき、前のステートメントで使用したテーブルが閉じられます。たとえば、次の呼び出しを実行すると、Emp と Dept の両方のテーブルは Zen によって閉じられます。
SQLPrepare(hStmt, "SELECT * FROM Customer",SQL_NTS)
その後、次の呼び出しによって Customer テーブルを閉じます。
SQLFreeStmt(hStmt, SQL_DROP)
SQL 文法のサポート
ODBC v 2.5 仕様は、最小、コア、拡張の 3 つの SQL 文法レベルを提供します。レベルが高くなるほど、より完全なデータ定義の実装とデータ操作言語のサポートが提供されます。
リレーショナル インターフェイスでは、最小 SQL 文法に加え、多数のコアおよび拡張のステートメント文法を完全サポートしています。リレーショナル インターフェイスがサポートしている SQL 文法は、次の表に要約されています。ステートメント文法は、『SQL Engine Reference』に記載されています。
表 7 SQL 文法のサポート
SQL ステートメント文法
最小
コア
拡張
 
 
* 
 
 
* 
 
* 
 
 
 
* 
 
 
* 
 
 
* 
 
* 
 
* 
 
 
DELETE(検索済み)
* 
 
 
 
 
* 
 
* 
 
 
 
* 
* 
 
 
 
 
* 
 
* 
 
 
* 
 
* 
 
 
JOIN LEFT OUTER(SELECT)
 
 
* 
 
* 
 
* 
 
 
 
* 
 
 
* 
 
 
* 
 
 
 
* 
 
 
* 
 
* 
 
拡張述部
 
 
* 
 
* 
 
 
* 
 
 
 
* 
 
 
* 
 
* 
 
 
 
* 
* 
 
 
UPDATE(検索済み)
* 
 
 
 
 
* 
SQL ステートメント内のデリミター付き識別子
列名およびテーブル名に非標準文字が含まれる場合、列名とテーブル名はデリミター付き識別子として表記できます。識別子がキーワードである場合は、デリミターを付ける必要があります。
識別子のデリミター文字は二重引用符です。
SELECT "last-name" FROM "non-standard-tbl"
ハイフンは標準文字ではありません。
SELECT "password" FROM my_pword_tbl
"password" は SET PASSWORD ステートメントのキーワードです。
使用できるデータ型
次の表は、Zen によってサポートされる ODBC のリレーショナル データ型に関する情報を示します。SRDE は、SQLGetData または SQLBindCol を呼び出すときに別のデータ型変換が指定されない限り、リレーショナル データ型を ODBC のデフォルトのデータ型に変換します。データ型の変換については、Microsoft の ODBC ドキュメントに記載されているデータ型を参照してください。
以下のデータ型に関する詳しい情報は、『SQL Engine Reference』の Zen トランザクショナルおよびリレーショナル データ型を参照してください。
Zen メタデータの型コード
サイズ
作成/追加パラメーター
各データ型固有の注記
 
表 8 Zen で使用できる ODBC のデータ型
リレーショナル型
ODBC 型(コード)1
AUTOTIMESTAMP
SQL_TIMESTAMP(93)
BFLOAT4
SQL_REAL(7)
BFLOAT8
SQL_DOUBLE(8)
BIGIDENTITY
SQL_BIGINT(-5)
BIGINT
SQL_BIGINT(-5)
BINARY
SQL_BINARY(-2)
BIT
SQL_BIT(-7)
CHAR
SQL_CHAR(1)
CURRENCY
SQL_DECIMAL(3)
DATE
SQL_DATE(91)
DATETIME
SQL_TIMESTAMP(93)
DECIMAL
SQL_DECIMAL(3)
DOUBLE
SQL_DOUBLE(8)
IDENTITY
SQL_INTEGER(4)
INTEGER
SQL_INTEGER(4)
LONGVARBINARY
SQL_LONGVARBINARY(-4)
LONGVARCHAR
SQL_LONGVARCHAR(-1)
MONEY
SQL_DECIMAL(3)
NCHAR
SQL_WCHAR(-8)
NLONGVARCHAR
SQL_WLONGVARCHAR(-10)
NUMERIC
SQL_NUMERIC(2)
NUMERICSA
SQL_NUMERIC(2)
NUMERICSLB
SQL_NUMERIC(2)
NUMERICSLS
SQL_NUMERIC(2)
NUMERICSTB
SQL_NUMERIC(2)
NUMERICSTS
SQL_NUMERIC(2)
NVARCHAR
SQL_WVARCHAR(-9)
REAL
SQL_REAL(7)
SMALLIDENTITY
SQL_SMALLINT(5)
SMALLINT
SQL_SMALLINT(5)
TIME
SQL_TIME(92)
TIMESTAMP
SQL_TIMESTAMP(93)
TIMESTAMP2
SQL_TIMESTAMP(93)
TINYINT
SQL_TINYINT(-6)
UBIGINT
SQL_BIGINT(-5)
UINTEGER
SQL_INTEGER(4)
UNIQUEIDENTIFIER
SQL_GUID(-11)
USMALLINT
SQL_SMALLINT(5)
UTINYINT
SQL_TINYINT(-6)
VARCHAR
SQL_VARCHAR(12)
1 SQL_FLOAT および SQL_VARBINARY は Zen ではサポートされません。
無限の表現
Zen で無限を表すには、次の表のように、4 バイト(C 言語の float 型)または 8 バイト(C 言語の double 型)の形式で、16 進数または文字として表現できます。
表 9 無限の表現
Float 16 進数
Float 文字
Double 16 進数
Double 文字
正の最大数
 
 
0x7FEFFFFFFFFFFFFF
 
負の最大数
 
 
0xFFEFFFFFFFFFFFFF
 
正の無限数
0x7F800000
1E999
0x7FF0000000000000
1E999
負の無限数
0xFF800000
-1E999
0xFFF0000000000000
-1E999
トランザクション
START TRANSACTION ステートメントはストアド プロシージャ外ではサポートされません。これは、ODBC 標準が、すべてのステートメントはデフォルトでトランザクション内にあることを条件としているためです。ODBC 標準にはトランザクションを開始する API がありません。『SQL Engine Reference』の START TRANSACTION を参照してください。
ODBC は、各 SQL ステートメントを SQL 独自のトランザクション内に置くか、それともアプリケーションが各トランザクションの終了時を指定するかどうかを決定するアプリケーションを提供します。ODBC は、トランザクション内にないどのステートメントより前に、自動的にトランザクションを開きます。したがって、指定された接続の最初のステートメント、あるいは COMMIT または ROLLBACK 後の最初のステートメントにより、ODBC は自動的に新しいトランザクションを開始します。
ODBC 標準内では、SQLSetConnectOption を使って、各ステートメントを独自のトランザクション内に置くか、またはアプリケーションが複数のステートメントを 1 つのトランザクションにまとめるかどうかを指定します。
SQLSetConnectOption にオプション SQL_AUTOCOMMIT、値 SQL_AUTOCOMMIT_ON(これがデフォルトです)を指定して呼び出すと、各ステートメントは独自のトランザクション内に置かれます。このように使用すると、トランザクションはステートメントの実行を開始するときに開始され、ステートメントの実行の完了時点でエラーが発生していない場合は自動的にコミットされ、エラーが発生した場合はロール バックされるようになります。
SQLSetConnectOption にオプション SQL_AUTOCOMMIT、値 SQL_AUTOCOMMIT_OFF を指定して呼び出すと、アプリケーションがステートメントを 1 つのトランザクションにまとめることができます。このように使用すると、トランザクションは実行される最初のステートメントを開始するときに開始されます。その後、トランザクションをいつ、どのように終了するかは、アプリケーションが SQLTransact を呼び出すか、'COMMIT WORK' または 'ROLLBACK WORK' ステートメントを実行するかによって決まります。アプリケーションが 1 つのトランザクションを終了すると、次のステートメントの実行時に別のトランザクションが自動的に開始されます。