📄 sddb2.pas
字号:
SQL_DB2EXPLAIN_MODE_ON = $00000002;
SQL_DB2EXPLAIN_SNAPSHOT_MODE_ON= SQL_DB2EXPLAIN_SNAPSHOT_ON+SQL_DB2EXPLAIN_MODE_ON;
SQL_DB2EXPLAIN_ON = SQL_DB2EXPLAIN_SNAPSHOT_ON;
SQL_DB2EXPLAIN_DEFAULT = SQL_DB2EXPLAIN_OFF;
{/* Options for SQL_WCHARTYPE
* Note that you can only specify SQL_WCHARTYPE_CONVERT if you have an
* external compile flag SQL_WCHART_CONVERT defined
*/
#ifdef SQL_WCHART_CONVERT
#define SQL_WCHARTYPE_CONVERT 1
#endif
#define SQL_WCHARTYPE_NOCONVERT 0
#define SQL_WCHARTYPE_DEFAULT SQL_WCHARTYPE_NOCONVERT
}
// LOB file reference options
SQL_FILE_READ = 2; // Input file to read from
SQL_FILE_CREATE = 8; // Output file - new file to be created
SQL_FILE_OVERWRITE = 16; // Output file - overwrite existing file or create a new file if it doesn't exist
SQL_FILE_APPEND = 32; // Output file - append to an existing file or create a new file if it doesn't exist
// Source of string for SQLGetLength(), SQLGetPosition(),
// and SQLGetSubstring().
SQL_FROM_LOCATOR = 2;
SQL_FROM_LITERAL = 3;
type
ESDDb2Error = class(ESDOdbcError);
{ TDB2Functions }
{*******************************************************************************
* DB2 specific CLI APIs (sqlcli1.h)
******************************************************************************}
TSQLBindFileToCol =
function (hStmt: SQLHSTMT; icol: SQLUSMALLINT;
FileName: TSDCharPtr; var FileNameLength: SQLSMALLINT;
var FileOptions: SQLUINTEGER; MaxFileNameLength: SQLSMALLINT;
var StringLength, IndicatorValue: SQLINTEGER): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
TSQLBindFileToParam =
function (hStmt: SQLHSTMT; ipar: SQLUSMALLINT; fSqlType: SQLSMALLINT;
FileName: TSDCharPtr; var FileNameLength: SQLSMALLINT;
var FileOptions: SQLUINTEGER; MaxFileNameLength: SQLSMALLINT;
var IndicatorValue: SQLINTEGER): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
TSQLGetLength =
function (hStmt: SQLHSTMT; LocatorCType: SQLSMALLINT; Locator: SQLINTEGER;
var StringLength, IndicatorValue: SQLINTEGER): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
TSQLGetPosition =
function (hStmt: SQLHSTMT; LocatorCType: SQLSMALLINT;
SourceLocator, SearchLocator: SQLINTEGER;
SearchLiteral: TSDCharPtr; SearchLiteralLength: SQLINTEGER;
FromPosition: SQLUINTEGER; var LocatedAt: SQLUINTEGER;
var IndicatorValue: SQLINTEGER): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
TSQLGetSubString =
function (hStmt: SQLHSTMT; LocatorCType: SQLSMALLINT;
SourceLocator: SQLINTEGER; FromPosition, ForLength: SQLUINTEGER;
TargetCType: SQLSMALLINT; rgbValue: SQLPOINTER;
cbValueMax: SQLINTEGER; var StringLength, IndicatorValue: SQLINTEGER): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
TSQLSetColAttributes =
function (hStmt: SQLHSTMT; icol: SQLUSMALLINT;
szColName: TSDCharPtr; cbColName, fSQLType: SQLSMALLINT;
cbColDef: SQLUINTEGER; ibScale, fNullable: SQLSMALLINT): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
{*******************************************************************************
* APIs defined only by X/Open CLI (sqlcli1.h)
******************************************************************************}
TSQLBindParam =
function(hStmt: SQLHSTMT; ParameterNumber: SQLUSMALLINT;
ValueType, ParameterType: SQLSMALLINT; LengthPrecision: SQLUINTEGER;
ParameterScale: SQLSMALLINT; ParameterValue: SQLPOINTER;
var StrLen_or_Ind: SQLINTEGER): SQLRETURN;{$IFNDEF SD_CLR} stdcall; {$ENDIF}
// adding DB2 specific CLI APIs
TDB2Functions = class(TOdbcFunctions)
private
FSQLBindFileToCol: TSQLBindFileToCol;
FSQLBindFileToParam:TSQLBindFileToParam;
FSQLGetLength: TSQLGetLength;
FSQLGetPosition: TSQLGetPosition;
FSQLGetSubString: TSQLGetSubString;
FSQLSetColAttributes:TSQLSetColAttributes;
FSQLBindParam: TSQLBindParam;
public
procedure SetApiCalls(ASqlLibModule: THandle); override;
procedure ClearApiCalls; override;
property SQLBindFileToCol: TSQLBindFileToCol read FSQLBindFileToCol;
property SQLBindFileToParam:TSQLBindFileToParam read FSQLBindFileToParam;
property SQLGetLength: TSQLGetLength read FSQLGetLength;
property SQLGetPosition: TSQLGetPosition read FSQLGetPosition;
property SQLGetSubString: TSQLGetSubString read FSQLGetSubString;
property SQLSetColAttributes:TSQLSetColAttributes read FSQLSetColAttributes;
property SQLBindParam: TSQLBindParam read FSQLBindParam;
end;
{ TIDB2Database }
TIDB2Database = class(TICustomOdbcDatabase)
private
function GetCalls: TDB2Functions;
protected
procedure FreeSqlLib; override;
procedure LoadSqlLib; override;
procedure RaiseSDEngineError(AErrorCode, ANativeError: TSDEResult; const AMsg, ASqlState: string); override;
public
function CreateSqlCommand: TISqlCommand; override;
function GetAutoIncSQL: string; override;
property Calls: TDB2Functions read GetCalls;
end;
{ TIDB2Command }
TIDB2Command = class(TICustomOdbcCommand)
private
function GetSqlDatabase: TIDB2Database;
protected
procedure Connect; override;
function FieldDataType(ExtDataType: Integer): TFieldType; override;
function SqlDataType(FieldType: TFieldType): Integer; override;
property SqlDatabase: TIDB2Database read GetSqlDatabase;
end;
const
DefSqlApiDLL = 'DB2CLI.DLL';
var
SqlApiDLL: string;
DB2Calls: TDB2Functions;
{$IFDEF SD_CLR}
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLAllocConnect')]
function SQLAllocConnect(henv :SQLHENV; var hdbc: SQLHDBC): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLAllocEnv')]
function SQLAllocEnv(var henv: SQLHENV): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLAllocHandle')]
function SQLAllocHandle(fHandleType: SQLSMALLINT; hInput: SQLHANDLE;
var hOutput: SQLHANDLE): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLAllocStmt')]
function SQLAllocStmt(hdbc: SQLHDBC; var hstmt: SQLHSTMT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLBindCol')]
function SQLBindCol(hstmt: SQLHSTMT; icol: SQLUSMALLINT; fCType: SQLSMALLINT;
rgbValue: SQLPOINTER; cbValueMax: SQLINTEGER;
pcbValue: SQLPOINTER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLCancel')]
function SQLCancel(hstmt: SQLHSTMT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLCloseCursor')]
function SQLCloseCursor(hStmt: SQLHSTMT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLColAttribute')]
function SQLColAttribute(hstmt: SQLHSTMT; icol, fDescType: SQLUSMALLINT;
rgbDesc: SQLPOINTER; cbDescMax: SQLSMALLINT;
pcbDesc: SQLPOINTER; pfDesc: SQLPOINTER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLColumns')]
function SQLColumns(hStmt: SQLHSTMT;
szCatalogName: TSDCharPtr; cbCatalogName: SQLSMALLINT;
szSchemaName: TSDCharPtr; cbSchemaName: SQLSMALLINT;
szTableName: TSDCharPtr; cbTableName: SQLSMALLINT;
szColumnName: TSDCharPtr; cbColumnName: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLConnect')]
function SQLConnect(hdbc: SQLHDBC; szDSN: TSDCharPtr; cbDSN: SQLSMALLINT;
szUID: TSDCharPtr; cbUID: SQLSMALLINT;
szAuthStr: TSDCharPtr; cbAuthStr: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLCopyDesc')]
function SQLCopyDesc(hDescSource: SQLHDESC; hDescTarget: SQLHDESC): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLDataSources')]
function SQLDataSources(hEnv: SQLHENV; fDirection: SQLUSMALLINT;
szDSN: TSDCharPtr; cbDSNMax: SQLSMALLINT; var cbDSN: SQLSMALLINT;
szDescription: TSDCharPtr; cbDescriptionMax: SQLSMALLINT;
var cbDescription: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLDescribeCol')]
function SQLDescribeCol(hstmt: SQLHSTMT; icol: SQLUSMALLINT;
szColName: TSDCharPtr; cbColNameMax: SQLSMALLINT; var cbColName, fSqlType: SQLSMALLINT;
var cbColDef: SQLUINTEGER; var ibScale, fNullable: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLDisconnect')]
function SQLDisconnect(hdbc: SQLHDBC): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLEndTran')]
function SQLEndTran(fHandleType: SQLSMALLINT; hHandle: SQLHANDLE; fType: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLError')]
function SQLError(henv: SQLHENV; hdbc: SQLHDBC; hstmt: SQLHSTMT;
szSqlState: TSDCharPtr; var fNativeError: SQLINTEGER;
szErrorMsg: TSDCharPtr; cbErrorMsgMax: SQLSMALLINT;
var cbErrorMsg: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLExecDirect')]
function SQLExecDirect(hstmt: SQLHSTMT; szSqlStr: TSDCharPtr; cbSqlStr: SQLINTEGER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLExecute')]
function SQLExecute(hstmt: SQLHSTMT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLFetch')]
function SQLFetch(hstmt: SQLHSTMT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLFetchScroll')]
function SQLFetchScroll(hStmt: SQLHSTMT;
FetchOrientation: SQLSMALLINT; FetchOffset: SQLINTEGER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLFreeConnect')]
function SQLFreeConnect(hdbc: SQLHDBC): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLFreeEnv')]
function SQLFreeEnv(henv: SQLHENV): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLFreeHandle')]
function SQLFreeHandle(fHandleType: SQLSMALLINT; hHandle: SQLHANDLE): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLFreeStmt')]
function SQLFreeStmt(hstmt: SQLHSTMT; fOption: SQLUSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetConnectAttr')]
function SQLGetConnectAttr(hDbc: SQLHDBC; Attribute: SQLINTEGER; Value: SQLPOINTER;
BufferLength: SQLINTEGER; pStringLength: SQLPOINTER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetConnectOption')]
function SQLGetConnectOption(hDbc: SQLHDBC; fOption: SQLUSMALLINT; pvParam: SQLPOINTER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetCursorName')]
function SQLGetCursorName(hStmt: SQLHSTMT; szCursor: TSDCharPtr; cbCursorMax: SQLSMALLINT;
var cbCursor: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetData')]
function SQLGetData(hStmt: SQLHSTMT; icol: SQLUSMALLINT; fCType: SQLSMALLINT;
rgbValue: SQLPOINTER; cbValueMax: SQLINTEGER;
var cbValue: SQLINTEGER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetDescField')]
function SQLGetDescField(DescriptorHandle: SQLHDESC; RecNumber, FieldIdentifier: SQLSMALLINT;
Value: SQLPOINTER; BufferLength: SQLINTEGER;
var StringLength: SQLINTEGER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetDescRec')]
function SQLGetDescRec(DescriptorHandle: SQLHDESC; RecNumber: SQLSMALLINT;
Name: TSDCharPtr; BufferLength: SQLSMALLINT; var StringLength, RecType, RecSubType: SQLSMALLINT;
var Length: SQLINTEGER; var Precision, Scale, Nullable: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetDiagField')]
function SQLGetDiagField(fHandleType: SQLSMALLINT; hHandle: SQLHANDLE; iRecNumber: SQLSMALLINT;
fDiagIdentifier: SQLSMALLINT; var cbDiagInfo: SQLINTEGER;
cbDiagInfoMax: SQLSMALLINT; pcbDiagInfo: SQLPOINTER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetDiagRec')]
function SQLGetDiagRec(fHandleType: SQLSMALLINT; hHandle: SQLHANDLE; iRecNumber: SQLSMALLINT;
szSqlState: TSDCharPtr; var fNativeError: SQLINTEGER;
szErrorMsg: TSDCharPtr; cbErrorMsgMax: SQLSMALLINT;
var cbErrorMsg: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetEnvAttr')]
function SQLGetEnvAttr(hEnv: SQLHENV; Attr: SQLINTEGER; Value: SQLPOINTER;
BufLen: SQLINTEGER; var StringLength: SQLINTEGER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetFunctions')]
function SQLGetFunctions(hDbc: SQLHDBC; fFunction: SQLUSMALLINT; var fExists: SQLUSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetInfo')]
function SQLGetInfo(hDbc: SQLHDBC; fInfoType: SQLUSMALLINT; rgbInfoValue: SQLPOINTER;
cbInfoValueMax: SQLSMALLINT; var cbInfoValue: SQLSMALLINT): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetStmtAttr')]
function SQLGetStmtAttr(hStmt: SQLHSTMT; Attribute: SQLINTEGER; Value: SQLPOINTER;
BufferLength: SQLINTEGER; var StringLength: SQLINTEGER): SQLRETURN; external;
[DllImport(DefSqlApiDLL, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SQLGetStmtOption')]
function SQLGetStmtOption(hStmt: SQLHSTMT; fOption: SQLUSMALLINT; pvParam: SQLPOINTER): SQLRETURN; external;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -