S-JIS[2025-07-16]
ODBCドライバーを実装する際のデータソースの読み込み方法について。
|
ODBC関数のSQLConnect()はデータソース名(DSN)を指定して呼び出す。
また、SQLDriverConnect()で接続文字列に「DSN=データソース名」という指定をすることが出来る。
つまり、SQLConnect()を実装するなら(また、SQLDriverConnect()でDSNに対応するなら)データソースからデータを読む必要がある。
データソースからデータを読むには、インストーラーDLL APIリファレンス関数のSQLGetPrivateProfileString()を使用する。
この関数は、Windowsの場合はodbccp32.dllに含まれている。
unixODBCの場合は(通常のODBC関数と同じく)libodbc.soに含まれているらしい。
SQLGetPrivateProfileString関数(またはUnicode版のSQLGetPrivateProfileStringW関数)は、データソースから値を読み込む関数。
SQLGetPrivateProfileStringの引数は以下の通り。
引数名 | 無印関数の型 | W関数の型 | 説明 |
---|---|---|---|
section | LPCSTR | LPCWSTR | データソース名(DSN) |
entry | LPCSTR | LPCWSTR | 設定値のキー |
default | LPCSTR | LPCWSTR | デフォルト値(無い場合は空文字列を指定する) |
returnBuffer | LPCSTR | LPCWSTR | 設定値を返すバッファー(の先頭アドレス) |
returnBufferSize | INT | INT | バッファーの長さ(文字数) |
filename | LPCSTR | LPCWSTR | odbc32の場合は「odbc.ini 」、unixODBCなら「.odbc.ini 」とか |
sectionには、SQLConnect()やSQLDriverConnect()で渡されたDSNを指定する。
entryには設定値のキー(取得したい設定値の名称)を指定する。
なお、sectionやentryの大文字小文字は無視されるようだ。
defaultは、設定値(キー)が見つからなかった場合のデフォルト値。NULL不可(odbc32だとNULLでも通るようだけど、unixODBCでは駄目だった)。
filenameは設定値が書かれているファイルのファイル名ということらしい。
odbc32(Windows)だと設定値はレジストリーから取得するのでファイル名って何じゃいということになるが、「odbc.ini
」を指定する。(他のファイル名だとエラーになる模様)
unixODBCだと何を指定しても関係ない模様。
SQLGetPrivateProfileStringの返り値の型はINTで、バッファーに入れられた文字列の文字数が返る。
これが0未満ならエラーということになるようだ。