📄 sdodbc.pas
字号:
{**********************************************************}
{ }
{ Delphi SQLDirect Component Library }
{ ODBC 3.0 Interface Unit }
{ }
{ Copyright (c) 1997,2005 by Yuri Sheino }
{ }
{**********************************************************}
{$I SqlDir.inc}
unit SDOdbc {$IFDEF SD_CLR} platform {$ENDIF};
interface
uses
Windows, SysUtils, Classes, Db, SyncObjs,
{$IFDEF SD_VCL5}
ComObj,
{$ENDIF}
{$IFDEF SD_VCL6}
Variants,
{$ENDIF}
{$IFDEF SD_CLR}
System.Text, System.Runtime.InteropServices,
{$ENDIF}
SDConsts, SDCommon;
const
{ column names for ODBC metadata functions(SQLTables and other) }
ODBC_TBL_SCH_NAME_FIELD = 'TABLE_SCHEM';
ODBC_TBL_NAME_FIELD = 'TABLE_NAME';
ODBC_TBL_TYPE_NAME_FIELD = 'TABLE_TYPE';
ODBC_COL_NAME_FIELD = 'COLUMN_NAME';
ODBC_PROC_NAME_FIELD = 'PROCEDURE_NAME';
ODBC_PROC_SCH_NAME_FIELD = 'PROCEDURE_SCHEM';
{********************************************************************
** SQL.H - This is the the main include for ODBC Core functions.
**
** Updated 5/12/93 for 2.00 specification
** Updated 5/23/94 for 2.01 specification
** Updated 11/10/94 for 2.10 specification
** Updated 04/10/95 for 2.50 specification
** Updated 6/6/95 for 3.00 specification
*********************************************************************}
const
// special length/indicator values
SQL_VALUE_DATA = 0;
SQL_NULL_DATA = -1;
SQL_DATA_AT_EXEC = -2;
// return values from functions - RETCODE values
SQL_SUCCESS = 0;
SQL_SUCCESS_WITH_INFO = 1;
SQL_STILL_EXECUTING = 2;
SQL_NEED_DATA = 99;
SQL_NO_DATA = 100;
SQL_NO_DATA_FOUND = SQL_NO_DATA;
SQL_ERROR = -1;
SQL_INVALID_HANDLE = -2;
// flags for null-terminated string
SQL_NTS = -3; // NTS = Null Terminated String
SQL_NTSL = Longint(-3); // NTS = Null Terminated String
// maximum message length
SQL_MAX_MESSAGE_LENGTH= 512;
// date/time length constants
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
// handle type identifiers
SQL_HANDLE_ENV = 1;
SQL_HANDLE_DBC = 2;
SQL_HANDLE_STMT = 3;
SQL_HANDLE_DESC = 4;
// Environment attributes; note SQL_CONNECTTYPE, SQL_SYNC_POINT are also
// environment attributes that are settable at the connection level
SQL_ATTR_OUTPUT_NTS = 10001;
// connection attributes
SQL_ATTR_AUTO_IPD = 10001;
SQL_ATTR_METADATA_ID = 10014;
// statement attributes for SQLGetStmtOption/SQLSetStmtOption
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_ATTR_CURSOR_SCROLLABLE values
SQL_NONSCROLLABLE = 0;
SQL_SCROLLABLE = 1;
// identifiers of fields in the SQL descriptor
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;
// identifiers of fields in the diagnostics area
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;
// dynamic function codes
SQL_DIAG_ALTER_DOMAIN = 3;
SQL_DIAG_ALTER_TABLE = 4;
SQL_DIAG_CALL = 7;
SQL_DIAG_CREATE_ASSERTION = 6;
SQL_DIAG_CREATE_CHARACTER_SET = 8;
SQL_DIAG_CREATE_COLLATION = 10;
SQL_DIAG_CREATE_DOMAIN = 23;
SQL_DIAG_CREATE_SCHEMA = 64;
SQL_DIAG_CREATE_INDEX = -1;
SQL_DIAG_CREATE_TABLE = 77;
SQL_DIAG_CREATE_TRANSLATION = 79;
SQL_DIAG_CREATE_VIEW = 84;
SQL_DIAG_DELETE_WHERE = 19;
SQL_DIAG_DROP_ASSERTION = 24;
SQL_DIAG_DROP_CHARACTER_SET = 25;
SQL_DIAG_DROP_COLLATION = 26;
SQL_DIAG_DROP_DOMAIN = 27;
SQL_DIAG_DROP_INDEX = -2;
SQL_DIAG_DROP_SCHEMA = 31;
SQL_DIAG_DROP_TABLE = 32;
SQL_DIAG_DROP_TRANSLATION = 33;
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;
// Standard SQL data type codes
SQL_UNKNOWN_TYPE = 0;
SQL_CHAR = 1;
SQL_NUMERIC = 2;
SQL_DECIMAL = 3;
SQL_INTEGER = 4;
SQL_SMALLINT = 5;
SQL_FLOAT = 6;
SQL_REAL = 7;
SQL_DOUBLE = 8;
SQL_DATETIME = 9;
SQL_VARCHAR =12;
// One-parameter shortcuts for date/time data types
SQL_TYPE_DATE = 91;
SQL_TYPE_TIME = 92;
SQL_TYPE_TIMESTAMP = 93;
// Statement attribute values for cursor sensitivity
SQL_UNSPECIFIED = 0;
SQL_INSENSITIVE = 1;
SQL_SENSITIVE = 2;
// SQLGetTypeInfo() request for all data types
SQL_ALL_TYPES = 0;
// Default conversion code for SQLBindCol(), SQLBindParam() and SQLGetData()
SQL_DEFAULT = 99;
// SQLGetData() code indicating that the application row descriptor specifies the data type
SQL_ARD_TYPE = (-99);
// SQL date/time type subcodes
SQL_CODE_DATE = 1;
SQL_CODE_TIME = 2;
SQL_CODE_TIMESTAMP = 3;
// CLI attribute/option values
SQL_FALSE = 0;
SQL_TRUE = 1;
// values of NULLABLE field in descriptor
SQL_NO_NULLS = 0;
SQL_NULLABLE = 1;
// NULL status defines; these are used in SQLColAttributes, SQLDescribeCol,
// to describe the nullability of a column in a table.
SQL_NULLABLE_UNKNOWN = 2;
// Values returned by SQLGetTypeInfo() to show WHERE clause supported
SQL_PRED_NONE = 0;
SQL_PRED_CHAR = 1;
SQL_PRED_BASIC = 2;
// values of UNNAMED field in descriptor used in SQLColAttribute
SQL_NAMED = 0;
SQL_UNNAMED = 1;
// values of ALLOC_TYPE field in descriptor
SQL_DESC_ALLOC_AUTO = 1;
SQL_DESC_ALLOC_USER = 2;
// SQLFreeStmt option values
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;
// Other codes used for FetchOrientation in SQLFetchScroll()
SQL_FETCH_LAST = 3;
SQL_FETCH_PRIOR = 4;
SQL_FETCH_ABSOLUTE = 5;
SQL_FETCH_RELATIVE = 6;
// SQLEndTran() and SQLTransact() option values
SQL_COMMIT = 0;
SQL_ROLLBACK = 1;
// null handles returned by SQLAllocHandle()
SQL_NULL_HENV = 0;
SQL_NULL_HDBC = 0;
SQL_NULL_HSTMT = 0;
SQL_NULL_HDESC = 0;
// null handle used in place of parent handle when allocating HENV
SQL_NULL_HANDLE = 0;
// Values that may appear in the result set of SQLSpecialColumns()
SQL_SCOPE_CURROW = 0;
SQL_SCOPE_TRANSACTION = 1;
SQL_SCOPE_SESSION = 2;
// Defines for SQLSpecialColumns (returned in the result set)
SQL_PC_UNKNOWN = 0;
SQL_PC_NON_PSEUDO = 1;
SQL_PC_PSEUDO = 2;
// Reserved value for the IdentifierType argument of SQLSpecialColumns()
SQL_ROW_IDENTIFIER = 1;
// Reserved values for UNIQUE argument of SQLStatistics()
SQL_INDEX_UNIQUE = 0;
SQL_INDEX_ALL = 1;
// Values that may appear in the result set of SQLStatistics()
SQL_INDEX_CLUSTERED = 1;
SQL_INDEX_HASHED = 2;
SQL_INDEX_OTHER = 3;
// SQLGetFunctions() values to identify ODBC APIs - supported functions
SQL_API_SQLALLOCCONNECT = 1;
SQL_API_SQLALLOCENV = 2;
SQL_API_SQLALLOCHANDLE = 1001;
SQL_API_SQLALLOCSTMT = 3;
SQL_API_SQLBINDCOL = 4;
SQL_API_SQLBINDPARAM = 1002;
SQL_API_SQLCANCEL = 5;
SQL_API_SQLCLOSECURSOR = 1003;
SQL_API_SQLCOLATTRIBUTE = 6;
SQL_API_SQLCOLUMNS = 40;
SQL_API_SQLCONNECT = 7;
SQL_API_SQLCOPYDESC = 1004;
SQL_API_SQLDATASOURCES = 57;
SQL_API_SQLDESCRIBECOL = 8;
SQL_API_SQLDISCONNECT = 9;
SQL_API_SQLENDTRAN = 1005;
SQL_API_SQLERROR = 10;
SQL_API_SQLEXECDIRECT = 11;
SQL_API_SQLEXECUTE = 12;
SQL_API_SQLFETCH = 13;
SQL_API_SQLFETCHSCROLL = 1021;
SQL_API_SQLFREECONNECT = 14;
SQL_API_SQLFREEENV = 15;
SQL_API_SQLFREEHANDLE = 1006;
SQL_API_SQLFREESTMT = 16;
SQL_API_SQLGETCONNECTATTR = 1007;
SQL_API_SQLGETCONNECTOPTION = 42;
SQL_API_SQLGETCURSORNAME = 17;
SQL_API_SQLGETDATA = 43;
SQL_API_SQLGETDESCFIELD = 1008;
SQL_API_SQLGETDESCREC = 1009;
SQL_API_SQLGETDIAGFIELD = 1010;
SQL_API_SQLGETDIAGREC = 1011;
SQL_API_SQLGETENVATTR = 1012;
SQL_API_SQLGETFUNCTIONS = 44;
SQL_API_SQLGETINFO = 45;
SQL_API_SQLGETSTMTATTR = 1014;
SQL_API_SQLGETSTMTOPTION = 46;
SQL_API_SQLGETTYPEINFO = 47;
SQL_API_SQLNUMRESULTCOLS = 18;
SQL_API_SQLPARAMDATA = 48;
SQL_API_SQLPREPARE = 19;
SQL_API_SQLPUTDATA = 49;
SQL_API_SQLROWCOUNT = 20;
SQL_API_SQLSETCONNECTATTR = 1016;
SQL_API_SQLSETCONNECTOPTION = 50;
SQL_API_SQLSETCURSORNAME = 21;
SQL_API_SQLSETDESCFIELD = 1017;
SQL_API_SQLSETDESCREC = 1018;
SQL_API_SQLSETENVATTR = 1019;
SQL_API_SQLSETPARAM = 22;
SQL_API_SQLSETSTMTATTR = 1020;
SQL_API_SQLSETSTMTOPTION = 51;
SQL_API_SQLSPECIALCOLUMNS = 52;
SQL_API_SQLSTATISTICS = 53;
SQL_API_SQLTABLES = 54;
SQL_API_SQLTRANSACT = 23;
// Information requested by SQLGetInfo()
SQL_MAX_DRIVER_CONNECTIONS = 0;
SQL_MAXIMUM_DRIVER_CONNECTIONS = SQL_MAX_DRIVER_CONNECTIONS;
SQL_MAX_CONCURRENT_ACTIVITIES = 1;
SQL_MAXIMUM_CONCURRENT_ACTIVITIES = SQL_MAX_CONCURRENT_ACTIVITIES;
SQL_DATA_SOURCE_NAME = 2;
SQL_FETCH_DIRECTION = 8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -