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

📄 ib_intf.pas

📁 FIBPlus is a component suite intended for work with InterBase. It is direct, fast and flexible Inter
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  private
    FBusy:boolean;

    function  GetLibName:string;
    function  GetIBClientVersion: Integer;
    function  GetIBClientMinorVersion: Integer;
    function  GetBusy:boolean;
    function  isc_attach_database(status_vector : PISC_STATUS; db_name_length : Short;
                                 db_name : PChar; db_handle : PISC_DB_HANDLE;
			                           parm_buffer_length	: Short; parm_buffer : PChar): ISC_STATUS;
    function  isc_array_get_slice(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                                 trans_handle : PISC_TR_HANDLE; array_id : PISC_QUAD;
                                 descriptor : PISC_ARRAY_DESC; dest_array : PVoid;
				                         slice_length : ISC_LONG): ISC_STATUS;
    function  isc_array_lookup_bounds(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                                     trans_handle : PISC_TR_HANDLE; table_name, column_name : PChar;
				                             descriptor : PISC_ARRAY_DESC): ISC_STATUS;
    function  isc_array_lookup_desc(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                                   trans_handle : PISC_TR_HANDLE; table_name, column_name : PChar;
				                           descriptor : PISC_ARRAY_DESC): ISC_STATUS;
    function isc_array_set_desc(status_vector : PISC_STATUS; table_name : PChar;
                                column_name : PChar; sql_dtype, sql_length, sql_dimensions           : PShort;
                                 descriptor : PISC_ARRAY_DESC): ISC_STATUS;
    function isc_array_put_slice(status_vector : PISC_STATUS; db_handle  : PISC_DB_HANDLE;
                                 trans_handle : PISC_TR_HANDLE; array_id : PISC_QUAD;
                                 descriptor : PISC_ARRAY_DESC; source_array : PVoid;
                                 slice_length : PISC_LONG): ISC_STATUS;
    function isc_blob_info(status_vector : PISC_STATUS; blob_handle : PISC_BLOB_HANDLE;
				                   item_list_buffer_length : Short; item_list_buffer : PChar;
				                   result_buffer_length : Short; result_buffer : PChar): ISC_STATUS;
    function isc_blob_lookup_desc(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                                  trans_handle : PISC_TR_HANDLE; table_name, column_name : PChar;
                                  descriptor : PISC_BLOB_DESC; global : PUChar): ISC_STATUS;
    function isc_blob_set_desc(status_vector : PISC_STATUS; table_name, column_name : PChar;
                               subtype, charset, segment_size : Short; descriptor : PISC_BLOB_DESC): ISC_STATUS;
    function isc_cancel_blob(status_vector  : PISC_STATUS; blob_handle : PISC_BLOB_HANDLE): ISC_STATUS;
    function isc_cancel_events(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
				                       event_id : PISC_LONG): ISC_STATUS;
    function isc_que_events(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
				                    event_id : PISC_LONG; length : Short; event_buffer : PChar;
                            event_function : TISC_CALLBACK; event_function_arg        : PVoid): ISC_STATUS;

    function isc_wait_for_event  (status_vector: PISC_STATUS;
     db_handle: PISC_DB_HANDLE;length: Short; event_buffer,result_buffer: PChar): ISC_STATUS;

    function isc_close_blob(status_vector : PISC_STATUS; blob_handle : PISC_BLOB_HANDLE): ISC_STATUS;
    function isc_commit_retaining(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE): ISC_STATUS;
    function isc_commit_transaction(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE): ISC_STATUS;

    function isc_transaction_info(status_vector            : PISC_STATUS;
                                 tran_handle               : PISC_TR_HANDLE;
                                 item_list_buffer_length   : Short;
                                 item_list_buffer          : PChar;
                                 result_buffer_length      : Short;
                                 result_buffer             : PChar): ISC_STATUS;

    function isc_create_blob2(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                              tran_handle : PISC_TR_HANDLE; blob_handle : PISC_BLOB_HANDLE;
                              blob_id : PISC_QUAD; bpb_length : Short; bpb_address : PChar): ISC_STATUS;
    function isc_database_info(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                               item_list_buffer_length : Short; item_list_buffer : PChar;
                                 result_buffer_length : Short; result_buffer : PChar): ISC_STATUS;
    procedure isc_decode_date(ib_date: PISC_QUAD; tm_date: PCTimeStructure);
    procedure isc_decode_sql_date(ib_date: PISC_DATE; tm_date: PCTimeStructure);
    procedure isc_decode_sql_time(ib_time: PISC_TIME; tm_date: PCTimeStructure);
    procedure isc_decode_timestamp(ib_timestamp: PISC_TIMESTAMP; tm_date: PCTimeStructure);
    function isc_detach_database(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE): ISC_STATUS;
    function isc_drop_database(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE): ISC_STATUS;
    function isc_dsql_alloc_statement2(const status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
				                               stmt_handle : PISC_STMT_HANDLE): ISC_STATUS;
    function isc_dsql_describe(status_vector : PISC_STATUS; stmt_handle : PISC_STMT_HANDLE;
                               dialect : UShort; xsqlda : PXSQLDA): ISC_STATUS;
    function isc_dsql_describe_bind(status_vector : PISC_STATUS; stmt_handle : PISC_STMT_HANDLE;
                                 dialect : UShort; xsqlda : PXSQLDA): ISC_STATUS;
    function isc_dsql_execute(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE;
                              stmt_handle : PISC_STMT_HANDLE; dialect : UShort;
                              xsqlda : PXSQLDA): ISC_STATUS;
    function isc_dsql_execute2(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE;
                               stmt_handle : PISC_STMT_HANDLE; dialect : UShort;
                               in_xsqlda, out_xsqlda : PXSQLDA): ISC_STATUS;
    function isc_dsql_execute_immediate(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
				                                tran_handle : PISC_TR_HANDLE; length : UShort;
				                                statement : PChar; dialect : UShort;
                                        xsqlda : PXSQLDA): ISC_STATUS;

    function isc_dsql_exec_immed2(status_vector           : PISC_STATUS;
				 db_handle                : PISC_DB_HANDLE;
				 tran_handle              : PISC_TR_HANDLE;
				 length                   : UShort;
				 statement                : PChar;
				 dialect                  : UShort;
                                 in_xsqlda,
				 out_xsqlda               : PXSQLDA): ISC_STATUS;


    function isc_dsql_fetch(status_vector : PISC_STATUS; stmt_handle : PISC_STMT_HANDLE;
				                    dialect : UShort; xsqlda : PXSQLDA): ISC_STATUS;
    function isc_dsql_free_statement(status_vector : PISC_STATUS; stmt_handle : PISC_STMT_HANDLE;
                                     options : UShort): ISC_STATUS;
    function isc_dsql_prepare(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE;
                              stmt_handle : PISC_STMT_HANDLE; length : UShort;
                              statement : PChar; dialect : UShort;
                              xsqlda : PXSQLDA): ISC_STATUS;
    function isc_dsql_set_cursor_name(status_vector : PISC_STATUS; stmt_handle : PISC_STMT_HANDLE;
                                      cursor_name : PChar; _type : UShort): ISC_STATUS;
    function isc_dsql_sql_info(status_vector : PISC_STATUS; stmt_handle : PISC_STMT_HANDLE;
				                       item_length : Short; items : PChar; buffer_length : Short;
                               buffer : PChar): ISC_STATUS;
    procedure isc_encode_date(tm_date : PCTimeStructure; ib_date : PISC_QUAD);
    procedure isc_encode_sql_date(tm_date: PCTimeStructure; ib_date : PISC_DATE);
    procedure isc_encode_sql_time(tm_date : PCTimeStructure; ib_time : PISC_TIME);
    procedure isc_encode_timestamp(tm_date : PCTimeStructure; ib_timestamp : PISC_TIMESTAMP);
    function isc_event_block(event_buffer : PPChar; result_buffer : PPChar;
				                     id_count : UShort; event_list : array of PChar): ISC_LONG;
    procedure isc_event_counts(status_vector : PISC_STATUS; buffer_length  : Short;
				                       event_buffer : PChar; result_buffer : PChar);
    function isc_free(isc_arg1 : PChar): ISC_LONG;
    function isc_get_segment(status_vector : PISC_STATUS; blob_handle : PISC_BLOB_HANDLE;
                             actual_seg_length : PUShort; seg_buffer_length : UShort;
				                     seg_buffer : PChar): ISC_STATUS;
    function isc_put_segment(status_vector : PISC_STATUS; blob_handle : PISC_BLOB_HANDLE;
				                     seg_buffer_len : UShort; seg_buffer : PChar): ISC_STATUS;

    function isc_interprete(buffer : PChar; status_vector : PPISC_STATUS): ISC_STATUS;
    function isc_open_blob2(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
                            tran_handle : PISC_TR_HANDLE; blob_handle : PISC_BLOB_HANDLE;
				                    blob_id : PISC_QUAD; bpb_length : Short; bpb_buffer : PChar): ISC_STATUS;
    function isc_prepare_transaction2(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE;
                                      msg_length : Short; msg : PChar): ISC_STATUS;
    function isc_rollback_retaining(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE): ISC_STATUS;
    function isc_rollback_transaction(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE): ISC_STATUS;
    function isc_start_multiple(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE;
                                db_handle_count : Short; teb_vector_address : PISC_TEB): ISC_STATUS;
    function  isc_sqlcode(status_vector : PISC_STATUS): ISC_LONG;
    procedure isc_sql_interprete(sqlcode : Short; buffer : PChar;
                                 buffer_length : Short);
    function  isc_vax_integer(buffer : PChar; length : Short): ISC_LONG;

    function  isc_add_user(status_vector : PISC_STATUS; user_sec_data : PUserSecData): ISC_STATUS;
    function  isc_delete_user(status_vector : PISC_STATUS; user_sec_data : PUserSecData): ISC_STATUS;
    function  isc_modify_user(status_vector : PISC_STATUS; user_sec_data : PUserSecData): ISC_STATUS;


    function isc_prepare_transaction(status_vector         : PISC_STATUS;
                                 tran_handle               : PISC_TR_HANDLE): ISC_STATUS;

    function BLOB_put(isc_arg1                  : char;  isc_arg2                  : PBSTREAM): Int;
    function BLOB_get(isc_arg1                  : PBSTREAM): Int;

   // Service manager functions
   function isc_service_attach (status_vector             : PISC_STATUS;
                                 isc_arg2                  : UShort;
                                 isc_arg3                  : PChar;
                                 service_handle            : PISC_SVC_HANDLE;
                                 isc_arg5                  : UShort;
                                 isc_arg6                  : PChar): ISC_STATUS;
    function isc_service_detach(status_vector             : PISC_STATUS;
                                service_handle            : PISC_SVC_HANDLE): ISC_STATUS;
    function isc_service_query  (status_vector             : PISC_STATUS;
                                 service_handle            : PISC_SVC_HANDLE;
                                 recv_handle               : PISC_SVC_HANDLE;
                                 isc_arg4                  : UShort;
                                 isc_arg5                  : PChar;
                                 isc_arg6                  : UShort;
                                 isc_arg7                  : PChar;
                                 isc_arg8                  : UShort;
                                 isc_arg9                  : PChar): ISC_STATUS;
    function isc_service_start (status_vector             : PISC_STATUS;
                                service_handle            : PISC_SVC_HANDLE;
                                recv_handle               : PISC_SVC_HANDLE;
                                isc_arg4                  : UShort;
                                isc_arg5                  : PChar): ISC_STATUS;
    // Client information functions
    procedure isc_get_client_version(buffer : PChar);
    function  isc_get_client_major_version: Integer;
    function  isc_get_client_minor_version: Integer;
    function  isc_portable_integer(buffer: PChar;length: Short): ISC_INT64;

//IB2007
    function isc_dsql_batch_execute_immed(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
						   tran_handle : PISC_TR_HANDLE; Dialect : UShort; no_of_sql : ulong;
						   statement : PPChar; rows_affected : PULong) : ISC_STATUS;
    function isc_dsql_batch_execute(status_vector : PISC_STATUS; tran_handle : PISC_TR_HANDLE;
						   stmt_handle : PISC_STMT_HANDLE; Dialect : UShort;
						   insqlda : PXSQLDA; no_of_rows : UShort;
						   batch_vars : PPXSQLVAR; rows_affected : PULong) : ISC_STATUS;

//FB2.5
    function fb_cancel_operation(status_vector : PISC_STATUS; db_handle : PISC_DB_HANDLE;
              option : UShort
    ) : ISC_STATUS;


  public
    constructor Create(const aLibName:string);
    destructor Destroy;override;
    procedure   LoadIBLibrary;
    procedure   FreeIBLibrary;
  end;


{ Library Initialization }
procedure LoadIBInstallLibrary;
procedure FreeIBInstallLibrary;
procedure CheckIBInstallLoaded;


function GetClientLibrary(const aLibName:string):IIbClientLibrary;



const
  IBDateDelta = 15018;

const
  describe_bind_info:array[0..11] of char =(
    Char(isc_info_sql_bind),
    Char(isc_info_sql_describe_vars),
    Char(isc_info_sql_sqlda_seq),
    Char(isc_info_sql_type),
    Char(isc_info_sql_sub_type),
    Char(isc_info_sql_scale),
    Char(isc_info_sql_length),
    Char(isc_info_sql_field),
    Char(isc_info_sql_relation),
    Char(isc_info_sql_owner),
    Char(isc_info_sql_alias),
    Char(isc_info_sql_describe_end)
  );

 describe_select_info:array[0..12] of char =(
    Char(isc_info_sql_select),
    Char(isc_info_sql_describe_vars),
    Char(isc_info_sql_sqlda_seq),
    Char(isc_info_sql_type),
    Char(isc_info_sql_sub_type),
    Char(isc_info_sql_scale),
    Char(isc_info_sql_length),
    Char(isc_info_sql_field),
    Char(isc_info_sql_relation),
    Char(isc_info_sql_owner),
    Char(isc_info_sql_alias),
    Char(frb_info_sql_relation_alias),
    Char(isc_info_sql_describe_end)
  );
  
var
    isc_install_clear_options: Tisc_install_clear_options;
    isc_install_execute: Tisc_install_execute;
    isc_install_get_info: Tisc_install_get_info;
    isc_install_get_message: Tisc_install_get_message;
    isc_install_load_external_text: Tisc_install_load_external_text;
    isc_install_precheck: Tisc_install_precheck;
    isc_install_set_option: Tisc_install_set_option;
    isc_uninstall_execute: Tisc_uninstall_execute;
    isc_uninstall_precheck: Tisc_uninstall_precheck;
    isc_install_unset_option: Tisc_install_unset_option;

implementation
uses FIBConsts;

{$IFDEF LINUX}
const
 HINSTANCE_ERROR=$20;
{$ENDIF}

var
{$IFDEF WINDOWS}
  IBInstallLibrary: THandle;
{$ENDIF}
{$IFDEF LINUX}
  IBInstallLibrary : Pointer;
{$ENDIF}

  vClientLibs:TInterfaceList;


var
    vLibAccess: TRTLCriticalSection;


function GetClientLibrary(const aLibName:string):IIbClientLibrary;
var
  I: Integer;
begin
  EnterCriticalSection(vLibAccess);
  try
    for I := 0 to vClientLibs.Count - 1 do
    if IIbClientLibrary(vClientLibs[i]).LibraryName=aLibName then
    begin
     Result:=IIbClientLibrary(vClientLibs[i])  ; Exit;
    end;
    Result:=TIBClientLibrary.Create(aLibName);
    vClientLibs.Add(Result)
  finally
   LeaveCriticalSection(vLibAccess);
  end;
end;

{$IFDEF WINDOWS}
procedure InitFPU;
var
  Default8087CW: Word;
begin
  asm
    FSTCW Default8087CW
    OR Default8087CW, 0300h
    FLDCW Default8087CW
  end;
end;
{$ENDIF}


{$DEFINE FP_STDCALL}
function isc_install_clear_options_stub(hOption: POPTIONS_HANDLE):MSG_NO;
{$I pFIBMacroComp.inc}
begin
  raise
    EAPICallException.Create(Format(SCantFindApiProc,['isc_install_clear_options',IB_INSTALL_DLL]));
end;

function isc_install_execute_stub(hOption: OPTIONS_HANDLE;
                             src_dir: TEXT;
                             dest_dir: TEXT;
                             status_func: FP_STATUS;
                             status_data: pointer;
                             error_func: FP_ERROR;
                             error_data: pointer;
                             uninstal_file_name: TEXT):MSG_NO;
{$I pFIBMacroComp.inc}
begin
  raise
    EAPICallException.Create(Format(SCantFindApiProc,['isc_install_execute_stub',IB_INSTALL_DLL]));
end;

function isc_install_get_info_stub(info_type :integer;
                              option :OPT;
                              info_buffer : Pointer;

⌨️ 快捷键说明

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