⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sddb2.pas

📁 SQLDirect Component Library is a light-weight Borland Database Engine replacement for Borland Delphi
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  FSQLGetInfo         	:= SDDb2.SQLGetInfo;
  FSQLGetStmtAttr     	:= SDDb2.SQLGetStmtAttr;
  FSQLGetStmtOption   	:= SDDb2.SQLGetStmtOption;
  FSQLGetTypeInfo     	:= SDDb2.SQLGetTypeInfo;
  FSQLNumResultCols   	:= SDDb2.SQLNumResultCols;
  FSQLParamData       	:= SDDb2.SQLParamData;
  FSQLPrepare         	:= SDDb2.SQLPrepare;
  FSQLPutData         	:= SDDb2.SQLPutData;
  FSQLRowCount        	:= SDDb2.SQLRowCount;
  FSQLSetConnectAttr  	:= SDDb2.SQLSetConnectAttr;
  FSQLSetConnectOption	:= SDDb2.SQLSetConnectOption;
  FSQLSetCursorName   	:= SDDb2.SQLSetCursorName;
  FSQLSetDescField    	:= SDDb2.SQLSetDescField;
  FSQLSetDescRec      	:= SDDb2.SQLSetDescRec;
  FSQLSetEnvAttr      	:= SDDb2.SQLSetEnvAttr;
  FSQLSetParam        	:= SDDb2.SQLSetParam;
  FSQLSetStmtAttr     	:= SDDb2.SQLSetStmtAttr;
  FSQLSetStmtOption   	:= SDDb2.SQLSetStmtOption;
  FSQLSpecialColumns  	:= SDDb2.SQLSpecialColumns;
  FSQLStatistics      	:= SDDb2.SQLStatistics;
  FSQLTables          	:= SDDb2.SQLTables;
  FSQLTransact        	:= SDDb2.SQLTransact;

  FSQLBrowseConnect   	:= SDDb2.SQLBrowseConnect;
  FSQLBulkOperations  	:= SDDb2.SQLBulkOperations;
  FSQLColAttributes   	:= SDDb2.SQLColAttributes;
  FSQLColumnPrivileges	:= SDDb2.SQLColumnPrivileges;
  FSQLDescribeParam   	:= SDDb2.SQLDescribeParam;
  FSQLExtendedFetch   	:= SDDb2.SQLExtendedFetch;
  FSQLForeignKeys   	:= SDDb2.SQLForeignKeys;
  FSQLMoreResults     	:= SDDb2.SQLMoreResults;
  FSQLNativeSql       	:= SDDb2.SQLNativeSql;
  FSQLNumParams       	:= SDDb2.SQLNumParams;
  FSQLParamOptions    	:= SDDb2.SQLParamOptions;
  FSQLPrimaryKeys     	:= SDDb2.SQLPrimaryKeys;
  FSQLProcedureColumns	:= SDDb2.SQLProcedureColumns;
  FSQLProcedures      	:= SDDb2.SQLProcedures;
  FSQLSetPos  		:= SDDb2.SQLSetPos;
  FSQLTablePrivileges 	:= SDDb2.SQLTablePrivileges;
  FSQLDrivers 		:= SDDb2.SQLDrivers;
  FSQLBindParameter   	:= SDDb2.SQLBindParameter;
  FSQLDriverConnect   	:= SDDb2.SQLDriverConnect;
		// DB2 specific CLI APIs (sqlcli1.h)
  FSQLBindFileToCol  	:= SDDb2.SQLBindFileToCol;
  FSQLBindFileToParam	:= SDDb2.SQLBindFileToParam;
  FSQLGetLength      	:= SDDb2.SQLGetLength;
  FSQLGetPosition    	:= SDDb2.SQLGetPosition;
  FSQLGetSubString   	:= SDDb2.SQLGetSubString;
  FSQLSetColAttributes	:= SDDb2.SQLSetColAttributes;
  FSQLBindParam       	:= SDDb2.SQLBindParam;
{$ELSE}
  inherited SetApiCalls( hSqlLibModule );
		// DB2 specific CLI APIs (sqlcli1.h)
  @FSQLBindFileToCol  	:= GetProcAddress(hSqlLibModule, 'SQLBindFileToCol');
  @FSQLBindFileToParam	:= GetProcAddress(hSqlLibModule, 'SQLBindFileToParam');
  @FSQLGetLength      	:= GetProcAddress(hSqlLibModule, 'SQLGetLength');
  @FSQLGetPosition    	:= GetProcAddress(hSqlLibModule, 'SQLGetPosition');
  @FSQLGetSubString   	:= GetProcAddress(hSqlLibModule, 'SQLGetSubString');
  @FSQLSetColAttributes	:= GetProcAddress(hSqlLibModule, 'SQLSetColAttributes');
		// APIs defined only by X/Open CLI (sqlcli1.h)
  @FSQLBindParam       := GetProcAddress(hSqlLibModule, 'SQLBindParam');
{$ENDIF}
end;

procedure TDB2Functions.ClearApiCalls;
begin
  inherited ClearApiCalls;
		// DB2 specific CLI APIs (sqlcli1.h)
  @FSQLBindFileToCol  	:= nil;
  @FSQLBindFileToParam	:= nil;
  @FSQLGetLength      	:= nil;
  @FSQLGetPosition    	:= nil;
  @FSQLGetSubString   	:= nil;
  @FSQLSetColAttributes:= nil;
		// APIs defined only by X/Open CLI (sqlcli1.h)
  @FSQLBindParam      	:= nil;
end;

procedure LoadSqlLib;
begin
  SqlLibLock.Acquire;
  try
    if (SqlLibRefCount = 0) then begin
      hSqlLibModule := HelperLoadLibrary( SqlApiDLL );
      if (hSqlLibModule = 0) then
        raise ESDSqlLibError.CreateFmt(SErrLibLoading, [ SqlApiDLL ]);
      Inc(SqlLibRefCount);
      DB2Calls.SetApiCalls( hSqlLibModule );
    end else
      Inc(SqlLibRefCount);
  finally
    SqlLibLock.Release;
  end;
end;

procedure FreeSqlLib;
begin
  if SqlLibRefCount = 0 then
    Exit;

  SqlLibLock.Acquire;
  try
    if (SqlLibRefCount = 1) then begin
      if FreeLibrary(hSqlLibModule) then
        hSqlLibModule := 0
      else
        raise ESDSqlLibError.CreateFmt(SErrLibUnloading, [ SqlApiDLL ]);
      Dec(SqlLibRefCount);
      DB2Calls.ClearApiCalls;
    end else
      Dec(SqlLibRefCount);
  finally
    SqlLibLock.Release;
  end;
end;

{ TIDB2Database }
function TIDB2Database.CreateSqlCommand: TISqlCommand;
begin
  Result := TIDB2Command.Create( Self );
end;

function TIDB2Database.GetCalls: TDB2Functions;
begin
  Result := FCalls as TDB2Functions;
end;

procedure TIDB2Database.FreeSqlLib;
begin
  SDDb2.FreeSqlLib;
end;

procedure TIDB2Database.LoadSqlLib;
begin
  SDDb2.LoadSqlLib;

  FCalls := DB2Calls;
end;

procedure TIDB2Database.RaiseSDEngineError(AErrorCode, ANativeError: TSDEResult; const AMsg, ASqlState: string);
begin
  raise ESDDb2Error.CreateWithSqlState(AErrorCode, ANativeError, AMsg, ASqlState);
end;

function TIDB2Database.GetAutoIncSQL: string;
begin
  Result := DB2_SelectAutoIncField;
end;


{ TIDB2Command }
function TIDB2Command.GetSqlDatabase: TIDB2Database;
begin
  Result := (inherited SqlDatabase) as TIDB2Database;
end;

procedure TIDB2Command.Connect;
begin
  inherited;

	// specifies the number of values for each parameter (DB2 CLI v5)
  Check( SqlDatabase.OdbcSetStmtAttr( Handle, SQL_ATTR_PARAMSET_SIZE, SQLPOINTER( 1 ), 0 ) );
	// (DB2 CLI v5)
  Check( SqlDatabase.OdbcSetStmtAttr( Handle, SQL_ATTR_USE_BOOKMARKS, SQLPOINTER( SQL_UB_OFF ), 0 ) );

	// Note: This option is an IBM extension
  Check(
  	SqlDatabase.OdbcSetStmtAttr( Handle, SQL_ATTR_CURSOR_HOLD,
        	SQLPOINTER( SQL_CURSOR_HOLD_ON ), 0 )
        );
	// Note: This is an IBM defined extension. (DB2 CLI v5)
  Check(
  	SqlDatabase.OdbcSetStmtAttr( Handle, SQL_ATTR_DEFERRED_PREPARE,
        	SQLPOINTER( SQL_DEFERRED_PREPARE_OFF ), 0 )
        );
end;

function TIDB2Command.FieldDataType(ExtDataType: Integer): TFieldType;
begin
  case ExtDataType of
	// DB2 data types
    SQL_GRAPHIC,
    SQL_VARGRAPHIC:	Result := ftVarBytes;
    SQL_LONGVARGRAPHIC,
    SQL_BLOB:		Result := ftBlob;
    SQL_CLOB,
    SQL_DBCLOB:		Result := ftMemo;
  else
    Result := inherited FieldDataType( ExtDataType );
  end;
end;

function TIDB2Command.SqlDataType(FieldType: TFieldType): Integer;
const
  { Converting from TFieldType to SQL Data Type(DB2) }
  Db2SqlDataTypeMap: array[TFieldType] of Integer = ( 0,	// ftUnknown
	// ftString, ftSmallint, ftInteger, ftWord, ftBoolean
	SQL_CHAR, SQL_SMALLINT, SQL_INTEGER, SQL_INTEGER, SQL_SMALLINT,
	// ftFloat, ftCurrency, ftBCD, 	ftDate, 	ftTime
        SQL_DOUBLE, SQL_DOUBLE, 0, SQL_TYPE_DATE, SQL_TYPE_TIME,
        // ftDateTime, 		ftBytes, ftVarBytes, ftAutoInc, ftBlob
        SQL_TYPE_TIMESTAMP, SQL_BINARY, SQL_BINARY, SQL_INTEGER, SQL_BLOB,
        // ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle
        SQL_CLOB, SQL_BLOB, SQL_CLOB, 	0,	0,
        // ftTypedBinary, ftCursor
        0,	0
{$IFDEF SD_VCL4},
	// ftFixedChar, ftWideString, ftLargeint,
        0,	0,	SQL_BIGINT,
        // ftADT, ftArray, ftReference, ftDataSet
        0,	0,	0,	0
{$ENDIF}
{$IFDEF SD_VCL5},
        // ftOraBlob, ftOraClob, ftVariant,
        0,	0,	0,
        // ftInterface, ftIDispatch, ftGuid
        0,	0,	0
{$ENDIF}
{$IFDEF SD_VCL6},
        // ftTimeStamp, ftFMTBcd
        0,      0
{$ENDIF}
        );
begin
  Result := Db2SqlDataTypeMap[FieldType];
end;


initialization
  hSqlLibModule	:= 0;
  SqlLibRefCount:= 0;
  SqlApiDLL	:= DefSqlApiDLL;  
  DB2Calls 	:= TDB2Functions.Create;
  SqlLibLock 	:= TCriticalSection.Create;
finalization
  while SqlLibRefCount > 0 do
    FreeSqlLib;
  SqlLibLock.Free;
  DB2Calls.Free;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -