summaryrefslogtreecommitdiff
path: root/packages/odbc/src/odbcsql.inc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/odbc/src/odbcsql.inc')
-rw-r--r--packages/odbc/src/odbcsql.inc1709
1 files changed, 1709 insertions, 0 deletions
diff --git a/packages/odbc/src/odbcsql.inc b/packages/odbc/src/odbcsql.inc
new file mode 100644
index 0000000000..5c284ff530
--- /dev/null
+++ b/packages/odbc/src/odbcsql.inc
@@ -0,0 +1,1709 @@
+{$ifdef fpc}
+{$mode objfpc}
+{$macro on}
+{$endif}
+
+{$h+}
+
+{$ifdef fpc}
+ // define ODBC version 3.51 by default
+{$define ODBCVER:=$0351}
+{$if ODBCVER >= $0300}
+ {$define ODBCVER3}
+{$endif}
+{$if ODBCVER >= $0350}
+ {$define ODBCVER35}
+{$endif}
+{$else fpc}
+ {$define ODBCVER3}
+ {$define ODBCVER35}
+{$endif fpc}
+
+interface
+
+uses
+{$IFDEF DYNLOADINGODBC}
+ Dynlibs,
+{$ENDIF}
+ ctypes,
+ sysutils;
+
+{$IFDEF Unix}
+ {$DEFINE extdecl:=cdecl}
+ const
+ odbclib = 'libodbc.so';
+{$ENDIF}
+{$IFDEF Windows}
+ {$DEFINE extdecl:=stdcall}
+ const
+ odbclib = 'odbc32.dll';
+{$ENDIF}
+
+(* DATA TYPES CORRESPONDENCE
+ BDE fields ODBC types
+ ---------- ------------------
+ ftBlob SQL_BINARY
+ ftBoolean SQL_BIT
+ ftDate SQL_TYPE_DATE
+ ftTime SQL_TYPE_TIME
+ ftDateTime SQL_TYPE_TIMESTAMP
+ ftInteger SQL_INTEGER
+ ftSmallint SQL_SMALLINT
+ ftFloat SQL_DOUBLE
+ ftString SQL_CHAR
+ ftMemo SQL_BINARY // SQL_VARCHAR
+*)
+
+type
+ SQLCHAR = char;
+ SQLSMALLINT = csshort;
+ SQLUSMALLINT = cushort;
+ SQLRETURN = SQLSMALLINT;
+ SQLHANDLE = pointer;
+ SQLHENV = SQLHANDLE;
+ SQLHDBC = SQLHANDLE;
+ SQLHSTMT = SQLHANDLE;
+ SQLHDESC = SQLHANDLE;
+ SQLINTEGER = clong;
+ SQLUINTEGER = culong;
+ SQLPOINTER = pointer;
+ SQLREAL = cfloat;
+ SQLDOUBLE = cdouble;
+ SQLFLOAT = cdouble;
+ SQLHWND = pointer;
+ PSQLCHAR = PChar;
+ PSQLINTEGER = ^SQLINTEGER;
+ PSQLUINTEGER = ^SQLUINTEGER;
+ PSQLSMALLINT = ^SQLSMALLINT;
+ PSQLUSMALLINT = ^SQLUSMALLINT;
+ PSQLREAL = ^SQLREAL;
+ PSQLDOUBLE = ^SQLDOUBLE;
+ PSQLFLOAT = ^SQLFLOAT;
+ PSQLHANDLE = ^SQLHANDLE;
+
+const
+ { SQL data type codes }
+ SQL_UNKNOWN_TYPE = 0;
+ SQL_LONGVARCHAR =(-1);
+ SQL_BINARY =(-2);
+ SQL_VARBINARY =(-3);
+ SQL_LONGVARBINARY =(-4);
+ SQL_BIGINT =(-5);
+ SQL_TINYINT =(-6);
+ SQL_BIT =(-7);
+ SQL_WCHAR =(-8);
+ SQL_WVARCHAR =(-9);
+ SQL_WLONGVARCHAR =(-10);
+
+
+ SQL_CHAR = 1;
+ SQL_NUMERIC = 2;
+ SQL_DECIMAL = 3;
+ SQL_INTEGER = 4;
+ SQL_SMALLINT = 5;
+ SQL_FLOAT = 6;
+ SQL_REAL = 7;
+ SQL_DOUBLE = 8;
+ {$ifdef ODBCVER3}
+ SQL_DATETIME = 9;
+ {$endif}
+ SQL_VARCHAR = 12;
+
+ {$ifdef ODBCVER3}
+ SQL_TYPE_DATE = 91;
+ SQL_TYPE_TIME = 92;
+ SQL_TYPE_TIMESTAMP= 93;
+ {$endif}
+
+ SQL_DATE = 9;
+ SQL_TIME = 10;
+ SQL_TIMESTAMP = 11;
+ {$if ODBCVER >= $0300}
+ SQL_INTERVAL = 10;
+ {$endif}
+ {$if ODBCVER >= $0350}
+ SQL_GUID = -11;
+ {$endif}
+
+ { interval codes}
+ {$ifdef ODBCVER3}
+ SQL_CODE_YEAR = 1;
+ SQL_CODE_MONTH = 2;
+ SQL_CODE_DAY = 3;
+ SQL_CODE_HOUR = 4;
+ SQL_CODE_MINUTE = 5;
+ SQL_CODE_SECOND = 6;
+ SQL_CODE_YEAR_TO_MONTH = 7;
+ SQL_CODE_DAY_TO_HOUR = 8;
+ SQL_CODE_DAY_TO_MINUTE = 9;
+ SQL_CODE_DAY_TO_SECOND = 10;
+ SQL_CODE_HOUR_TO_MINUTE = 11;
+ SQL_CODE_HOUR_TO_SECOND = 12;
+ SQL_CODE_MINUTE_TO_SECOND = 13;
+
+ SQL_INTERVAL_YEAR = 100 + SQL_CODE_YEAR;
+ SQL_INTERVAL_MONTH = 100 + SQL_CODE_MONTH;
+ SQL_INTERVAL_DAY = 100 + SQL_CODE_DAY;
+ SQL_INTERVAL_HOUR = 100 + SQL_CODE_HOUR;
+ SQL_INTERVAL_MINUTE = 100 + SQL_CODE_MINUTE;
+ SQL_INTERVAL_SECOND = 100 + SQL_CODE_SECOND;
+ SQL_INTERVAL_YEAR_TO_MONTH = 100 + SQL_CODE_YEAR_TO_MONTH;
+ SQL_INTERVAL_DAY_TO_HOUR = 100 + SQL_CODE_DAY_TO_HOUR;
+ SQL_INTERVAL_DAY_TO_MINUTE = 100 + SQL_CODE_DAY_TO_MINUTE;
+ SQL_INTERVAL_DAY_TO_SECOND = 100 + SQL_CODE_DAY_TO_SECOND;
+ SQL_INTERVAL_HOUR_TO_MINUTE = 100 + SQL_CODE_HOUR_TO_MINUTE;
+ SQL_INTERVAL_HOUR_TO_SECOND = 100 + SQL_CODE_HOUR_TO_SECOND;
+ SQL_INTERVAL_MINUTE_TO_SECOND = 100 + SQL_CODE_MINUTE_TO_SECOND;
+ {$else}
+ SQL_INTERVAL_YEAR = -80;
+ SQL_INTERVAL_MONTH = -81;
+ SQL_INTERVAL_YEAR_TO_MONTH = -82;
+ SQL_INTERVAL_DAY = -83;
+ SQL_INTERVAL_HOUR = -84;
+ SQL_INTERVAL_MINUTE = -85;
+ SQL_INTERVAL_SECOND = -86;
+ SQL_INTERVAL_DAY_TO_HOUR = -87;
+ SQL_INTERVAL_DAY_TO_MINUTE = -88;
+ SQL_INTERVAL_DAY_TO_SECOND = -89;
+ SQL_INTERVAL_HOUR_TO_MINUTE = -90;
+ SQL_INTERVAL_HOUR_TO_SECOND = -91;
+ SQL_INTERVAL_MINUTE_TO_SECOND = -92;
+ {$endif}
+
+ { Unicode data type codes }
+ {$ifndef ODBCVER3}
+ SQL_UNICODE = -95;
+ SQL_UNICODE_VARCHAR = -96;
+ SQL_UNICODE_LONGVARCHAR = -97;
+ SQL_UNICODE_CHAR = SQL_UNICODE;
+ {$else}
+ { The previous definitions for SQL_UNICODE_ are historical and obsolete }
+ SQL_UNICODE = SQL_WCHAR;
+ SQL_UNICODE_VARCHAR = SQL_WVARCHAR;
+ SQL_UNICODE_LONGVARCHAR = SQL_WLONGVARCHAR;
+ SQL_UNICODE_CHAR = SQL_WCHAR;
+ {$endif}
+
+ { C datatype to SQL datatype mapping }
+ SQL_C_CHAR = SQL_CHAR;
+ SQL_C_LONG = SQL_INTEGER;
+ SQL_C_SHORT = SQL_SMALLINT;
+ SQL_C_FLOAT = SQL_REAL;
+ SQL_C_DOUBLE = SQL_DOUBLE;
+{$ifdef ODBCVER3}
+ SQL_C_NUMERIC = SQL_NUMERIC;
+{$endif}
+ SQL_C_DEFAULT = 99;
+
+ SQL_SIGNED_OFFSET = -20;
+ SQL_UNSIGNED_OFFSET = -22;
+
+ SQL_C_DATE = SQL_DATE;
+ SQL_C_TIME = SQL_TIME;
+ SQL_C_TIMESTAMP = SQL_TIMESTAMP;
+{$ifdef ODBCVER3}
+ SQL_C_TYPE_DATE = SQL_TYPE_DATE;
+ SQL_C_TYPE_TIME = SQL_TYPE_TIME;
+ SQL_C_TYPE_TIMESTAMP = SQL_TYPE_TIMESTAMP;
+ SQL_C_INTERVAL_YEAR = SQL_INTERVAL_YEAR;
+ SQL_C_INTERVAL_MONTH = SQL_INTERVAL_MONTH;
+ SQL_C_INTERVAL_DAY = SQL_INTERVAL_DAY;
+ SQL_C_INTERVAL_HOUR = SQL_INTERVAL_HOUR;
+ SQL_C_INTERVAL_MINUTE = SQL_INTERVAL_MINUTE;
+ SQL_C_INTERVAL_SECOND = SQL_INTERVAL_SECOND;
+ SQL_C_INTERVAL_YEAR_TO_MONTH = SQL_INTERVAL_YEAR_TO_MONTH;
+ SQL_C_INTERVAL_DAY_TO_HOUR = SQL_INTERVAL_DAY_TO_HOUR;
+ SQL_C_INTERVAL_DAY_TO_MINUTE = SQL_INTERVAL_DAY_TO_MINUTE;
+ SQL_C_INTERVAL_DAY_TO_SECOND = SQL_INTERVAL_DAY_TO_SECOND;
+ SQL_C_INTERVAL_HOUR_TO_MINUTE = SQL_INTERVAL_HOUR_TO_MINUTE;
+ SQL_C_INTERVAL_HOUR_TO_SECOND = SQL_INTERVAL_HOUR_TO_SECOND;
+ SQL_C_INTERVAL_MINUTE_TO_SECOND = SQL_INTERVAL_MINUTE_TO_SECOND;
+{$endif}
+ SQL_C_BINARY = SQL_BINARY;
+ SQL_C_BIT = SQL_BIT;
+{$ifdef ODBCVER3}
+ SQL_C_SBIGINT = SQL_BIGINT+SQL_SIGNED_OFFSET; // SIGNED BIGINT
+ SQL_C_UBIGINT = SQL_BIGINT+SQL_UNSIGNED_OFFSET; // UNSIGNED BIGINT
+{$endif}
+ SQL_C_TINYINT = SQL_TINYINT;
+ SQL_C_SLONG = SQL_C_LONG +SQL_SIGNED_OFFSET; // SIGNED INTEGER
+ SQL_C_SSHORT = SQL_C_SHORT+SQL_SIGNED_OFFSET; // SIGNED SMALLINT
+ SQL_C_STINYINT = SQL_TINYINT+SQL_SIGNED_OFFSET; // SIGNED TINYINT
+ SQL_C_ULONG = SQL_C_LONG +SQL_UNSIGNED_OFFSET; // UNSIGNED INTEGER
+ SQL_C_USHORT = SQL_C_SHORT+SQL_UNSIGNED_OFFSET; // UNSIGNED SMALLINT
+ SQL_C_UTINYINT = SQL_TINYINT+SQL_UNSIGNED_OFFSET; // UNSIGNED TINYINT
+ SQL_C_BOOKMARK = SQL_C_ULONG; // BOOKMARK
+
+{$ifdef ODBCVER35}
+ SQL_C_GUID = SQL_GUID;
+{$endif}
+
+ SQL_TYPE_NULL = 0;
+{$ifndef ODBCVER3}
+ SQL_TYPE_MIN = SQL_BIT;
+ SQL_TYPE_MAX = SQL_VARCHAR;
+{$endif}
+
+{$ifdef ODBCVER3}
+ SQL_C_VARBOOKMARK = SQL_C_BINARY;
+{$endif}
+
+ SQL_API_SQLDESCRIBEPARAM=58;
+ SQL_NO_TOTAL = -4;
+
+type
+ SQL_DATE_STRUCT = packed record
+ Year : SQLSMALLINT;
+ Month : SQLUSMALLINT;
+ Day : SQLUSMALLINT;
+ end;
+ PSQL_DATE_STRUCT = ^SQL_DATE_STRUCT;
+
+ SQL_TIME_STRUCT = packed record
+ Hour : SQLUSMALLINT;
+ Minute : SQLUSMALLINT;
+ Second : SQLUSMALLINT;
+ end;
+ PSQL_TIME_STRUCT = ^SQL_TIME_STRUCT;
+
+ SQL_TIMESTAMP_STRUCT = packed record
+ Year : SQLUSMALLINT;
+ Month : SQLUSMALLINT;
+ Day : SQLUSMALLINT;
+ Hour : SQLUSMALLINT;
+ Minute : SQLUSMALLINT;
+ Second : SQLUSMALLINT;
+ Fraction : SQLUINTEGER;
+ end;
+ PSQL_TIMESTAMP_STRUCT = ^SQL_TIMESTAMP_STRUCT;
+
+const
+ SQL_NAME_LEN = 128;
+
+ SQL_OV_ODBC3 = 3;
+ SQL_OV_ODBC2 = 2;
+ SQL_ATTR_ODBC_VERSION = 200;
+
+ { Options for SQLDriverConnect }
+ SQL_DRIVER_NOPROMPT = 0;
+ SQL_DRIVER_COMPLETE = 1;
+ SQL_DRIVER_PROMPT = 2;
+ SQL_DRIVER_COMPLETE_REQUIRED = 3;
+
+ { whether an attribute is a pointer or not }
+ SQL_IS_POINTER = (-4);
+ SQL_IS_UINTEGER = (-5);
+ SQL_IS_INTEGER = (-6);
+ SQL_IS_USMALLINT = (-7);
+ SQL_IS_SMALLINT = (-8);
+ { SQLExtendedFetch "fFetchType" values }
+ SQL_FETCH_BOOKMARK = 8;
+
+ SQL_SCROLL_OPTIONS = 44;
+
+ { SQL_USE_BOOKMARKS options }
+ SQL_UB_OFF = 0;
+ SQL_UB_ON = 1;
+ SQL_UB_DEFAULT = SQL_UB_OFF;
+ SQL_UB_FIXED = SQL_UB_ON;
+ SQL_UB_VARIABLE = 2;
+
+ { SQL_SCROLL_OPTIONS masks }
+ SQL_SO_FORWARD_ONLY = $01;
+ SQL_SO_KEYSET_DRIVEN = $02;
+ SQL_SO_DYNAMIC = $04;
+ SQL_SO_MIXED = $08;
+ SQL_SO_STATIC = $10;
+
+ SQL_BOOKMARK_PERSISTENCE = 82;
+ SQL_STATIC_SENSITIVITY = 83;
+
+ { SQL_BOOKMARK_PERSISTENCE values }
+ SQL_BP_CLOSE = $01;
+ SQL_BP_DELETE = $02;
+ SQL_BP_DROP = $04;
+ SQL_BP_TRANSACTION = $08;
+ SQL_BP_UPDATE = $10;
+ SQL_BP_OTHER_HSTMT = $20;
+ SQL_BP_SCROLL = $40;
+
+ SQL_DYNAMIC_CURSOR_ATTRIBUTES1 = 144;
+ SQL_DYNAMIC_CURSOR_ATTRIBUTES2 = 145;
+ SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 = 146;
+ SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 = 147;
+ SQL_INDEX_KEYWORDS = 148;
+ SQL_INFO_SCHEMA_VIEWS = 149;
+ SQL_KEYSET_CURSOR_ATTRIBUTES1 = 150;
+ SQL_KEYSET_CURSOR_ATTRIBUTES2 = 151;
+ SQL_STATIC_CURSOR_ATTRIBUTES1 = 167;
+ SQL_STATIC_CURSOR_ATTRIBUTES2 = 168;
+
+ { supported SQLFetchScroll FetchOrientation's }
+ SQL_CA1_NEXT = 1;
+ SQL_CA1_ABSOLUTE = 2;
+ SQL_CA1_RELATIVE = 4;
+ SQL_CA1_BOOKMARK = 8;
+
+ { supported SQLSetPos LockType's }
+ SQL_CA1_LOCK_NO_CHANGE= $40;
+ SQL_CA1_LOCK_EXCLUSIVE= $80;
+ SQL_CA1_LOCK_UNLOCK =$100;
+
+ { supported SQLSetPos Operations }
+ SQL_CA1_POS_POSITION = $200;
+ SQL_CA1_POS_UPDATE = $400;
+ SQL_CA1_POS_DELETE = $800;
+ SQL_CA1_POS_REFRESH =$1000;
+
+ { positioned updates and deletes }
+ SQL_CA1_POSITIONED_UPDATE=$2000;
+ SQL_CA1_POSITIONED_DELETE=$4000;
+ SQL_CA1_SELECT_FOR_UPDATE=$8000;
+
+ { supported SQLBulkOperations operations }
+ SQL_CA1_BULK_ADD =$10000;
+ SQL_CA1_BULK_UPDATE_BY_BOOKMARK =$20000;
+ SQL_CA1_BULK_DELETE_BY_BOOKMARK =$40000;
+ SQL_CA1_BULK_FETCH_BY_BOOKMARK =$80000;
+
+ { supported values for SQL_ATTR_SCROLL_CONCURRENCY }
+ SQL_CA2_READ_ONLY_CONCURRENCY = 1;
+ SQL_CA2_LOCK_CONCURRENCY = 2;
+ SQL_CA2_OPT_ROWVER_CONCURRENCY= 4;
+ SQL_CA2_OPT_VALUES_CONCURRENCY= 8;
+
+ { sensitivity of the cursor to its own inserts, deletes, and updates }
+ SQL_CA2_SENSITIVITY_ADDITIONS =$10;
+ SQL_CA2_SENSITIVITY_DELETIONS =$20;
+ SQL_CA2_SENSITIVITY_UPDATES =$40;
+
+{ semantics of SQL_ATTR_MAX_ROWS }
+ SQL_CA2_MAX_ROWS_SELECT = $80;
+ SQL_CA2_MAX_ROWS_INSERT =$100;
+ SQL_CA2_MAX_ROWS_DELETE =$200;
+ SQL_CA2_MAX_ROWS_UPDATE =$400;
+ SQL_CA2_MAX_ROWS_CATALOG =$800;
+ SQL_CA2_MAX_ROWS_AFFECTS_ALL =(SQL_CA2_MAX_ROWS_SELECT or
+ SQL_CA2_MAX_ROWS_INSERT or SQL_CA2_MAX_ROWS_DELETE or
+ SQL_CA2_MAX_ROWS_UPDATE or SQL_CA2_MAX_ROWS_CATALOG);
+
+ { semantics of SQL_DIAG_CURSOR_ROW_COUNT }
+ SQL_CA2_CRC_EXACT = $1000;
+ SQL_CA2_CRC_APPROXIMATE = $2000;
+
+ { the kinds of positioned statements that can be simulated }
+ SQL_CA2_SIMULATE_NON_UNIQUE = $4000;
+ SQL_CA2_SIMULATE_TRY_UNIQUE = $8000;
+ SQL_CA2_SIMULATE_UNIQUE =$10000;
+
+ { Operations in SQLBulkOperations }
+ SQL_ADD = 4;
+ SQL_SETPOS_MAX_OPTION_VALUE = SQL_ADD;
+ SQL_UPDATE_BY_BOOKMARK = 5;
+ SQL_DELETE_BY_BOOKMARK = 6;
+ SQL_FETCH_BY_BOOKMARK = 7;
+
+ { Operations in SQLSetPos }
+ SQL_POSITION = 0;
+ SQL_REFRESH = 1;
+ SQL_UPDATE = 2;
+ SQL_DELETE = 3;
+
+ { Lock options in SQLSetPos }
+ SQL_LOCK_NO_CHANGE = 0;
+ SQL_LOCK_EXCLUSIVE = 1;
+ SQL_LOCK_UNLOCK = 2;
+
+ { SQLExtendedFetch "rgfRowStatus" element values }
+ SQL_ROW_SUCCESS = 0;
+ SQL_ROW_DELETED = 1;
+ SQL_ROW_UPDATED = 2;
+ SQL_ROW_NOROW = 3;
+ SQL_ROW_ADDED = 4;
+ SQL_ROW_ERROR = 5;
+ SQL_ROW_SUCCESS_WITH_INFO = 6;
+
+ SQL_ROW_PROCEED = 0;
+ SQL_ROW_IGNORE = 1;
+
+ SQL_MAX_DSN_LENGTH = 32; { maximum data source name size }
+
+ SQL_MAX_OPTION_STRING_LENGTH = 256;
+
+ SQL_ODBC_CURSORS = 110;
+ SQL_ATTR_ODBC_CURSORS = SQL_ODBC_CURSORS;
+ { SQL_ODBC_CURSORS options }
+ SQL_CUR_USE_IF_NEEDED = 0;
+ SQL_CUR_USE_ODBC = 1;
+ SQL_CUR_USE_DRIVER = 2;
+ SQL_CUR_DEFAULT = SQL_CUR_USE_DRIVER;
+
+ SQL_PARAM_TYPE_UNKNOWN = 0;
+ SQL_PARAM_INPUT = 1;
+ SQL_PARAM_INPUT_OUTPUT = 2;
+ SQL_RESULT_COL = 3;
+ SQL_PARAM_OUTPUT = 4;
+ SQL_RETURN_VALUE = 5;
+
+ { special length/indicator values }
+ SQL_NULL_DATA = (-1);
+ SQL_DATA_AT_EXEC = (-2);
+
+ SQL_SUCCESS = 0;
+ SQL_SUCCESS_WITH_INFO = 1;
+
+ SQL_NO_DATA = 100;
+ SQL_ERROR = (-1);
+ SQL_INVALID_HANDLE = (-2);
+
+ SQL_STILL_EXECUTING = 2;
+ SQL_NEED_DATA = 99;
+ { flags for null-terminated string }
+ SQL_NTS = (-3);
+
+ { maximum message length }
+ SQL_MAX_MESSAGE_LENGTH = 512;
+
+ { date/time length constants }
+{$ifdef ODBCVER3}
+ SQL_DATE_LEN = 10;
+ SQL_TIME_LEN = 8; { add P+1 if precision is nonzero }
+ SQL_TIMESTAMP_LEN = 19; { add P+1 if precision is nonzero }
+{$endif}
+
+ { handle type identifiers }
+ SQL_HANDLE_ENV = 1;
+ SQL_HANDLE_DBC = 2;
+ SQL_HANDLE_STMT = 3;
+ SQL_HANDLE_DESC = 4;
+
+{$ifdef ODBCVER3}
+ { environment attribute }
+ SQL_ATTR_OUTPUT_NTS = 10001;
+ { connection attributes }
+ SQL_ATTR_AUTO_IPD = 10001;
+ SQL_ATTR_METADATA_ID = 10014;
+{$endif} { ODBCVER >= 0x0300 }
+
+ { statement attributes }
+ SQL_ATTR_APP_ROW_DESC = 10010;
+ SQL_ATTR_APP_PARAM_DESC = 10011;
+ SQL_ATTR_IMP_ROW_DESC = 10012;
+ SQL_ATTR_IMP_PARAM_DESC = 10013;
+ SQL_ATTR_CURSOR_SCROLLABLE = (-1);
+ SQL_ATTR_CURSOR_SENSITIVITY = (-2);
+ SQL_QUERY_TIMEOUT =0;
+ SQL_MAX_ROWS =1;
+ SQL_NOSCAN =2;
+ SQL_MAX_LENGTH =3;
+ SQL_ASYNC_ENABLE =4; // same as SQL_ATTR_ASYNC_ENABLE */
+ SQL_BIND_TYPE =5;
+ SQL_CURSOR_TYPE = 6;
+ SQL_CONCURRENCY = 7;
+ SQL_KEYSET_SIZE =8;
+ SQL_ROWSET_SIZE =9;
+ SQL_SIMULATE_CURSOR =10;
+ SQL_RETRIEVE_DATA =11;
+ SQL_USE_BOOKMARKS =12;
+ SQL_GET_BOOKMARK =13; // GetStmtOption Only */
+ SQL_ROW_NUMBER = 14; // GetStmtOption Only */
+
+ SQL_ATTR_CURSOR_TYPE = SQL_CURSOR_TYPE;
+ SQL_ATTR_CONCURRENCY = SQL_CONCURRENCY;
+ SQL_ATTR_FETCH_BOOKMARK_PTR = 16;
+ SQL_ATTR_ROW_STATUS_PTR = 25;
+ SQL_ATTR_ROWS_FETCHED_PTR = 26;
+ SQL_AUTOCOMMIT = 102;
+ SQL_ATTR_AUTOCOMMIT = SQL_AUTOCOMMIT;
+
+ SQL_ATTR_ROW_NUMBER = SQL_ROW_NUMBER;
+ SQL_TXN_ISOLATION = 108;
+ SQL_ATTR_TXN_ISOLATION = SQL_TXN_ISOLATION;
+ SQL_ATTR_MAX_ROWS = SQL_MAX_ROWS;
+ SQL_ATTR_USE_BOOKMARKS = SQL_USE_BOOKMARKS;
+
+//* connection attributes */
+ SQL_ACCESS_MODE =101;
+// SQL_AUTOCOMMIT =102;
+ SQL_LOGIN_TIMEOUT =103;
+ SQL_OPT_TRACE =104;
+ SQL_OPT_TRACEFILE =105;
+ SQL_TRANSLATE_DLL =106;
+ SQL_TRANSLATE_OPTION =107;
+// SQL_TXN_ISOLATION =108;
+ SQL_CURRENT_QUALIFIER =109;
+// SQL_ODBC_CURSORS =110;
+ SQL_QUIET_MODE =111;
+ SQL_PACKET_SIZE =112;
+
+
+//* connection attributes with new names */
+ SQL_ATTR_ACCESS_MODE =SQL_ACCESS_MODE;
+// SQL_ATTR_AUTOCOMMIT =SQL_AUTOCOMMIT;
+ SQL_ATTR_CONNECTION_DEAD =1209; //* GetConnectAttr only */
+ SQL_ATTR_CONNECTION_TIMEOUT =113;
+ SQL_ATTR_CURRENT_CATALOG =SQL_CURRENT_QUALIFIER;
+ SQL_ATTR_DISCONNECT_BEHAVIOR=114;
+ SQL_ATTR_ENLIST_IN_DTC =1207;
+ SQL_ATTR_ENLIST_IN_XA =1208;
+ SQL_ATTR_LOGIN_TIMEOUT =SQL_LOGIN_TIMEOUT;
+// SQL_ATTR_ODBC_CURSORS =SQL_ODBC_CURSORS;
+ SQL_ATTR_PACKET_SIZE =SQL_PACKET_SIZE;
+ SQL_ATTR_QUIET_MODE =SQL_QUIET_MODE;
+ SQL_ATTR_TRACE =SQL_OPT_TRACE;
+ SQL_ATTR_TRACEFILE =SQL_OPT_TRACEFILE;
+ SQL_ATTR_TRANSLATE_LIB =SQL_TRANSLATE_DLL;
+ SQL_ATTR_TRANSLATE_OPTION =SQL_TRANSLATE_OPTION;
+// SQL_ATTR_TXN_ISOLATION =SQL_TXN_ISOLATION;
+
+//* SQL_ACCESS_MODE options */
+ SQL_MODE_READ_WRITE =0;
+ SQL_MODE_READ_ONLY =1;
+ SQL_MODE_DEFAULT =SQL_MODE_READ_WRITE;
+
+ //* SQL_AUTOCOMMIT options */
+ SQL_AUTOCOMMIT_OFF = 0;
+ SQL_AUTOCOMMIT_ON = 1;
+ SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON;
+ { SQL_ATTR_CURSOR_SCROLLABLE values }
+ SQL_NONSCROLLABLE = 0;
+ SQL_SCROLLABLE = 1;
+ { SQL_CURSOR_TYPE options }
+ SQL_CURSOR_FORWARD_ONLY = 0;
+ SQL_CURSOR_KEYSET_DRIVEN = 1;
+ SQL_CURSOR_DYNAMIC = 2;
+ SQL_CURSOR_STATIC = 3;
+ SQL_CURSOR_TYPE_DEFAULT = SQL_CURSOR_FORWARD_ONLY;{ Default value }
+
+ { SQL_CONCURRENCY options }
+ SQL_CONCUR_READ_ONLY = 1;
+ SQL_CONCUR_LOCK = 2;
+ SQL_CONCUR_ROWVER = 3;
+ SQL_CONCUR_VALUES = 4;
+ SQL_CONCUR_DEFAULT = SQL_CONCUR_READ_ONLY; { Default value }
+
+ { identifiers of fields in the SQL descriptor }
+ {$ifdef ODBCVER3}
+ SQL_DESC_COUNT = 1001;
+ SQL_DESC_TYPE = 1002;
+ SQL_DESC_LENGTH = 1003;
+ SQL_DESC_OCTET_LENGTH_PTR = 1004;
+ SQL_DESC_PRECISION = 1005;
+ SQL_DESC_SCALE = 1006;
+ SQL_DESC_DATETIME_INTERVAL_CODE = 1007;
+ SQL_DESC_NULLABLE = 1008;
+ SQL_DESC_INDICATOR_PTR = 1009;
+ SQL_DESC_DATA_PTR = 1010;
+ SQL_DESC_NAME = 1011;
+ SQL_DESC_UNNAMED = 1012;
+ SQL_DESC_OCTET_LENGTH = 1013;
+ SQL_DESC_ALLOC_TYPE = 1099;
+ {$endif}
+
+ { identifiers of fields in the diagnostics area }
+{$ifdef ODBCVER3}
+ SQL_DIAG_RETURNCODE = 1;
+ SQL_DIAG_NUMBER = 2;
+ SQL_DIAG_ROW_COUNT = 3;
+ SQL_DIAG_SQLSTATE = 4;
+ SQL_DIAG_NATIVE = 5;
+ SQL_DIAG_MESSAGE_TEXT = 6;
+ SQL_DIAG_DYNAMIC_FUNCTION = 7;
+ SQL_DIAG_CLASS_ORIGIN = 8;
+ SQL_DIAG_SUBCLASS_ORIGIN = 9;
+ SQL_DIAG_CONNECTION_NAME = 10;
+ SQL_DIAG_SERVER_NAME = 11;
+ SQL_DIAG_DYNAMIC_FUNCTION_CODE = 12;
+{$endif}
+
+ { dynamic function codes }
+{$ifdef ODBCVER3}
+ SQL_DIAG_ALTER_TABLE = 4;
+ SQL_DIAG_CREATE_INDEX = (-1);
+ SQL_DIAG_CREATE_TABLE = 77;
+ SQL_DIAG_CREATE_VIEW = 84;
+ SQL_DIAG_DELETE_WHERE = 19;
+ SQL_DIAG_DROP_INDEX = (-2);
+ SQL_DIAG_DROP_TABLE = 32;
+ SQL_DIAG_DROP_VIEW = 36;
+ SQL_DIAG_DYNAMIC_DELETE_CURSOR = 38;
+ SQL_DIAG_DYNAMIC_UPDATE_CURSOR = 81;
+ SQL_DIAG_GRANT = 48;
+ SQL_DIAG_INSERT = 50;
+ SQL_DIAG_REVOKE = 59;
+ SQL_DIAG_SELECT_CURSOR = 85;
+ SQL_DIAG_UNKNOWN_STATEMENT = 0;
+ SQL_DIAG_UPDATE_WHERE = 82;
+{$endif} { ODBCVER >= 0x0300 }
+
+ { Statement attribute values for cursor sensitivity }
+{$ifdef ODBCVER3}
+ SQL_UNSPECIFIED = 0;
+ SQL_INSENSITIVE = 1;
+ SQL_SENSITIVE = 2;
+{$endif}
+
+ { GetTypeInfo() request for all data types }
+ SQL_ALL_TYPES = 0;
+
+ { Default conversion code for SQLBindCol(), SQLBindParam() and SQLGetData() }
+{$ifdef ODBCVER3}
+ SQL_DEFAULT = 99;
+{$endif}
+
+ { SQLGetData() code indicating that the application row descriptor
+ specifies the data type }
+{$ifdef ODBCVER3}
+ SQL_ARD_TYPE = (-99);
+{$endif}
+
+ { SQL date/time type subcodes }
+{$ifdef ODBCVER3}
+ SQL_CODE_DATE = 1;
+ SQL_CODE_TIME = 2;
+ SQL_CODE_TIMESTAMP = 3;
+{$endif}
+
+ { CLI option values }
+{$ifdef ODBCVER3}
+ SQL_FALSE = 0;
+ SQL_TRUE = 1;
+{$endif}
+
+ { values of NULLABLE field in descriptor }
+ SQL_NO_NULLS = 0;
+ SQL_NULLABLE = 1;
+
+{ Value returned by SQLGetTypeInfo() to denote that it is
+ not known whether or not a data type supports null values. }
+
+ SQL_NULLABLE_UNKNOWN = 2;
+{
+/* Values returned by SQLGetTypeInfo() to show WHERE clause
+ * supported
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PRED_NONE 0
+#define SQL_PRED_CHAR 1
+#define SQL_PRED_BASIC 2
+#endif
+
+/* values of UNNAMED field in descriptor */
+#if (ODBCVER >= 0x0300)
+#define SQL_NAMED 0
+#define SQL_UNNAMED 1
+#endif
+
+/* values of ALLOC_TYPE field in descriptor */
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_ALLOC_AUTO 1
+#define SQL_DESC_ALLOC_USER 2
+#endif
+}
+ { FreeStmt() options }
+ SQL_CLOSE = 0;
+ SQL_DROP = 1;
+ SQL_UNBIND = 2;
+ SQL_RESET_PARAMS = 3;
+
+ { Codes used for FetchOrientation in SQLFetchScroll(),
+ and in SQLDataSources() }
+ SQL_FETCH_NEXT = 1;
+ SQL_FETCH_FIRST = 2;
+{$ifdef odbcver3}
+ SQL_FETCH_FIRST_USER = 31;
+ SQL_FETCH_FIRST_SYSTEM = 32;
+{$endif}
+
+ { Other codes used for FetchOrientation in SQLFetchScroll() }
+ SQL_FETCH_LAST = 3;
+ SQL_FETCH_PRIOR = 4;
+ SQL_FETCH_ABSOLUTE = 5;
+ SQL_FETCH_RELATIVE = 6;
+{
+/* SQLEndTran() options */
+#define SQL_COMMIT 0
+#define SQL_ROLLBACK 1}
+
+//* null handles returned by SQLAllocHandle() */
+ SQL_NULL_HENV = SQLHENV(0);
+ SQL_NULL_HDBC = SQLHDBC(0);
+ SQL_NULL_HSTMT = SQLHSTMT(0);
+{$ifdef odbcver3}
+ SQL_NULL_HDESC = SQLHDESC(0);
+{$endif}
+
+//* null handle used in place of parent handle when allocating HENV */
+ SQL_NULL_HANDLE = SQLHANDLE(0);
+
+//* Values that may appear in the result set of SQLSpecialColumns() */
+ SQL_SCOPE_CURROW = 0;
+ SQL_SCOPE_TRANSACTION = 1;
+ SQL_SCOPE_SESSION = 2;
+
+//* Column types and scopes in SQLSpecialColumns. */
+ SQL_BEST_ROWID = 1;
+ SQL_ROWVER = 2;
+
+{
+#define SQL_PC_UNKNOWN 0
+#if (ODBCVER >= 0x0300)
+#define SQL_PC_NON_PSEUDO 1
+#endif
+#define SQL_PC_PSEUDO 2
+}
+
+//* Reserved value for the IdentifierType argument of SQLSpecialColumns() */
+{$ifdef ODBCVER3}
+ SQL_ROW_IDENTIFIER = 1;
+{$endif}
+
+//* Reserved values for UNIQUE argument of SQLStatistics() */
+ SQL_INDEX_UNIQUE = 0;
+ SQL_INDEX_ALL = 1;
+
+//* Reserved values for RESERVED argument of SQLStatistics() */
+ SQL_QUICK = 0;
+ SQL_ENSURE = 1;
+
+//* Values that may appear in the result set of SQLStatistics() */
+ SQL_TABLE_STAT = 0;
+ SQL_INDEX_CLUSTERED = 1;
+ SQL_INDEX_HASHED = 2;
+ SQL_INDEX_OTHER = 3;
+// SQL_INDEX_BTREE = ???;
+// SQL_INDEX_CONTENT = ???;
+
+{
+/* Information requested by SQLGetInfo() */
+#if (ODBCVER >= 0x0300)
+#define SQL_MAX_DRIVER_CONNECTIONS 0
+#define SQL_MAXIMUM_DRIVER_CONNECTIONS SQL_MAX_DRIVER_CONNECTIONS
+#define SQL_MAX_CONCURRENT_ACTIVITIES 1
+#define SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAX_CONCURRENT_ACTIVITIES
+#endif
+#define SQL_DATA_SOURCE_NAME 2
+#define SQL_FETCH_DIRECTION 8
+#define SQL_SERVER_NAME 13
+#define SQL_SEARCH_PATTERN_ESCAPE 14
+#define SQL_DBMS_NAME 17
+#define SQL_DBMS_VER 18
+#define SQL_ACCESSIBLE_TABLES 19
+#define SQL_ACCESSIBLE_PROCEDURES 20
+#define SQL_CURSOR_COMMIT_BEHAVIOR 23
+#define SQL_DATA_SOURCE_READ_ONLY 25
+#define SQL_DEFAULT_TXN_ISOLATION 26
+#define SQL_IDENTIFIER_CASE 28
+#define SQL_IDENTIFIER_QUOTE_CHAR 29
+#define SQL_MAX_COLUMN_NAME_LEN 30
+#define SQL_MAXIMUM_COLUMN_NAME_LENGTH SQL_MAX_COLUMN_NAME_LEN
+#define SQL_MAX_CURSOR_NAME_LEN 31
+#define SQL_MAXIMUM_CURSOR_NAME_LENGTH SQL_MAX_CURSOR_NAME_LEN
+#define SQL_MAX_SCHEMA_NAME_LEN 32
+#define SQL_MAXIMUM_SCHEMA_NAME_LENGTH SQL_MAX_SCHEMA_NAME_LEN
+#define SQL_MAX_CATALOG_NAME_LEN 34
+#define SQL_MAXIMUM_CATALOG_NAME_LENGTH SQL_MAX_CATALOG_NAME_LEN
+#define SQL_MAX_TABLE_NAME_LEN 35
+}
+ SQL_SCROLL_CONCURRENCY = 43;
+ SQL_TXN_CAPABLE = 46;
+ SQL_TRANSACTION_CAPABLE = SQL_TXN_CAPABLE;
+ SQL_USER_NAME = 47;
+ SQL_TXN_ISOLATION_OPTION = 72;
+ SQL_TRANSACTION_ISOLATION_OPTION = SQL_TXN_ISOLATION_OPTION;
+{
+#define SQL_INTEGRITY 73
+#define SQL_GETDATA_EXTENSIONS 81
+#define SQL_NULL_COLLATION 85
+#define SQL_ALTER_TABLE 86
+#define SQL_ORDER_BY_COLUMNS_IN_SELECT 90
+#define SQL_SPECIAL_CHARACTERS 94
+#define SQL_MAX_COLUMNS_IN_GROUP_BY 97
+#define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY SQL_MAX_COLUMNS_IN_GROUP_BY
+#define SQL_MAX_COLUMNS_IN_INDEX 98
+#define SQL_MAXIMUM_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_INDEX
+#define SQL_MAX_COLUMNS_IN_ORDER_BY 99
+#define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY SQL_MAX_COLUMNS_IN_ORDER_BY
+#define SQL_MAX_COLUMNS_IN_SELECT 100
+#define SQL_MAXIMUM_COLUMNS_IN_SELECT SQL_MAX_COLUMNS_IN_SELECT
+#define SQL_MAX_COLUMNS_IN_TABLE 101
+#define SQL_MAX_INDEX_SIZE 102
+#define SQL_MAXIMUM_INDEX_SIZE SQL_MAX_INDEX_SIZE
+#define SQL_MAX_ROW_SIZE 104
+#define SQL_MAXIMUM_ROW_SIZE SQL_MAX_ROW_SIZE
+#define SQL_MAX_STATEMENT_LEN 105
+#define SQL_MAXIMUM_STATEMENT_LENGTH SQL_MAX_STATEMENT_LEN
+#define SQL_MAX_TABLES_IN_SELECT 106
+#define SQL_MAXIMUM_TABLES_IN_SELECT SQL_MAX_TABLES_IN_SELECT
+#define SQL_MAX_USER_NAME_LEN 107
+#define SQL_MAXIMUM_USER_NAME_LENGTH SQL_MAX_USER_NAME_LEN}
+{$ifdef ODBCVER3}
+ SQL_OJ_CAPABILITIES = 115;
+ SQL_OUTER_JOIN_CAPABILITIES = SQL_OJ_CAPABILITIES;
+{$endif} { ODBCVER >= 0x0300 }
+
+{$ifdef ODBCVER3}
+ SQL_XOPEN_CLI_YEAR = 10000;
+ SQL_CURSOR_SENSITIVITY = 10001;
+ SQL_DESCRIBE_PARAMETER = 10002;
+ SQL_CATALOG_NAME = 10003;
+ SQL_COLLATION_SEQ = 10004;
+ SQL_MAX_IDENTIFIER_LEN = 10005;
+ SQL_MAXIMUM_IDENTIFIER_LENGTH = SQL_MAX_IDENTIFIER_LEN;
+{$endif} { ODBCVER >= 0x0300 }
+
+{/* SQL_ALTER_TABLE bitmasks */
+#if (ODBCVER >= 0x0200)
+#define SQL_AT_ADD_COLUMN 0x00000001L
+#define SQL_AT_DROP_COLUMN 0x00000002L
+#endif /* ODBCVER >= 0x0200 */
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AT_ADD_CONSTRAINT 0x00000008L
+
+/* The following bitmasks are ODBC extensions and defined in sqlext.h
+*#define SQL_AT_COLUMN_SINGLE 0x00000020L
+*#define SQL_AT_ADD_COLUMN_DEFAULT 0x00000040L
+*#define SQL_AT_ADD_COLUMN_COLLATION 0x00000080L
+*#define SQL_AT_SET_COLUMN_DEFAULT 0x00000100L
+*#define SQL_AT_DROP_COLUMN_DEFAULT 0x00000200L
+*#define SQL_AT_DROP_COLUMN_CASCADE 0x00000400L
+*#define SQL_AT_DROP_COLUMN_RESTRICT 0x00000800L
+*#define SQL_AT_ADD_TABLE_CONSTRAINT 0x00001000L
+*#define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE 0x00002000L
+*#define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT 0x00004000L
+*#define SQL_AT_CONSTRAINT_NAME_DEFINITION 0x00008000L
+*#define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED 0x00010000L
+*#define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE 0x00020000L
+*#define SQL_AT_CONSTRAINT_DEFERRABLE 0x00040000L
+*#define SQL_AT_CONSTRAINT_NON_DEFERRABLE 0x00080000L
+
+#endif /* ODBCVER >= 0x0300 */
+
+
+/* SQL_ASYNC_MODE values */
+#if (ODBCVER >= 0x0300)
+#define SQL_AM_NONE 0
+#define SQL_AM_CONNECTION 1
+#define SQL_AM_STATEMENT 2
+#endif
+
+/* SQL_CURSOR_COMMIT_BEHAVIOR values */
+#define SQL_CB_DELETE 0
+#define SQL_CB_CLOSE 1
+#define SQL_CB_PRESERVE 2
+
+/* SQL_FETCH_DIRECTION bitmasks */
+#define SQL_FD_FETCH_NEXT 0x00000001L
+#define SQL_FD_FETCH_FIRST 0x00000002L
+#define SQL_FD_FETCH_LAST 0x00000004L
+#define SQL_FD_FETCH_PRIOR 0x00000008L
+#define SQL_FD_FETCH_ABSOLUTE 0x00000010L
+#define SQL_FD_FETCH_RELATIVE 0x00000020L
+
+/* SQL_GETDATA_EXTENSIONS bitmasks */
+#define SQL_GD_ANY_COLUMN 0x00000001L
+#define SQL_GD_ANY_ORDER 0x00000002L
+
+/* SQL_IDENTIFIER_CASE values */
+#define SQL_IC_UPPER 1
+#define SQL_IC_LOWER 2
+#define SQL_IC_SENSITIVE 3
+#define SQL_IC_MIXED 4
+
+/* SQL_OJ_CAPABILITIES bitmasks */
+/* NB: this means 'outer join', not what you may be thinking */
+
+
+#if (ODBCVER >= 0x0201)
+#define SQL_OJ_LEFT 0x00000001L
+#define SQL_OJ_RIGHT 0x00000002L
+#define SQL_OJ_FULL 0x00000004L
+#define SQL_OJ_NESTED 0x00000008L
+#define SQL_OJ_NOT_ORDERED 0x00000010L
+#define SQL_OJ_INNER 0x00000020L
+#define SQL_OJ_ALL_COMPARISON_OPS 0x00000040L
+#endif
+}
+{ SQL_SCROLL_CONCURRENCY bitmasks }
+ SQL_SCCO_READ_ONLY = 1;
+ SQL_SCCO_LOCK = 2;
+ SQL_SCCO_OPT_ROWVER = 4;
+ SQL_SCCO_OPT_VALUES = 8;
+
+//* SQL_TXN_CAPABLE values */
+ SQL_TC_NONE = 0;
+ SQL_TC_DML = 1;
+ SQL_TC_ALL = 2;
+ SQL_TC_DDL_COMMIT = 3;
+ SQL_TC_DDL_IGNORE = 4;
+
+//* SQL_TXN_ISOLATION_OPTION bitmasks */
+ SQL_TXN_READ_UNCOMMITTED = 1;
+ SQL_TRANSACTION_READ_UNCOMMITTED = SQL_TXN_READ_UNCOMMITTED;
+ SQL_TXN_READ_COMMITTED = 2;
+ SQL_TRANSACTION_READ_COMMITTED = SQL_TXN_READ_COMMITTED;
+ SQL_TXN_REPEATABLE_READ = 4;
+ SQL_TRANSACTION_REPEATABLE_READ = SQL_TXN_REPEATABLE_READ;
+ SQL_TXN_SERIALIZABLE = 8;
+ SQL_TRANSACTION_SERIALIZABLE = SQL_TXN_SERIALIZABLE;
+{
+/* SQL_NULL_COLLATION values */
+#define SQL_NC_HIGH 0
+#define SQL_NC_LOW 1
+
+}
+
+{ SQL_STATIC_SENSITIVITY values }
+
+ SQL_SS_ADDITIONS = 1;
+ SQL_SS_DELETIONS = 2;
+ SQL_SS_UPDATES = 4;
+
+{ SQLColAttributes defines }
+ SQL_COLUMN_COUNT = 0;
+ SQL_COLUMN_NAME = 1;
+ SQL_COLUMN_TYPE = 2;
+ SQL_COLUMN_LENGTH = 3;
+ SQL_COLUMN_PRECISION = 4;
+ SQL_COLUMN_SCALE = 5;
+ SQL_COLUMN_DISPLAY_SIZE = 6;
+ SQL_COLUMN_NULLABLE = 7;
+ SQL_COLUMN_UNSIGNED = 8;
+ SQL_COLUMN_MONEY = 9;
+ SQL_COLUMN_UPDATABLE = 10;
+ SQL_COLUMN_AUTO_INCREMENT = 11;
+ SQL_COLUMN_CASE_SENSITIVE = 12;
+ SQL_COLUMN_SEARCHABLE = 13;
+ SQL_COLUMN_TYPE_NAME = 14;
+ SQL_COLUMN_TABLE_NAME = 15;
+ SQL_COLUMN_OWNER_NAME = 16;
+ SQL_COLUMN_QUALIFIER_NAME = 17;
+ SQL_COLUMN_LABEL = 18;
+ SQL_COLATT_OPT_MAX = SQL_COLUMN_LABEL;
+{$ifdef ODBCVER3}
+ SQL_COLUMN_DRIVER_START = 1000;
+{$endif} { ODBCVER >= 0x0300 }
+
+ { SQLColAttribute defines }
+{$ifdef ODBCVER3}
+ SQL_DESC_ARRAY_SIZE = 20;
+ SQL_DESC_ARRAY_STATUS_PTR = 21;
+ SQL_DESC_AUTO_UNIQUE_VALUE = SQL_COLUMN_AUTO_INCREMENT;
+ SQL_DESC_BASE_COLUMN_NAME = 22;
+ SQL_DESC_BASE_TABLE_NAME = 23;
+ SQL_DESC_BIND_OFFSET_PTR = 24;
+ SQL_DESC_BIND_TYPE = 25;
+ SQL_DESC_CASE_SENSITIVE = SQL_COLUMN_CASE_SENSITIVE;
+ SQL_DESC_CATALOG_NAME = SQL_COLUMN_QUALIFIER_NAME;
+ SQL_DESC_CONCISE_TYPE = SQL_COLUMN_TYPE;
+ SQL_DESC_DATETIME_INTERVAL_PRECISION = 26;
+ SQL_DESC_DISPLAY_SIZE = SQL_COLUMN_DISPLAY_SIZE;
+ SQL_DESC_FIXED_PREC_SCALE = SQL_COLUMN_MONEY;
+ SQL_DESC_LABEL = SQL_COLUMN_LABEL;
+ SQL_DESC_LITERAL_PREFIX = 27;
+ SQL_DESC_LITERAL_SUFFIX = 28;
+ SQL_DESC_LOCAL_TYPE_NAME = 29;
+ SQL_DESC_MAXIMUM_SCALE = 30;
+ SQL_DESC_MINIMUM_SCALE = 31;
+ SQL_DESC_NUM_PREC_RADIX = 32;
+ SQL_DESC_PARAMETER_TYPE = 33;
+ SQL_DESC_ROWS_PROCESSED_PTR = 34;
+ SQL_DESC_SCHEMA_NAME = SQL_COLUMN_OWNER_NAME;
+ SQL_DESC_SEARCHABLE = SQL_COLUMN_SEARCHABLE;
+ SQL_DESC_TYPE_NAME = SQL_COLUMN_TYPE_NAME;
+ SQL_DESC_TABLE_NAME = SQL_COLUMN_TABLE_NAME;
+ SQL_DESC_UNSIGNED = SQL_COLUMN_UNSIGNED;
+ SQL_DESC_UPDATABLE = SQL_COLUMN_UPDATABLE;
+{$endif}
+
+//* SQLEndTran() options */
+ SQL_COMMIT = 0;
+ SQL_ROLLBACK = 1;
+
+ SQL_ATTR_ROW_ARRAY_SIZE = 27;
+
+//* SQLConfigDataSource() options */
+ ODBC_ADD_DSN = 1;
+ ODBC_CONFIG_DSN = 2;
+ ODBC_REMOVE_DSN = 3;
+ ODBC_ADD_SYS_DSN = 4;
+ ODBC_CONFIG_SYS_DSN = 5;
+ ODBC_REMOVE_SYS_DSN = 6;
+
+{$ifdef DYNLOADINGODBC}
+
+type tSQLAllocHandle =function(HandleType: SQLSMALLINT;
+ InputHandle:SQLHANDLE;Var OutputHandlePtr: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type tSQLSetEnvAttr=function (EnvironmentHandle:SQLHENV;
+ Attribute:SQLINTEGER;Value:SQLPOINTER;
+ StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLFreeHandle=function (HandleType:SQLSMALLINT;
+ Handle:SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLGetDiagRec=function (HandleType:SQLSMALLINT;
+ Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
+ Sqlstate:PSQLCHAR;var NativeError:SQLINTEGER;
+ MessageText:PSQLCHAR;BufferLength:SQLSMALLINT;
+ var TextLength:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLGetDiagField=function (HandleType:SQLSMALLINT;
+ Handle:SQLHANDLE;RecNumber:SQLSMALLINT;
+ DiagIdentifier:SQLSMALLINT;DiagInfoPtr:SQLPOINTER;
+ BufferLength:SQLSMALLINT;var StringLengthPtr:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLConnect=function (ConnectionHandle:SQLHDBC;
+ ServerName:PSQLCHAR;NameLength1:SQLSMALLINT;
+ UserName:PSQLCHAR;NameLength2:SQLSMALLINT;
+ Authentication:PSQLCHAR;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 TSQLExecDirect=function (StatementHandle:SQLHSTMT;
+ StatementText:PSQLCHAR;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};
+
+type TSQLCloseCursor=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLExecute=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLFetch=function (StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLNumResultCols=function (StatementHandle:SQLHSTMT;
+ var ColumnCount:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLDescribeCol=function (StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;ColumnName:PSQLCHAR;
+ BufferLength:SQLSMALLINT;var NameLength:SQLSMALLINT;
+ var DataType:SQLSMALLINT;var ColumnSize:SQLUINTEGER;
+ var DecimalDigits:SQLSMALLINT;var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLFetchScroll=function (StatementHandle:SQLHSTMT;
+ FetchOrientation:SQLSMALLINT;FetchOffset:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLExtendedFetch=function (hstmt:SQLHSTMT;
+ fFetchType:SQLUSMALLINT;irow:SQLINTEGER;
+ pcrow:PSQLUINTEGER;rgfRowStatus:PSQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLGetData=function (StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;TargetType:SQLSMALLINT;
+ TargetValue:SQLPOINTER;BufferLength:SQLINTEGER;
+ StrLen_or_Ind:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLSetStmtAttr=function (StatementHandle:SQLHSTMT;
+ Attribute:SQLINTEGER;Value:SQLPOINTER;
+ StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLGetStmtAttr=function (StatementHandle:SQLHSTMT;
+ Attribute:SQLINTEGER;Value:SQLPOINTER;
+ BufferLength:SQLINTEGER;StringLength:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type tSQLGetInfo=function (ConnectionHandle:SQLHDBC;
+ InfoType:SQLUSMALLINT;InfoValue:SQLPOINTER;
+ BufferLength:SQLSMALLINT;StringLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLBulkOperations=function (StatementHandle: SQLHSTMT;
+ Operation:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLPutData=function (StatementHandle:SQLHSTMT;
+ Data:SQLPOINTER;StrLen_or_Ind:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLBindCol=function (StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;TargetType:SQLSMALLINT;
+ TargetValue:SQLPOINTER;BufferLength:SQLINTEGER;
+ StrLen_or_Ind:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLSetPos=function (hstmt:SQLHSTMT;
+ irow:SQLUSMALLINT;fOption:SQLUSMALLINT;
+ fLock:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLDataSources=function (EnvironmentHandle:SQLHENV;
+ Direction:SQLUSMALLINT;ServerName:PSQLCHAR;
+ BufferLength1:SQLSMALLINT;NameLength1:PSQLSMALLINT;
+ Description:PSQLCHAR;BufferLength2:SQLSMALLINT;
+ NameLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLDrivers=function (EnvironmentHandle:SQLHENV;
+ Direction:SQLUSMALLINT;DriverDescription:PSQLCHAR;
+ BufferLength1:SQLSMALLINT;DescriptionLength1:PSQLSMALLINT;
+ DriverAttributes:PSQLCHAR;BufferLength2:SQLSMALLINT;
+ AttributesLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLSetConnectAttr=function (ConnectionHandle:SQLHDBC;
+ Attribute:SQLINTEGER; Value:SQLPOINTER;
+ StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLGetCursorName=function (StatementHandle:SQLHSTMT;
+ CursorName:PSQLCHAR; BufferLength:SQLSMALLINT;
+ NameLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLSetCursorName=function (StatementHandle:SQLHSTMT;
+ CursorName:PSQLCHAR; NameLength:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLRowCount=function (StatementHandle:SQLHSTMT;
+ Var RowCount:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLBindParameter=function (hstmt:SQLHSTMT;
+ ipar:SQLUSMALLINT;fParamType:SQLSMALLINT;
+ fCType:SQLSMALLINT;fSqlType:SQLSMALLINT;
+ cbColDef:SQLUINTEGER;ibScale:SQLSMALLINT;
+ rgbValue:SQLPOINTER;cbValueMax:SQLINTEGER;
+ pcbValue:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLFreeStmt=function (StatementHandle:SQLHSTMT;
+ Option:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLColAttribute=function (StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;FieldIdentifier:SQLUSMALLINT;
+ CharacterAttribute:PSQLCHAR;BufferLength:SQLSMALLINT;
+ StringLength:PSQLSMALLINT;NumericAttribute:SQLPOINTER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLEndTran=function (HandleType:SQLSMALLINT;
+ Handle:SQLHANDLE;CompletionType:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLTables=function ( hstmt : SQLHSTMT;
+ szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
+ szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
+ szTableName : PSQLCHAR;cbTableName : SQLSMALLINT;
+ szTableType : PSQLCHAR;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};
+
+type TSQLSpecialColumns=function (StatementHandle:SQLHSTMT;
+ IdentifierType:SQLUSMALLINT;CatalogName:PSQLCHAR;
+ NameLength1:SQLSMALLINT;SchemaName:PSQLCHAR;
+ NameLength2:SQLSMALLINT;TableName:PSQLCHAR;
+ NameLength3:SQLSMALLINT;Scope:SQLUSMALLINT;
+ Nullable:SQLUSMALLINT) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif};
+
+type TSQLProcedures=function ( hstmt : SQLHSTMT;
+ szTableQualifier : PSQLCHAR;cbTableQualifier : SQLSMALLINT;
+ szTableOwner : PSQLCHAR;cbTableOwner : SQLSMALLINT;
+ szTableName : PSQLCHAR;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 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};
+
+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;
+var SQLDisconnect:TSQLDisconnect;
+var SQLDriverConnect:TSQLDriverConnect;
+var SQLExecDirect:TSQLExecDirect;
+var SQLPrepare:TSQLPrepare;
+var SQLCloseCursor:TSQLCloseCursor;
+var SQLExecute:TSQLExecute;
+var SQLFetch:TSQLFetch;
+var SQLNumResultCols:TSQLNumResultCols;
+var SQLDescribeCol:TSQLDescribeCol;
+var SQLFetchScroll:TSQLFetchScroll;
+var SQLExtendedFetch:TSQLExtendedFetch;
+var SQLGetData:TSQLGetData;
+var SQLSetStmtAttr:TSQLSetStmtAttr;
+var SQLGetStmtAttr:TSQLGetStmtAttr;
+var SQLBulkOperations:TSQLBulkOperations;
+var SQLPutData:TSQLPutData;
+var SQLBindCol:TSQLBindCol;
+var SQLSetPos:TSQLSetPos;
+var SQLDataSources:TSQLDataSources;
+var SQLDrivers:TSQLDrivers;
+var SQLSetConnectAttr:TSQLSetConnectAttr;
+var SQLGetCursorName:TSQLGetCursorName;
+var SQLSetCursorName:TSQLSetCursorName;
+var SQLRowCount:TSQLRowCount;
+var SQLBindParameter:TSQLBindParameter;
+var SQLFreeStmt:TSQLFreeStmt;
+var SQLColAttribute:TSQLColAttribute;
+var SQLEndTran:TSQLEndTran;
+var SQLTables:TSQLTables;
+var SQLPrimaryKeys:TSQLPrimaryKeys;
+var SQLProcedureColumns : TSQLProcedureColumns;
+var SQLStatistics: TSQLStatistics;
+var odbcversion:word;
+
+{$else}
+
+ function SQLAllocHandle(
+ HandleType: SQLSMALLINT;
+ InputHandle:SQLHANDLE;
+ Var OutputHandlePtr: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLSetEnvAttr(
+ EnvironmentHandle:SQLHENV;
+ Attribute: SQLINTEGER;
+ Value: SQLPOINTER;
+ StringLength: SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetEnvAttr(
+ EnvironmentHandle:SQLHENV;
+ Attribute:SQLINTEGER;
+ Value:SQLPOINTER;
+ BufferLength:SQLINTEGER;
+ StringLength:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLFreeHandle(
+ HandleType: SQLSMALLINT;
+ Handle: SQLHANDLE):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetDiagRec(
+ HandleType: SQLSMALLINT;
+ Handle: SQLHANDLE;
+ RecNumber: SQLSMALLINT;
+ Sqlstate: PSQLCHAR;
+ var NativeError: SQLINTEGER;
+ MessageText: PSQLCHAR;
+ BufferLength: SQLSMALLINT;
+ var TextLength: SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetDiagField(
+ HandleType:SQLSMALLINT;
+ Handle:SQLHANDLE;
+ RecNumber:SQLSMALLINT;
+ DiagIdentifier:SQLSMALLINT;
+ DiagInfoPtr:SQLPOINTER;
+ BufferLength:SQLSMALLINT;
+ var StringLengthPtr:SQLSMALLINT ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLConnect(
+ ConnectionHandle:SQLHDBC;
+ ServerName:PSQLCHAR; NameLength1:SQLSMALLINT;
+ UserName:PSQLCHAR; NameLength2:SQLSMALLINT;
+ Authentication:PSQLCHAR;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;
+ function SQLBrowseConnect(
+ hdbc : SQLHDBC;
+ szConnStrIn :PSQLCHAR;
+ cbConnStrIn: SQLSMALLINT;
+ szConnStrOut : PSQLCHAR;
+ cbConnStrOutMax : SQLSMALLINT;
+ Var cbConnStrOut : SQLSMALLINT) : SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLExecDirect(
+ StatementHandle:SQLHSTMT;
+ StatementText: PSQLCHAR;
+ 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 SQLCloseCursor(
+ StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLExecute(
+ StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLFetch(
+ StatementHandle:SQLHSTMT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLNumResultCols(
+ StatementHandle:SQLHSTMT;
+ var ColumnCount:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLDescribeCol(
+ StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;
+ ColumnName:PSQLCHAR;
+ BufferLength:SQLSMALLINT;
+ var NameLength:SQLSMALLINT;
+ var DataType:SQLSMALLINT;
+ var ColumnSize:SQLUINTEGER;
+ var DecimalDigits:SQLSMALLINT;
+ var Nullable:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLFetchScroll(
+ StatementHandle:SQLHSTMT;
+ FetchOrientation:SQLSMALLINT;
+ FetchOffset:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLExtendedFetch(
+ hstmt:SQLHSTMT;
+ fFetchType:SQLUSMALLINT;
+ irow:SQLINTEGER;
+ pcrow:PSQLUINTEGER;
+ rgfRowStatus:PSQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetData(
+ StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;
+ TargetType:SQLSMALLINT;
+ TargetValue:SQLPOINTER;
+ BufferLength:SQLINTEGER;
+ StrLen_or_Ind:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLSetStmtAttr(
+ StatementHandle:SQLHSTMT;
+ Attribute:SQLINTEGER;
+ Value:SQLPOINTER;
+ StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetStmtAttr(
+ StatementHandle:SQLHSTMT;
+ Attribute:SQLINTEGER;
+ Value:SQLPOINTER;
+ BufferLength:SQLINTEGER;
+ StringLength:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetInfo(
+ ConnectionHandle:SQLHDBC;
+ InfoType:SQLUSMALLINT;
+ InfoValue:SQLPOINTER;
+ BufferLength:SQLSMALLINT;
+ StringLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLBulkOperations(
+ StatementHandle: SQLHSTMT;
+ Operation:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLPutData(
+ StatementHandle:SQLHSTMT;
+ Data:SQLPOINTER;
+ StrLen_or_Ind:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLBindCol(
+ StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;
+ TargetType:SQLSMALLINT;
+ TargetValue:SQLPOINTER;
+ BufferLength:SQLINTEGER;
+ StrLen_or_Ind:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLSetPos(
+ hstmt:SQLHSTMT;
+ irow:SQLUSMALLINT;
+ fOption:SQLUSMALLINT;
+ fLock:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLDataSources(
+ EnvironmentHandle:SQLHENV;
+ Direction:SQLUSMALLINT;
+ ServerName:PSQLCHAR;
+ BufferLength1:SQLSMALLINT;
+ NameLength1:PSQLSMALLINT;
+ Description:PSQLCHAR;
+ BufferLength2:SQLSMALLINT;
+ NameLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLDrivers(
+ EnvironmentHandle:SQLHENV;
+ Direction:SQLUSMALLINT;
+ DriverDescription:PSQLCHAR;
+ BufferLength1:SQLSMALLINT;
+ DescriptionLength1:PSQLSMALLINT;
+ DriverAttributes:PSQLCHAR;
+ BufferLength2:SQLSMALLINT;
+ AttributesLength2:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLSetConnectAttr(
+ ConnectionHandle:SQLHDBC;
+ Attribute:SQLINTEGER; Value:SQLPOINTER;
+ StringLength:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLGetCursorName(
+ StatementHandle:SQLHSTMT;
+ CursorName:PSQLCHAR; BufferLength:SQLSMALLINT;
+ NameLength:PSQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLSetCursorName(
+ StatementHandle:SQLHSTMT;
+ CursorName:PSQLCHAR; NameLength:SQLSMALLINT
+ ):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLRowCount(
+ StatementHandle:SQLHSTMT;
+ Var RowCount:SQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLBindParameter(
+ hstmt:SQLHSTMT;
+ ipar:SQLUSMALLINT;
+ fParamType:SQLSMALLINT;
+ fCType:SQLSMALLINT;
+ fSqlType:SQLSMALLINT;
+ cbColDef:SQLUINTEGER;
+ ibScale:SQLSMALLINT;
+ rgbValue:SQLPOINTER;
+ cbValueMax:SQLINTEGER;
+ pcbValue:PSQLINTEGER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLFreeStmt(
+ StatementHandle:SQLHSTMT;
+ Option:SQLUSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+ function SQLColAttribute (
+ StatementHandle:SQLHSTMT;
+ ColumnNumber:SQLUSMALLINT;
+ FieldIdentifier:SQLUSMALLINT;
+ CharacterAttribute:PSQLCHAR;
+ BufferLength:SQLSMALLINT;
+ StringLength:PSQLSMALLINT;
+ NumericAttribute:SQLPOINTER):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+{$ifdef ODBCVER3}
+ function SQLEndTran(
+ HandleType:SQLSMALLINT;
+ Handle:SQLHANDLE;
+ CompletionType:SQLSMALLINT):SQLRETURN;{$ifdef fpc} extdecl {$else} stdcall {$endif};external odbclib;
+{$endif}
+ function SQLTables( hstmt : SQLHSTMT;
+ szTableQualifier : PSQLCHAR;
+ cbTableQualifier : SQLSMALLINT;
+ szTableOwner : PSQLCHAR;
+ cbTableOwner : SQLSMALLINT;
+ szTableName : PSQLCHAR;
+ cbTableName : SQLSMALLINT;
+ szTableType : PSQLCHAR;
+ cbTableType : SQLSMALLINT ) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
+ function SQLColumns( 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}; external odbclib;
+ function SQLSpecialColumns(StatementHandle:SQLHSTMT;
+ IdentifierType:SQLUSMALLINT;
+ CatalogName:PSQLCHAR;
+ NameLength1:SQLSMALLINT;
+ SchemaName:PSQLCHAR;
+ NameLength2:SQLSMALLINT;
+ TableName:PSQLCHAR;
+ NameLength3:SQLSMALLINT;
+ Scope:SQLUSMALLINT;
+ Nullable:SQLUSMALLINT) : SQLRETURN; {$ifdef fpc} extdecl {$else} stdcall {$endif}; external odbclib;
+ function SQLProcedures( hstmt : SQLHSTMT;
+ szTableQualifier : PSQLCHAR;
+ cbTableQualifier : SQLSMALLINT;
+ szTableOwner : PSQLCHAR;
+ cbTableOwner : SQLSMALLINT;
+ szTableName : PSQLCHAR;
+ 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;
+ 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;
+ 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;
+{$endif}
+// This function always load dynamic
+
+function DateStructToDateTime( b:PSQL_DATE_STRUCT):TDateTime;
+function DateTimeToDateStruct( b:TDateTime):SQL_DATE_STRUCT;
+procedure DateTime2TimeStampStruct( var Value:SQL_TIMESTAMP_STRUCT; b:TDateTime);
+Function TimeStampStructToDateTime( B : PSQL_TIMESTAMP_STRUCT) : TDateTime;
+Function TimeStructToDateTime (B : PSQL_TIME_STRUCT) : TDateTime;
+
+
+{$IFDEF DYNLOADINGODBC}
+Procedure InitialiseODBC;
+Procedure ReleaseODBC;
+
+var ODBCLibraryHandle : TLibHandle;
+{$ENDIF}
+
+implementation
+
+{$IFDEF DYNLOADINGODBC}
+
+var RefCount : integer;
+
+Procedure InitialiseODBC;
+
+begin
+ inc(RefCount);
+ if RefCount = 1 then
+ begin
+ ODBCLibraryHandle := loadlibrary(odbclib);
+ if ODBCLibraryHandle = nilhandle then
+ begin
+ RefCount := 0;
+ Raise EInOutError.Create('Can not load ODBC client. Is it installed? ('+odbclib+')');
+ end;
+
+{$ifdef fpc}
+ 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');
+ pointer(SQLConnect) := GetProcedureAddress(ODBCLibraryHandle,'SQLConnect');
+ pointer(SQLDisconnect) := GetProcedureAddress(ODBCLibraryHandle,'SQLDisconnect');
+ pointer(SQLDriverConnect) := GetProcedureAddress(ODBCLibraryHandle,'SQLDriverConnect');
+ pointer(SQLExecDirect) := GetProcedureAddress(ODBCLibraryHandle,'SQLExecDirect');
+ pointer(SQLPrepare) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrepare');
+ pointer(SQLCloseCursor) := GetProcedureAddress(ODBCLibraryHandle,'SQLCloseCursor');
+ pointer(SQLExecute) := GetProcedureAddress(ODBCLibraryHandle,'SQLExecute');
+ pointer(SQLFetch) := GetProcedureAddress(ODBCLibraryHandle,'SQLFetch');
+ pointer(SQLNumResultCols) := GetProcedureAddress(ODBCLibraryHandle,'SQLNumResultCols');
+ pointer(SQLDescribeCol) := GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeCol');
+ pointer(SQLFetchScroll) := GetProcedureAddress(ODBCLibraryHandle,'SQLFetchScroll');
+ pointer(SQLExtendedFetch) := GetProcedureAddress(ODBCLibraryHandle,'SQLExtendedFetch');
+ pointer(SQLGetData) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetData');
+ pointer(SQLSetStmtAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetStmtAttr');
+ pointer(SQLGetStmtAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetStmtAttr');
+ pointer(SQLBulkOperations) := GetProcedureAddress(ODBCLibraryHandle,'SQLBulkOperations');
+ pointer(SQLPutData) := GetProcedureAddress(ODBCLibraryHandle,'SQLPutData');
+ pointer(SQLBindCol) := GetProcedureAddress(ODBCLibraryHandle,'SQLBindCol');
+ pointer(SQLSetPos) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetPos');
+ pointer(SQLDataSources) := GetProcedureAddress(ODBCLibraryHandle,'SQLDataSources');
+ pointer(SQLDrivers) := GetProcedureAddress(ODBCLibraryHandle,'SQLDrivers');
+ pointer(SQLSetConnectAttr) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetConnectAttr');
+ pointer(SQLGetCursorName) := GetProcedureAddress(ODBCLibraryHandle,'SQLGetCursorName');
+ pointer(SQLSetCursorName) := GetProcedureAddress(ODBCLibraryHandle,'SQLSetCursorName');
+ pointer(SQLRowCount) := GetProcedureAddress(ODBCLibraryHandle,'SQLRowCount');
+ pointer(SQLBindParameter) := GetProcedureAddress(ODBCLibraryHandle,'SQLBindParameter');
+ pointer(SQLFreeStmt) := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeStmt');
+ pointer(SQLColAttribute) := GetProcedureAddress(ODBCLibraryHandle,'SQLColAttribute');
+ pointer(SQLEndTran) := GetProcedureAddress(ODBCLibraryHandle,'SQLEndTran');
+ pointer(SQLTables) := GetProcedureAddress(ODBCLibraryHandle,'SQLTables');
+ pointer(SQLPrimaryKeys) := GetProcedureAddress(ODBCLibraryHandle,'SQLPrimaryKeys');
+ pointer(SQLProcedureColumns) := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedureColumns');
+ pointer(SQLStatistics) := GetProcedureAddress(ODBCLibraryHandle,'SQLStatistics');
+{$else}
+ SQLAllocHandle := GetProcedureAddress(ODBCLibraryHandle,'SQLAllocHandle');
+ SQLSetEnvAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetEnvAttr');
+ SQLFreeHandle := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeHandle');
+ SQLGetInfo := GetProcedureAddress(ODBCLibraryHandle,'SQLGetInfo');
+ SQLProcedures := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedures');
+ SQLColumns := GetProcedureAddress(ODBCLibraryHandle,'SQLColumns');
+ SQLSpecialColumns := GetProcedureAddress(ODBCLibraryHandle,'SQLSpecialColumns');
+ SQLGetDiagRec := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagRec');
+ SQLGetDiagField := GetProcedureAddress(ODBCLibraryHandle,'SQLGetDiagField');
+ SQLConnect := GetProcedureAddress(ODBCLibraryHandle,'SQLConnect');
+ SQLDisconnect := GetProcedureAddress(ODBCLibraryHandle,'SQLDisconnect');
+ SQLDriverConnect := GetProcedureAddress(ODBCLibraryHandle,'SQLDriverConnect');
+ SQLExecDirect := GetProcedureAddress(ODBCLibraryHandle,'SQLExecDirect');
+ SQLPrepare := GetProcedureAddress(ODBCLibraryHandle,'SQLPrepare');
+ SQLCloseCursor := GetProcedureAddress(ODBCLibraryHandle,'SQLCloseCursor');
+ SQLExecute := GetProcedureAddress(ODBCLibraryHandle,'SQLExecute');
+ SQLFetch := GetProcedureAddress(ODBCLibraryHandle,'SQLFetch');
+ SQLNumResultCols := GetProcedureAddress(ODBCLibraryHandle,'SQLNumResultCols');
+ SQLDescribeCol := GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeCol');
+ SQLFetchScroll := GetProcedureAddress(ODBCLibraryHandle,'SQLFetchScroll');
+ SQLExtendedFetch := GetProcedureAddress(ODBCLibraryHandle,'SQLExtendedFetch');
+ SQLGetData := GetProcedureAddress(ODBCLibraryHandle,'SQLGetData');
+ SQLSetStmtAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetStmtAttr');
+ SQLGetStmtAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLGetStmtAttr');
+ SQLBulkOperations := GetProcedureAddress(ODBCLibraryHandle,'SQLBulkOperations');
+ SQLPutData := GetProcedureAddress(ODBCLibraryHandle,'SQLPutData');
+ SQLBindCol := GetProcedureAddress(ODBCLibraryHandle,'SQLBindCol');
+ SQLSetPos := GetProcedureAddress(ODBCLibraryHandle,'SQLSetPos');
+ SQLDataSources := GetProcedureAddress(ODBCLibraryHandle,'SQLDataSources');
+ SQLDrivers := GetProcedureAddress(ODBCLibraryHandle,'SQLDrivers');
+ SQLSetConnectAttr := GetProcedureAddress(ODBCLibraryHandle,'SQLSetConnectAttr');
+ SQLGetCursorName := GetProcedureAddress(ODBCLibraryHandle,'SQLGetCursorName');
+ SQLSetCursorName := GetProcedureAddress(ODBCLibraryHandle,'SQLSetCursorName');
+ SQLRowCount := GetProcedureAddress(ODBCLibraryHandle,'SQLRowCount');
+ SQLBindParameter := GetProcedureAddress(ODBCLibraryHandle,'SQLBindParameter');
+ SQLGetFunctions := GetProcedureAddress(ODBCLibraryHandle,'SQLGetFunctions');
+ SQLDescribeParam :=GetProcedureAddress(ODBCLibraryHandle,'SQLDescribeParam');
+ SQLFreeStmt := GetProcedureAddress(ODBCLibraryHandle,'SQLFreeStmt');
+ SQLColAttribute := GetProcedureAddress(ODBCLibraryHandle,'SQLColAttribute');
+ SQLEndTran := GetProcedureAddress(ODBCLibraryHandle,'SQLEndTran');
+ SQLTables := GetProcedureAddress(ODBCLibraryHandle,'SQLTables');
+ SQLPrimaryKeys := GetProcedureAddress(ODBCLibraryHandle,'SQLPrimaryKeys');
+ SQLProcedureColumns := GetProcedureAddress(ODBCLibraryHandle,'SQLProcedureColumns');
+ SQLStatistics := GetProcedureAddress(ODBCLibraryHandle,'SQLStatistics');
+{$endif}
+ end;
+end;
+
+Procedure ReleaseODBC;
+
+begin
+ if RefCount > 0 then dec(RefCount);
+ if RefCount = 0 then
+ begin
+ if not UnloadLibrary(ODBCLibraryHandle) then inc(RefCount);
+ end;
+end;
+
+{$ENDIF}
+
+function DateStructToDateTime( b:PSQL_DATE_STRUCT):TDateTime;
+begin
+ Result:=EncodeDate( b^.Year, b^.Month, b^.Day);
+end;
+
+function DateTimeToDateStruct( b:TDateTime):SQL_DATE_STRUCT;
+var
+ y,m,d: Word;
+begin
+ DecodeDate( b, y, m, d);
+ with Result do
+ begin
+ Year:=y; Month:=m; Day:=d;
+ end;
+end;
+
+procedure DateTime2TimeStampStruct( var Value:SQL_TIMESTAMP_STRUCT; b:TDateTime);
+var
+ w1,w2,w3,w4: Word;
+begin
+ with Value do
+ begin
+ DecodeDate(b,w1,w2,w3);
+ Year := w1;
+ Month := w2;
+ Day := w3;
+ DecodeTime(b,w1,w2,w3,w4);
+ Hour := w1;
+ Minute := w2;
+ Second := w3;
+ fraction := Integer(w4)*1000000;
+ end;
+end;
+{
+ SQL_DATE_STRUCT = packed record
+ Year : SQLSMALLINT;
+ Month : SQLUSMALLINT;
+ Day : SQLUSMALLINT;
+ end;
+ PSQL_DATE_STRUCT = ^SQL_DATE_STRUCT;
+}
+
+Function TimeStampStructToDateTime( B : PSQL_TIMESTAMP_STRUCT) : TDateTime;
+
+begin
+ With B^ do
+ Result:=EncodeDate(Year,Month,Day)+
+ EncodeTime(Hour,Minute,Second,0);
+end;
+
+Function TimeStructToDateTime (B : PSQL_TIME_STRUCT) : TDateTime;
+begin
+ With B^ do
+ Result:=EncodeTime(Hour,Minute,Second,0);
+end;
+
+
+