Teilen über


SQLDataSourceToDriver-Funktion

SQLDataSourceToDriver unterstütztTranslationen für ODBC-Treiber. Diese Funktion wird von ODBC-fähigen Anwendungen nicht aufgerufen. -Anwendungen fordern die Übersetzung über SQLSetConnectAttr an. Der Treiber, der dem in SQLSetConnectAttr angegebenen ConnectionHandle zugeordnet ist, ruft die angegebene DLL auf, um Übersetzungen aller Daten auszuführen, die von der Datenquelle in den Treiber fließen. Eine Standardübersetzungs-DLL kann in der ODBC-Initialisierungsdatei angegeben werden.

Syntax

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

Argumente

fOption
[Eingabe] Optionswert.

fSqlType
[Eingabe] Der SQL-Datentyp. Dieses Argument teilt dem Treiber mit, wie rgbValueIn in ein formular konvertiert wird, das von der Anwendung akzeptiert wird. Eine Liste der gültigen SQL-Datentypen finden Sie im Abschnitt SQL-Datentypen in Anhang D: Datentypen.

rgbValueIn
[Eingabe] Zu übersetzende Wert.

cbValueIn
[Eingabe] Länge von rgbValueIn.

rgbValueOut
[Ausgabe] Ergebnis der Übersetzung.

Hinweis

Die Übersetzungs-DLL beendet diesen Wert nicht.

cbValueOutMax
[Eingabe] Länge von rgbValueOut.

pcbValueOut
[Ausgabe] Die Gesamtanzahl der Bytes (ohne das Byte mit NULL-Terminierung), die in rgbValueOut zurückgegeben werden können.

Wenn dies bei Zeichen- oder Binärdaten größer oder gleich cbValueOutMax ist, werden die Daten in rgbValueOut auf cbValueOutMax-Bytes abgeschnitten.

Für alle anderen Datentypen wird der Wert von cbValueOutMax ignoriert, und die Übersetzungs-DLL geht davon aus, dass die Größe von rgbValueOut die Größe des Standardmäßigen C-Datentyps des SQL-Datentyps entspricht, der mit fSqlType angegeben ist.

Das argument pcbValueOut kann ein NULL-Zeiger sein.

szErrorMsg
[Ausgabe] Zeiger auf den Speicher für eine Fehlermeldung. Dies ist eine leere Zeichenfolge, es sei denn, die Übersetzung ist fehlgeschlagen.

cbErrorMsgMax
[Eingabe] Länge von szErrorMsg.

pcbErrorMsg
[Ausgabe] Zeiger auf die Gesamtanzahl der Bytes (mit Ausnahme des NULL-Terminierungsbytes), die in szErrorMsg zurückgegeben werden können. Wenn dies größer oder gleich cbErrorMsg ist, werden die Daten in szErrorMsg in cbErrorMsgMax abzüglich des NULL-Terminierungszeichens abgeschnitten. Das argument pcbErrorMsg kann ein NULL-Zeiger sein.

Gibt zurück

TRUE, wenn die Übersetzung erfolgreich war, FALSE, wenn die Übersetzung fehlgeschlagen ist.

Kommentare

Der Treiber ruft SQLDataSourceToDriver auf, um alle Daten (Resultsetdaten, Tabellennamen, Zeilenanzahl, Fehlermeldungen usw.) zu übersetzen, die von der Datenquelle an den Treiber übergeben werden. Die Übersetzungs-DLL übersetzt möglicherweise einige Daten nicht, abhängig vom Typ der Daten und dem Zweck der Übersetzungs-DLL. Beispielsweise ignoriert eine DLL, die Zeichendaten von einer Codepage in eine andere übersetzt, alle numerischen und binären Daten.

Der Wert von fOption wird auf den Wert von vParam festgelegt, der durch Aufrufen von SQLSetConnectAttr mit dem attribut SQL_ATTR_TRANSLATE_OPTION angegeben wird. Es handelt sich um einen 32-Bit-Wert, der eine bestimmte Bedeutung für eine bestimmte Übersetzungs-DLL hat. Beispielsweise könnte eine bestimmte Zeichensatzübersetzung angegeben werden.

Wenn derselbe Puffer für rgbValueIn und rgbValueOut angegeben ist, wird die Übersetzung der Daten im Puffer durchgeführt.

Obwohl cbValueIn, cbValueOutMax und pcbValueOut vom Typ SDWORD sind, unterstützt SQLDataSourceToDriver nicht unbedingt riesige Zeiger.

Wenn SQLDataSourceToDriver FALSE zurückgibt, ist die Datenkürzung möglicherweise während der Übersetzung aufgetreten. Wenn pcbValueOut (die Anzahl der im Ausgabepuffer zurückgegebenen Bytes) größer als cbValueOutMax (die Länge des Ausgabepuffers) ist, wurde abgeschnitten. Der Treiber muss bestimmen, ob die Kürzung zulässig war. Wenn keine Abschneidung aufgetreten ist, hat SQLDataSourceToDriver aufgrund eines anderen Fehlers FALSE zurückgegeben. In beiden Fällen wird in szErrorMsg eine bestimmte Fehlermeldung zurückgegeben.

Weitere Informationen zum Übersetzen von Daten finden Sie unter Übersetzungs-DLLs.

Informationen über Finden Sie unter
Übersetzen von Daten, die an die Datenquelle gesendet werden SQLDriverToDataSource
Zurückgeben der Einstellung eines Verbindungsattributes SQLGetConnectAttr
Festlegen eines Verbindungsattributes SQLSetConnectAttr