请问一下,如果在一个单元定义一个类描述数据库表中Client表格的字段:
unit ClientField;interfacetype
  TClientField = Class
  private
    FID: Integer;
    FName: String;
    FAddr: String;
    FTel: String;
  public
    property ID: Integer read FID write FID;
    property Name: String read FName write FName;
    property Addr: String read FAddr write FAddr;
    property Tel: String read FTel write FTel;
  end;implementationend.在另外一个单位设计一类
unit Client;interface
  uses ClientField;
type
  TClient = class
  private
    //......
  public
    //......
    procedure Add(AClientField: TClientField);
    procedure Modify(AClientField: TClientField);
    //......
  end;implementationend.TClient类Add过程是向Client表增加一条记录,Modify是修改记录。假如,在数据库中Client表格增加字段,比如性别(sex),在ClientField单元中TclientField类增加Fsex变量和Sex属性,要使Client单元中的TClient代码不变,就能适应Client表格字段的增件,Add,Modify过程要如何设计?

解决方案 »

  1.   

    如果TClient需要操作ClientField的细节(比如具体某个属性),那么将这个部分的操作代码可以如下
    TClientField = class
      proptected
         procedure CalcField;virtual;
         procedure OnNew;virtual;
      end;TCustomer = class(TClientField)
    ....
      protected
         procedure CalcField;override;
         procedure OnNew;override;  public
        property ID: Integer read FID write FID;
        property Name: String read FName write FName;
        property Addr: String read FAddr write FAddr;
        property Tel: String read FTel write FTel;
      end;
       
      
    TClient = class     public
        //......
        procedure Add(AClientField: TClientField);
        procedure Modify(AClientField: TClientField);
        //......
      end;...
    procedure TClient.Add(...)
    begin
    ...
    ..
    AClientField.OnNew(...);
    ...
    ...
      
    end;
      

  2.   

    TClientField = Class
      private
        FID: Integer;
        FName: String;
        FAddr: String;
        FTel: String;
      public
        property ID: Integer read FID write FID;
        property Name: String read FName write FName;
        property Addr: String read FAddr write FAddr;
        property Tel: String read FTel write FTel;
      end;如果你这个类仅仅是描述一个数据结构,用record不就完乐.另外,按照你目前的思路,你希望TClient中的代码不变,估计不行..不过可以通过继承的方式尽量代码复用
      

  3.   

    to wudi_1982不是有些函数可以取得一个类中的属性的名称,值和类型吗?
    让ClientField成为了类,属性对应Client表中的字段,名称也一致,或者符合某个规律。如果是记录类型就没有办法取得其中字段名称和值还有类型吧
      

  4.   

    to netfly(支点)
    肯定会用到具体属性的。请问你的OnNew是实现什么功能。
      

  5.   

    onnew 就是用来给你操作具体属性的细节
      

  6.   

    to netfly(支点)
    能不能写下OnNew的代码?
    让我参考下
    谢谢!!!