次の方法で共有


SQLDataSourceToDriver 関数

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

構文

  
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 を する
[出力]翻訳の結果。

手記

変換 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 ビット値です。 たとえば、特定の文字セット変換を指定できます。

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

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

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

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

詳細については、次の情報を参照してください。 見る
データ ソースに送信されるデータの変換 SQLDriverToDataSource の
接続属性の設定を返す SQLGetConnectAttr の
接続属性の設定 SQLSetConnectAttr の