SQLDriverToDataSource 関数

SQLDriverToDataSource では 、ODBC ドライバーの翻訳がサポートされています。 この関数は、ODBC 対応アプリケーションでは呼び出されません。アプリケーションは SQLSetConnectAttr を使用して変換を要求します。 SQLSetConnectAttr で指定された ConnectionHandle に関連付けられているドライバーは、指定された DLL を呼び出して、ドライバーからデータ ソースに流れるすべてのデータの変換を実行します。 既定の変換 DLL は、ODBC 初期化ファイルで指定できます。

構文

  
BOOL SQLDriverToDataSource(  
     UDWORD     fOption,  
     SWORD      fSqlType,  
     PTR        rgbValueIn,  
     SDWORD     cbValueIn,  
     PTR        rgbValueOut,  
     SDWORD     cbValueOutMax,  
     SDWORD *   pcbValueOut,  
     UCHAR *    szErrorMsg,  
     SWORD      cbErrorMsgMax,  
     SWORD *    pcbErrorMsg);  

引数

fOption
[入力]オプション値。

fSqlType
[入力]ODBC SQL データ型。 この引数は、 rgbValueIn をデータ ソースで許容される形式に変換する方法をドライバーに指示します。 有効な SQL データ型の一覧については、「 SQL データ型」を参照してください。

rgbValueIn
[入力]変換する値。

cbValueIn
[入力] rgbValueIn の長さ。

rgbValueOut
[出力]翻訳の結果。

Note

変換 DLL は、この値を null で終了しません。

cbValueOutMax
[入力] rgbValueOut の長さ。

pcbValueOut
[出力] rgbValueOut で返すことができる合計バイト数 (null 終了バイトを除く)。

文字データまたはバイナリ データの場合、 cbValueOutMax 以上の場合、 rgbValueOut 内のデータは cbValueOutMax バイトに切り捨てられます。

その他のすべてのデータ型では、 cbValueOutMax の値は無視され、変換 DLL では 、rgbValueOut のサイズが fSqlType で指定された SQL データ型の既定の C データ型のサイズであると見なされます。

pcbValueOut 引数には null ポインターを指定できます。

szErrorMsg
[出力]エラー メッセージのストレージへのポインター。 翻訳に失敗しない限り、これは空の文字列です。

cbErrorMsgMax
[入力] szErrorMsg の長さ。

pcbErrorMsg
[出力] szErrorMsg で返すことができる合計バイト数 (null 終了バイトを除く) へのポインター。 この値が cbErrorMsg 以上の場合、 szErrorMsg 内のデータは cbErrorMsgMax から null 終端文字を引いた値に切り捨てられます。 pcbErrorMsg 引数には null ポインターを指定できます。

戻り値

翻訳が成功した場合は TRUE、翻訳に失敗した場合は FALSE。

説明

ドライバーは SQLDriverToDataSource を呼び出して、ドライバーからデータ ソースに渡されるすべてのデータ (SQL ステートメント、パラメーターなど) を変換します。 変換 DLL では、データの種類と変換 DLL の目的によっては、一部のデータが翻訳されない場合があります。 たとえば、あるコード ページから別のコード ページに文字データを変換する DLL では、すべての数値データとバイナリ データが無視されます。

fOption の値は、SQL_ATTR_TRANSLATE_OPTION属性を使用して SQLSetConnectAttr を呼び出すことによって指定された vParam の値に設定されます。 これは、特定の翻訳 DLL に固有の意味を持つ 32 ビット値です。 たとえば、特定の文字セット変換を指定できます。

rgbValueInrgbValueOut に同じバッファーが指定されている場合は、バッファー内のデータの変換がインプレースで実行されます。

cbValueIncbValueOutMaxおよび pcbValueOut は SDWORD 型ですが、SQLDriverToDataSource は必ずしも巨大なポインターをサポートしていません。

SQLDriverToDataSource から FALSE が返された場合、変換中にデータの切り捨てが発生した可能性があります。 pcbValueOut (出力バッファーで返されるバイト数) が cbValueOutMax (出力バッファーの長さ) より大きい場合は、切り捨てが発生しました。 ドライバーは、切り捨てが許容されたかどうかを判断する必要があります。 切り捨てが行われなかった場合は、別のエラーが原因で SQLDriverToDataSource から FALSE が返されます。 いずれの場合も、 szErrorMsg で特定のエラー メッセージが返されます。

データの変換の詳細については、「 翻訳 DLL」を参照してください。

対象 解決方法については、
データ ソースから返されたデータの変換 SQLDataSourceToDriver
接続属性の設定を返す SQLGetConnectAttr
接続属性の設定 SQLSetConnectAttr