Browse Source

* Patch from Laco to add some widechar ODBC functions

git-svn-id: trunk@34867 -
michael 8 năm trước cách đây
mục cha
commit
6cccd87f16
1 tập tin đã thay đổi với 184 bổ sung39 xóa
  1. 184 39
      packages/odbc/src/odbcsql.inc

+ 184 - 39
packages/odbc/src/odbcsql.inc

@@ -68,6 +68,7 @@ uses
 
 type
   SQLCHAR      = cuchar;
+  SQLWCHAR     = WideChar;
   SQLSCHAR     = cschar;
   SQLSMALLINT  = csshort;
   SQLUSMALLINT = cushort;
@@ -87,7 +88,8 @@ type
   SQLHDESC     = SQLHANDLE;
   SQLHWND      = pointer;
   SQLSETPOSIROW= {$IF DEFINED(CPU64) AND DEFINED(ODBCVER352)}cuint64{$ELSE}SQLUSMALLINT{$ENDIF};
-  PSQLCHAR      = PChar;
+  PSQLCHAR      = PAnsiChar;
+  PSQLWCHAR     = PWideChar;
   PSQLSMALLINT  = ^SQLSMALLINT;
   PSQLUSMALLINT = ^SQLUSMALLINT;
   PSQLINTEGER   = ^SQLINTEGER;
@@ -211,6 +213,7 @@ const
   { C datatype to SQL datatype mapping }
   SQL_C_CHAR   = SQL_CHAR;
   SQL_C_WCHAR  = SQL_WCHAR;
+  SQL_C_TCHAR  = {$IFDEF UNICODE}SQL_C_WCHAR{$ELSE}SQL_C_CHAR{$ENDIF};
   SQL_C_LONG   = SQL_INTEGER;
   SQL_C_SHORT  = SQL_SMALLINT;
   SQL_C_FLOAT  = SQL_REAL;
@@ -1066,10 +1069,10 @@ const
 
 {$ifdef DYNLOADINGODBC}
 
-type   tSQLAllocHandle =function(HandleType: SQLSMALLINT;
+type   TSQLAllocHandle =function(HandleType: SQLSMALLINT;
            InputHandle:SQLHANDLE;Var OutputHandlePtr: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
-type   tSQLSetEnvAttr=function (EnvironmentHandle:SQLHENV;
+type   TSQLSetEnvAttr=function (EnvironmentHandle:SQLHENV;
            Attribute:SQLINTEGER;Value:SQLPOINTER;
            StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
@@ -1078,9 +1081,15 @@ type   TSQLFreeHandle=function (HandleType:SQLSMALLINT;
 
 type   TSQLGetDiagRec=function (HandleType:SQLSMALLINT;
            Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
-           Sqlstate:PSQLCHAR;var NativeError:SQLINTEGER;
+           SqlState:PSQLCHAR;var NativeError:SQLINTEGER;
            MessageText:PSQLCHAR;BufferLength:SQLSMALLINT;
            var TextLength:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLGetDiagRecW=function (HandleType:SQLSMALLINT;
+           Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
+           SqlState:PSQLWCHAR;var NativeError:SQLINTEGER;
+           MessageText:PSQLWCHAR;BufferLength:SQLSMALLINT;
+           var TextLength:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
 
 type   TSQLGetDiagField=function (HandleType:SQLSMALLINT;
            Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
@@ -1091,20 +1100,33 @@ type   TSQLConnect=function (ConnectionHandle:SQLHDBC;
            ServerName:PSQLCHAR;NameLength1:SQLSMALLINT;
            UserName:PSQLCHAR;NameLength2:SQLSMALLINT;
            Authentication:PSQLCHAR;NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLConnectW=function (ConnectionHandle:SQLHDBC;
+           ServerName:PSQLWCHAR;NameLength1:SQLSMALLINT;
+           UserName:PSQLWCHAR;NameLength2:SQLSMALLINT;
+           Authentication:PSQLWCHAR;NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLDisconnect=function(ConnectionHandle:SQLHDBC):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
-type   TSQLDriverConnect=function (hdbc: SQLHDBC;
-           hwnd: SQLHWND;szCsin: PChar;
-           szCLen: SQLSMALLINT;szCsout: PChar;
-           cbCSMax: SQLSMALLINT;Var cbCsOut: SQLSMALLINT;
-           f: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+type   TSQLDriverConnect=function (ConnectionHandle: SQLHDBC;
+           WindowHandle: SQLHWND; InConnectionString: PSQLCHAR;
+           StringLength1: SQLSMALLINT; OutConnectionString: PSQLCHAR;
+           BufferLength: SQLSMALLINT; Var StringLength2: SQLSMALLINT;
+           DriverCompletion: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLDriverConnectW=function (ConnectionHandle: SQLHDBC;
+           WindowHandle: SQLHWND; InConnectionString: PSQLWCHAR;
+           StringLength1: SQLSMALLINT; OutConnectionString: PSQLWCHAR;
+           BufferLength: SQLSMALLINT; Var StringLength2: SQLSMALLINT;
+           DriverCompletion: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLExecDirect=function (StatementHandle:SQLHSTMT;
            StatementText:PSQLCHAR;TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLExecDirectW=function (StatementHandle:SQLHSTMT;
+           StatementText:PSQLWCHAR;TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLPrepare=function (StatementHandle:SQLHSTMT;
            StatementText:PSQLCHAR;TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLPrepareW=function (StatementHandle:SQLHSTMT;
+           StatementText:PSQLWCHAR;TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLCloseCursor=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
@@ -1120,6 +1142,11 @@ type   TSQLDescribeCol=function (StatementHandle:SQLHSTMT;
            BufferLength:SQLSMALLINT;var NameLength:SQLSMALLINT;
            var DataType:SQLSMALLINT;var ColumnSize:SQLULEN;
            var DecimalDigits:SQLSMALLINT;var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLDescribeColW=function (StatementHandle:SQLHSTMT;
+           ColumnNumber:SQLUSMALLINT;ColumnName:PSQLWCHAR;
+           BufferLength:SQLSMALLINT;var NameLength:SQLSMALLINT;
+           var DataType:SQLSMALLINT;var ColumnSize:SQLULEN;
+           var DecimalDigits:SQLSMALLINT;var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLFetchScroll=function (StatementHandle:SQLHSTMT;
            FetchOrientation:SQLSMALLINT;FetchOffset:SQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
@@ -1150,7 +1177,7 @@ type   TSQLSetDescRec=function (DescriptorHandle:SQLHDESC;
            Length:SQLLEN; Precision, Scale: SQLSMALLINT;
            DataPtr:SQLPOINTER; StringLengthPtr,IndicatorPtr:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
-type   tSQLGetInfo=function (ConnectionHandle:SQLHDBC;
+type   TSQLGetInfo=function (ConnectionHandle:SQLHDBC;
            InfoType:SQLUSMALLINT;InfoValue:SQLPOINTER;
            BufferLength:SQLSMALLINT;StringLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
@@ -1207,8 +1234,8 @@ type   TSQLFreeStmt=function (StatementHandle:SQLHSTMT;
 
 type   TSQLColAttribute=function (StatementHandle:SQLHSTMT;
            ColumnNumber:SQLUSMALLINT;FieldIdentifier:SQLUSMALLINT;
-           CharacterAttribute:PSQLCHAR;BufferLength:SQLSMALLINT;
-           StringLength:PSQLSMALLINT;NumericAttribute:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+           CharacterAttributePtr:SQLPOINTER;BufferLength:SQLSMALLINT;
+           StringLengthPtr:PSQLSMALLINT;NumericAttributePtr:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLEndTran=function (HandleType:SQLSMALLINT;
            Handle:SQLHANDLE;CompletionType:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
@@ -1218,12 +1245,22 @@ type   TSQLTables=function ( hstmt : SQLHSTMT;
            szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
            szTableName : PSQLCHAR;cbTableName : SQLSMALLINT;
            szTableType : PSQLCHAR;cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLTablesW=function ( hstmt : SQLHSTMT;
+           szTableQualifier : PSQLWCHAR;cbTableQualifier : SQLSMALLINT;
+           szTableOwner : PSQLWCHAR;cbTableOwner : SQLSMALLINT;
+           szTableName : PSQLWCHAR;cbTableName : SQLSMALLINT;
+           szTableType : PSQLWCHAR;cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLColumns=function ( hstmt : SQLHSTMT;
            szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
            szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
            szTableName : PSQLCHAR;cbTableName : SQLSMALLINT;
            szColumnName : PSQLCHAR;cbColumnName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
+      TSQLColumnsW=function ( hstmt : SQLHSTMT;
+           szTableQualifier : PSQLWCHAR;cbTableQualifier : SQLSMALLINT;
+           szTableOwner : PSQLWCHAR;cbTableOwner : SQLSMALLINT;
+           szTableName : PSQLWCHAR;cbTableName : SQLSMALLINT;
+           szColumnName : PSQLWCHAR;cbColumnName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 type   TSQLSpecialColumns=function (StatementHandle:SQLHSTMT;
            IdentifierType:SQLUSMALLINT;CatalogName:PSQLCHAR;
@@ -1236,42 +1273,60 @@ type   TSQLProcedures=function ( hstmt : SQLHSTMT;
            szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
            szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
            szTableName : PSQLCHAR;cbTableName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLProceduresW=function ( hstmt : SQLHSTMT;
+           szTableQualifier : PSQLWCHAR;cbTableQualifier : SQLSMALLINT;
+           szTableOwner : PSQLWCHAR;cbTableOwner : SQLSMALLINT;
+           szTableName : PSQLWCHAR;cbTableName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
 
-type   TSQLPrimaryKeys=function (hstmt : SQLHSTMT;
-           CatalogName:PSQLCHAR;NameLength1:SQLSMALLINT;
-           SchemaName:PSQLCHAR;NameLength2:SQLSMALLINT;
-           TableName:PSQLCHAR;NameLength3:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
 type   TSQLProcedureColumns = function(hstmt: SQLHSTMT;
            CatalogName: PSQLCHAR; NameLength1: SQLSMALLINT;
            SchemaName: PSQLCHAR; NameLength2: SQLSMALLINT;
            ProcName: PSQLCHAR; NameLength3: SQLSMALLINT;
            ColumnName: PSQLCHAR; NameLength4: SQLSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type   TSQLPrimaryKeys=function (hstmt : SQLHSTMT;
+           CatalogName:PSQLCHAR;NameLength1:SQLSMALLINT;
+           SchemaName:PSQLCHAR;NameLength2:SQLSMALLINT;
+           TableName:PSQLCHAR;NameLength3:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLPrimaryKeysW=function (hstmt : SQLHSTMT;
+           CatalogName:PSQLWCHAR;NameLength1:SQLSMALLINT;
+           SchemaName:PSQLWCHAR;NameLength2:SQLSMALLINT;
+           TableName:PSQLWCHAR;NameLength3:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
 type   TSQLStatistics = function (hstmt: SQLHSTMT;
            CatalogName:PSQLCHAR; NameLength1:SQLSMALLINT;
            SchemaName:PSQLCHAR; NameLength2:SQLSMALLINT;
            TableName:PSQLCHAR; NameLength3:SQLSMALLINT;
            Unique:SQLUSMALLINT;
            Reserved:SQLUSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
+       TSQLStatisticsW = function (hstmt: SQLHSTMT;
+           CatalogName:PSQLWCHAR; NameLength1:SQLSMALLINT;
+           SchemaName:PSQLWCHAR; NameLength2:SQLSMALLINT;
+           TableName:PSQLWCHAR; NameLength3:SQLSMALLINT;
+           Unique:SQLUSMALLINT;
+           Reserved:SQLUSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
 
 var    SQLAllocHandle:tSQLAllocHandle;
 var    SQLSetEnvAttr:tSQLSetEnvAttr;
 var    SQLFreeHandle:tSQLFreeHandle;
 var    SQLGetInfo:tSQLGetInfo;
-var    SQLProcedures:TSQLProcedures;
-var    SQLColumns:TSQLColumns;
-var    SQLSpecialColumns:TSQLSpecialColumns;
 var    SQLGetDiagRec:TSQLGetDiagRec;
 var    SQLGetDiagField:TSQLGetDiagField;
 var    SQLConnect:TSQLConnect;
+       SQLConnectW:TSQLConnectW;
 var    SQLDisconnect:TSQLDisconnect;
 var    SQLDriverConnect:TSQLDriverConnect;
+       SQLDriverConnectW:TSQLDriverConnectW;
 var    SQLExecDirect:TSQLExecDirect;
+       SQLExecDirectW:TSQLExecDirectW;
 var    SQLPrepare:TSQLPrepare;
+       SQLPrepareW:TSQLPrepareW;
 var    SQLCloseCursor:TSQLCloseCursor;
 var    SQLExecute:TSQLExecute;
 var    SQLFetch:TSQLFetch;
 var    SQLNumResultCols:TSQLNumResultCols;
 var    SQLDescribeCol:TSQLDescribeCol;
+       SQLDescribeColW:TSQLDescribeColW;
 var    SQLFetchScroll:TSQLFetchScroll;
 var    SQLExtendedFetch:TSQLExtendedFetch;
 var    SQLGetData:TSQLGetData;
@@ -1294,9 +1349,18 @@ var    SQLFreeStmt:TSQLFreeStmt;
 var    SQLColAttribute:TSQLColAttribute;
 var    SQLEndTran:TSQLEndTran;
 var    SQLTables:TSQLTables;
+       SQLTablesW:TSQLTablesW;
+var    SQLColumns:TSQLColumns;
+       SQLColumnsW:TSQLColumnsW;
+var    SQLSpecialColumns:TSQLSpecialColumns;
 var    SQLPrimaryKeys:TSQLPrimaryKeys;
+       SQLPrimaryKeysW:TSQLPrimaryKeysW;
+var    SQLProcedures:TSQLProcedures;
+       SQLProceduresW:TSQLProceduresW;
 var    SQLProcedureColumns : TSQLProcedureColumns;
 var    SQLStatistics: TSQLStatistics;
+       SQLStatisticsW: TSQLStatisticsW;
+
 var    odbcversion:word;
 
 {$else}
@@ -1323,11 +1387,20 @@ var    odbcversion:word;
                HandleType:   SQLSMALLINT;
                Handle:       SQLHANDLE;
                RecNumber:    SQLSMALLINT;
-               Sqlstate:     PSQLCHAR;
+               SqlState:     PSQLCHAR;
                var NativeError: SQLINTEGER;
                MessageText:     PSQLCHAR;
                BufferLength:    SQLSMALLINT;
                var TextLength:  SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLGetDiagRecW(
+               HandleType:   SQLSMALLINT;
+               Handle:       SQLHANDLE;
+               RecNumber:    SQLSMALLINT;
+               SqlState:     PSQLWCHAR;
+               var NativeError: SQLINTEGER;
+               MessageText:     PSQLWCHAR;
+               BufferLength:    SQLSMALLINT;
+               var TextLength:  SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLGetDiagField(
                HandleType:SQLSMALLINT;
                Handle:SQLHANDLE;
@@ -1342,17 +1415,26 @@ var    odbcversion:word;
                UserName:PSQLCHAR;      NameLength2:SQLSMALLINT;
                Authentication:PSQLCHAR;NameLength3:SQLSMALLINT
               ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLConnectW(
+               ConnectionHandle: SQLHDBC;
+               ServerName:PSQLWCHAR;    NameLength1:SQLSMALLINT;
+               UserName:PSQLWCHAR;      NameLength2:SQLSMALLINT;
+               Authentication:PSQLWCHAR;NameLength3:SQLSMALLINT
+              ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLDisconnect(
                ConnectionHandle:SQLHDBC):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLDriverConnect(
-               hdbc: SQLHDBC;
-               hwnd: SQLHWND;
-               szCsin: PChar;
-               szCLen: SQLSMALLINT;
-               szCsout: PChar;
-               cbCSMax: SQLSMALLINT;
-               Var cbCsOut: SQLSMALLINT;
-               f: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+               ConnectionHandle: SQLHDBC;
+               WindowHandle: SQLHWND; InConnectionString: PSQLCHAR;
+               StringLength1: SQLSMALLINT; OutConnectionString: PSQLCHAR;
+               BufferLength: SQLSMALLINT; Var StringLength2: SQLSMALLINT;
+               DriverCompletion: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLDriverConnectW(
+               ConnectionHandle: SQLHDBC;
+               WindowHandle: SQLHWND; InConnectionString: PSQLWCHAR;
+               StringLength1: SQLSMALLINT; OutConnectionString: PSQLWCHAR;
+               BufferLength: SQLSMALLINT; Var StringLength2: SQLSMALLINT;
+               DriverCompletion: SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLBrowseConnect(
                hdbc : SQLHDBC;
                szConnStrIn :PSQLCHAR;
@@ -1364,10 +1446,18 @@ var    odbcversion:word;
                StatementHandle:SQLHSTMT;
                StatementText:  PSQLCHAR;
                TextLength:     SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLExecDirectW(
+               StatementHandle:SQLHSTMT;
+               StatementText:  PSQLWCHAR;
+               TextLength:     SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLPrepare(
                StatementHandle:SQLHSTMT;
                StatementText:PSQLCHAR;
                TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLPrepareW(
+               StatementHandle:SQLHSTMT;
+               StatementText:PSQLWCHAR;
+               TextLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLCloseCursor(
                StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLExecute(
@@ -1387,6 +1477,16 @@ var    odbcversion:word;
                var ColumnSize:SQLULEN;
                var DecimalDigits:SQLSMALLINT;
                var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLDescribeColW(
+               StatementHandle:SQLHSTMT;
+               ColumnNumber:SQLUSMALLINT;
+               ColumnName:PSQLWCHAR;
+               BufferLength:SQLSMALLINT;
+               var NameLength:SQLSMALLINT;
+               var DataType:SQLSMALLINT;
+               var ColumnSize:SQLULEN;
+               var DecimalDigits:SQLSMALLINT;
+               var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLFetchScroll(
                StatementHandle:SQLHSTMT;
                FetchOrientation:SQLSMALLINT;
@@ -1491,10 +1591,10 @@ var    odbcversion:word;
                StatementHandle:SQLHSTMT;
                ColumnNumber:SQLUSMALLINT;
                FieldIdentifier:SQLUSMALLINT;
-               CharacterAttribute:PSQLCHAR;
+               CharacterAttributePtr:SQLPOINTER;
                BufferLength:SQLSMALLINT;
-               StringLength:PSQLSMALLINT;
-               NumericAttribute:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+               StringLengthPtr:PSQLSMALLINT;
+               NumericAttributePtr:PSQLLEN):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
 {$ifdef ODBCVER3}
    function SQLEndTran(
                HandleType:SQLSMALLINT;
@@ -1510,6 +1610,15 @@ var    odbcversion:word;
                 cbTableName : SQLSMALLINT;
                 szTableType : PSQLCHAR;
                 cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
+   function SQLTablesW( hstmt : SQLHSTMT;
+                szTableQualifier : PSQLWCHAR;
+                cbTableQualifier : SQLSMALLINT;
+                szTableOwner : PSQLWCHAR;
+                cbTableOwner : SQLSMALLINT;
+                szTableName : PSQLWCHAR;
+                cbTableName : SQLSMALLINT;
+                szTableType : PSQLWCHAR;
+                cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
    function SQLColumns( hstmt : SQLHSTMT;
                 szTableQualifier : PSQLCHAR;
                 cbTableQualifier : SQLSMALLINT;
@@ -1519,6 +1628,15 @@ var    odbcversion:word;
                 cbTableName : SQLSMALLINT;
                 szColumnName : PSQLCHAR;
                 cbColumnName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
+   function SQLColumnsW( hstmt : SQLHSTMT;
+                szTableQualifier : PSQLWCHAR;
+                cbTableQualifier : SQLSMALLINT;
+                szTableOwner : PSQLWCHAR;
+                cbTableOwner : SQLSMALLINT;
+                szTableName : PSQLWCHAR;
+                cbTableName : SQLSMALLINT;
+                szColumnName : PSQLWCHAR;
+                cbColumnName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
    function SQLSpecialColumns(StatementHandle:SQLHSTMT;
                 IdentifierType:SQLUSMALLINT;
                 CatalogName:PSQLCHAR;
@@ -1536,23 +1654,38 @@ var    odbcversion:word;
                 cbTableOwner : SQLSMALLINT;
                 szTableName : PSQLCHAR;
                 cbTableName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
+   function SQLProceduresW( hstmt : SQLHSTMT;
+                szTableQualifier : PSQLWCHAR;
+                cbTableQualifier : SQLSMALLINT;
+                szTableOwner : PSQLWCHAR;
+                cbTableOwner : SQLSMALLINT;
+                szTableName : PSQLWCHAR;
+                cbTableName : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
    function SQLPrimaryKeys(hstmt : SQLHSTMT;
-                CatalogName:PSQLCHAR;NameLength1:SQLSMALLINT;
-                SchemaName:PSQLCHAR;NameLength2:SQLSMALLINT;
-                TableName:PSQLCHAR;
-                NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+                CatalogName:PSQLCHAR; NameLength1:SQLSMALLINT;
+                SchemaName:PSQLCHAR; NameLength2:SQLSMALLINT;
+                TableName:PSQLCHAR; NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+   function SQLPrimaryKeysW(hstmt : SQLHSTMT;
+                CatalogName:PSQLWCHAR; NameLength1:SQLSMALLINT;
+                SchemaName:PSQLWCHAR; NameLength2:SQLSMALLINT;
+                TableName:PSQLWCHAR; NameLength3:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
    function SQLProcedureColumns(hstmt: SQLHSTMT;
                 CatalogName: PSQLCHAR; NameLength1: SQLSMALLINT;
                 SchemaName: PSQLCHAR; NameLength2: SQLSMALLINT;
                 ProcName: PSQLCHAR; NameLength3: SQLSMALLINT;
-                ColumnName: PSQLCHAR; NameLength4: SQLSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
-                external odbclib;
+                ColumnName: PSQLCHAR; NameLength4: SQLSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
    function SQLStatistics(hstmt: SQLHSTMT;
                 CatalogName:PSQLCHAR; NameLength1:SQLSMALLINT;
                 SchemaName:PSQLCHAR; NameLength2:SQLSMALLINT;
                 TableName:PSQLCHAR; NameLength3:SQLSMALLINT;
                 Unique:SQLUSMALLINT;
                 Reserved:SQLUSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
+   function SQLStatisticsW(hstmt: SQLHSTMT;
+                CatalogName:PSQLWCHAR; NameLength1:SQLSMALLINT;
+                SchemaName:PSQLWCHAR; NameLength2:SQLSMALLINT;
+                TableName:PSQLWCHAR; NameLength3:SQLSMALLINT;
+                Unique:SQLUSMALLINT;
+                Reserved:SQLUSMALLINT): SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
 {$endif}
 // This function always load dynamic
 
@@ -1598,12 +1731,11 @@ begin
       end;
 
 {$ifdef fpc}
+    // Ansi versions:
     pointer(SQLAllocHandle) := GetProcedureAddress(ODBCLibraryHandle,'SQLAllocHandle');
     pointer(SQLSetEnvAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetEnvAttr');
     pointer(SQLFreeHandle) := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeHandle');
     pointer(SQLGetInfo) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetInfo');
-    pointer(SQLProcedures) := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedures');
-    pointer(SQLColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLColumns');
     pointer(SQLSpecialColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLSpecialColumns');
     pointer(SQLGetDiagRec) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagRec');
     pointer(SQLGetDiagField) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagField');
@@ -1639,9 +1771,22 @@ begin
     pointer(SQLColAttribute) := GetProcedureAddress(ODBCLibraryHandle,'SQLColAttribute');
     pointer(SQLEndTran) := GetProcedureAddress(ODBCLibraryHandle,'SQLEndTran');
     pointer(SQLTables) := GetProcedureAddress(ODBCLibraryHandle,'SQLTables');
+    pointer(SQLColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLColumns');
     pointer(SQLPrimaryKeys) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrimaryKeys');
+    pointer(SQLProcedures) := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedures');
     pointer(SQLProcedureColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedureColumns');
     pointer(SQLStatistics) := GetProcedureAddress(ODBCLibraryHandle,'SQLStatistics');
+    // Unicode versions:
+    pointer(SQLConnectW) := GetProcedureAddress(ODBCLibraryHandle,'SQLConnectW');
+    pointer(SQLDriverConnectW) := GetProcedureAddress(ODBCLibraryHandle,'SQLDriverConnectW');
+    pointer(SQLExecDirectW) := GetProcedureAddress(ODBCLibraryHandle,'SQLExecDirectW');
+    pointer(SQLPrepareW) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrepareW');
+    pointer(SQLDescribeColW) := GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeColW');
+    pointer(SQLTablesW) := GetProcedureAddress(ODBCLibraryHandle,'SQLTablesW');
+    pointer(SQLColumnsW) := GetProcedureAddress(ODBCLibraryHandle,'SQLColumnsW');
+    pointer(SQLProceduresW) := GetProcedureAddress(ODBCLibraryHandle,'SQLProceduresW');
+    pointer(SQLPrimaryKeysW) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrimaryKeysW');
+    pointer(SQLStatisticsW) := GetProcedureAddress(ODBCLibraryHandle,'SQLStatisticsW');
 {$else}
     SQLAllocHandle := GetProcedureAddress(ODBCLibraryHandle,'SQLAllocHandle');
     SQLSetEnvAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetEnvAttr');