2

这是我将用户添加到 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 文件。

4

2 回答 2

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;

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

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

于 2012-12-18T08:10:35.613 回答
1

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

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

于 2012-12-18T08:43:01.907 回答