在Delphi中使用Interbase Api

时间:2012-12-18 07:41:12

标签: delphi

这是我将用户添加到Interbase安全数据库的Delphi代码

uses 
  IBHeader,IBExternals

var
  Form7: TForm7;
  userData: TUserSecData;
  userDataPtr: PUserSecData;
  status: array[0..19] of ISC_STATUS;
  isc_status: PISC_STATUS;

procedure TForm7.Create_UserClick(Sender: TObject);
begin
  { setup isc_status pointer }
  isc_status :=@status;
  { setup user data pointer to point to user data structure }
  userDataPtr :=@userData;
  { setup user data structure }
  userData.user_name :='aseem';

  userData.password :='xxxxxxx';

  userData.protocol :=sec_protocol_local;

  userData.dba_user_name :='SYSDBA';

  userData.dba_password :='xxxxxxx'; { Don_t hardcode this }

  userData.first_name :='asa';

  userData.last_name :='sad';

  userData.sec_flags :=sec_password_spec or sec_dba_user_name_spec or
    sec_dba_password_spec or sec_first_name_spec or sec_last_name_spec;

  { add user to security database }
  isc_add_user(isc_status,userDataPtr);

end;

但有一个错误,如

  

isc_add_user(isc_status,userDataPtr);

     在IBheader.pas,IBExternals

中找不到

功能

请告诉我这段代码中的问题是什么?

我正在使用Delphi 2007专业版,我正在使用CodeGear内源文件夹中的IBheader.pas,IBExternals.pas文件。

2 个答案:

答案 0 :(得分:2)

您可能想要使用IBIntf.pas中定义的界面:

uses IBHeader, IBExternals, IBIntf;

procedure TMyForm.RegisterNewUser;
var
  status: ISC_STATUS;
  status_vector: array[0..19] of ISC_STATUS;
  user_sec_data: UserSecData;
  gds: IGDSLibrary; 
begin
  //setup the user info and then
  ...
  //call the function
  gds := GetGDSLibrary;
  gds.LoadLibrary;
  try
    status := gds.isc_add_user(@status_vector[0], @user_sec_data);
    //check the status and act accordingly
  finally
    gds.FreeLibrary;
  end;
end;

或者您可能希望使用TIBSecurityService,它是IBX的一部分,通过调用它的AddUser方法,提供您正在使用的标头的相同库。

或者,在现代Interbase中,您可能只想执行CREATE USER SQL语句来执行该操作。

答案 1 :(得分:1)

下载 Unified Interbase 库并从中复制所有必需的API声明

TLama也建议这篇文章:http://edn.embarcadero.com/article/25831