Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » ODBC-Unterstützung » ODBC-Anwendungen erstellen

 

Verwenden des unixODBC-Treibermanagers

unixODBC-Versionen vor der Version 2.2.14 haben einige Aspekte der von Microsoft festgelegten 64-Bit-ODBC-Spezifikation falsch implementiert. Dadurch kommt es zu Problemen bei der Verwendung des unixODBC-Treibermanagers mit dem SQL Anywhere 64-Bit ODBC-Treiber.

Um diese Probleme zu vermeiden, sollten Sie sich der Unterschiede bewusst sein. Einer davon ist die Definition von SQLLEN und SQLULEN. Dies sind 64-Bit-Typen in der Microsoft 64-Bit ODBC-Spezifikation und werden vom SQL Anywhere 64-Bit ODBC-Treiber als 64-Bit-Quantitäten erwartet. Manche Implementierungen von unixODBC definieren diese zwei Typen als 32-Bit-Quantitäten und dies führt zu Problemen, wenn eine Schnittstelle zum SQL Anywhere 64-Bit ODBC-Treiber hergestellt wird.

Es gibt drei Dinge, die Sie tun müssen, um Probleme auf 64-Bit-Plattformen zu vermeiden.

  1. Statt die unixODBC-Header-Dateien wie sql.h und sqlext.h aufzunehmen, sollten Sie die SQL Anywhere ODBC-Header-Datei unixodbc.h verwenden. Dies gewährleistet, dass Sie die korrekten Definitionen von SQLLEN und SQLULEN erhalten. Die Header-Dateien in unixODBC 2.2.14 oder späteren Versionen beheben das Problem.

  2. Sie müssen sicherstellen, dass Sie die korrekten Typen bei allen Parametern verwenden. Die Verwendung der korrekten Header-Datei und die strenge Typprüfung (Strong Type Checking) Ihres C/C++-Compilers sollte Sie in diesem Bereich unterstützen. Sie müssen auch sicherstellen, dass Sie die korrekten Typen für alle Variablen verwendet haben, die vom SQL Anywhere-Treiber indirekt durch Zeiger gesetzt werden.

  3. Verwenden Sie nicht die Versionen von des unixODBC-Treibermanagers vor Version 2.2.14. Linken Sie stattdessen direkt mit dem SQL Anywhere-ODBC-Treiber. Stellen Sie z.B. sicher, dass das gemeinsam genutzte Objekt libodbc mit dem SQL Anywhere-Treiber verknüpft ist.

    libodbc.so.1 -> libdbodbc12_r.so.1

    Als Alternative können Sie auch den SQL Anywhere-Treibermanager auf Plattformen verwenden, auf denen er verfügbar ist.

 Siehe auch