SQLDataSourceToDriver 関数

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

構文

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

引数

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

fSqlType
[入力]SQL データ型。 この引数は、 rgbValueIn をアプリケーションで許容されるフォームに変換する方法をドライバーに指示します。 有効な SQL データ型の一覧については、「付録 D: データ型」の「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。

説明

ドライバーは SQLDataSourceToDriver を呼び出して、データ ソースからドライバーに渡す alldata (結果セット データ、テーブル名、行数、エラー メッセージなど) を変換します。 変換 DLL は、データの種類と翻訳 DLL の目的によっては、一部のデータを翻訳しない場合があります。たとえば、あるコード ページから別のコード ページに文字データを変換する DLL は、すべての数値データとバイナリ データを無視します。

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

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

cbValueIncbValueOutMaxpcbValueOut は SDWORD 型ですが、SQLDataSourceToDriver は必ずしも巨大なポインターをサポートするとは限りません。

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

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

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