About TDatasetField in TADODataset

From: landina (tangtj_at_mail.nbptt.zj.cn)
Date: 03/24/04


Date: Wed, 24 Mar 2004 22:42:48 +0800

i use recordset to send data between two objects in multi-tier,i want use
TDatasetField include detail data in runtime.

source code :

var
  fldLoginID: TStringField;
  fldFullName: TStringField;
  fldPassword: TStringField;
  fldDescription: TStringField;
  fldNextMustModifyPassword: TIntegerField;
  fldNotAllowModifyPassword: TIntegerField;
  fldAlwaysValidate: TIntegerField;
  fldStopped: TIntegerField;
  fldIsAdministrator: TIntegerField;
  fldEnterpriseID: TStringField;
  fldRolesListDataset: TDatasetField; //用户属于的用户组信息

//用户角色子表
  fldAutherized: TIntegerField;
  fldRolesID: TStringField;
  fldRolesName: TStringField;
  fldRolesDescription: TStringField;
begin
  with adoUser do
    begin
      fldLoginID := TStringField.Create(adoUser);
      fldLoginID.FieldName := 'LoginID';
      fldLoginID.DisplayLabel := '用户名';
      fldLoginID.Size := 20;
      fldLoginID.DataSet := adoUser;
      fldLoginID.Required := true;

      fldFullName := TStringField.Create(adoUser);
      fldFullName.FieldName := 'FullName';
      fldFullName.DisplayLabel := '用户全名';
      fldFullName.DataSet := adoUser;
      fldFullName.Size := 20;
      fldFullName.Required := true;

      fldPassword := TStringField.Create(adoUser);
      fldPassword.FieldName := 'Password';
      fldPassword.DataSet := adoUser;
      fldPassword.DisplayLabel := '用户口令';
      fldPassword.EditMask := '*';
      fldPassword.Size := 32;

      fldDescription := TStringField.Create(adoUser);
      fldDescription.FieldName := 'Description';
      fldDescription.DataSet := adoUser;
      fldDescription.DisplayLabel := '用户描述';
      fldDescription.Size := 200;

      fldNextMustModifyPassword := TIntegerField.Create(adoUser);
      with fldNextMustModifyPassword do
        begin
          FieldName := 'NextMustModifyPassword';
          DisplayLabel := '用户下次登录时必须修改口令';
          MinValue := 0;
          MaxValue := 1;
          DataSet := adoUser;
        end;

      fldNotAllowModifyPassword := TIntegerField.Create(adoUser);
      with fldNotAllowModifyPassword do
        begin
          FieldName := 'NotAllowModifyPassword';
          DisplayLabel := '用户不允许修改口令';
          MinValue := 0;
          MaxValue := 1;
          DataSet := adoUser;
        end;

      fldAlwaysValidate := TIntegerField.Create(adoUser);
      with fldAlwaysValidate do
        begin
          FieldName := 'AlwaysValidate';
          DisplayLabel := '用户口令永久有效';
          MinValue := 0;
          MaxValue := 1;
          DataSet := adoUser;
        end;

      fldStopped := TIntegerField.Create(adoUser);
      with fldStopped do
        begin
          FieldName := 'Stopped';
          DisplayLabel := '帐号是否被停用';
          MinValue := 0;
          MaxValue := 1;
          DataSet := adoUser;
        end;

      fldIsAdministrator := TIntegerField.Create(adoUser);
      with fldIsAdministrator do
        begin
          FieldName := 'IsAdministrator';
          DisplayLabel := '是否系统管理员';
          MinValue := 0;
          MaxValue := 1;
          DataSet := adoUser;
        end;

      fldEnterpriseID := TStringField.Create(adoUser);
      with fldEnterpriseID do
        begin
          FieldName := 'EnterpriseID';
          DisplayLabel := '单位编号';
          Size := 20;
          DataSet := adoUser;
        end;

//set detail struct
      fldRolesLisTDataset := TDatasetField.Create(adoUser);
      fldRolesLisTDataset.FieldName := 'RolesList';
      fldRolesLisTDataset.DisplayLabel := '角色列表';
      fldRolesListDataset.DataSet := adoUser

      fldAutherized := TIntegerField.Create(adoRoles);
      with fldAutherized do
        begin
          FieldName := 'Autherized';
          DisplayLabel := '授权标志';
          MaxValue := 1;
          MinValue := 0;
          DefaultExpression := '0';
          Dataset := adoRoles;
        end;

      fldRolesID := TStringField.Create(adoRoles);
      with fldRolesID do
        begin
          FieldName := 'RolesID';
          DisplayLabel := '角色编号';
          Size := 20;
          Dataset := adoRoles;
        end;

      fldRolesName := TStringField.Create(adoRoles);
      with fldRolesName do
        begin
          FieldName := 'RolesName';
          DisplayLabel := '角色名称';
          Size := 40;
          Dataset := adoRoles;
        end;
      adoRoles.CreateDataSet;

      adoUser.CreateDataSet;

///////
   when i set datasetfield,application error, why?

   please tell me ,
   thank you

    e-mail:tangtj@mail.nbptt.zj.cn

rewards,
landina