我欲将数据库表封装在类里,但不知效果如何.请大侠看看,有不到之处,多提宝贵意见.
一种方法是将表完全封装在类里,另外一种是提供对数据库表的接口,用的时候再调用,
如:要获得某表的用户名单,有两种方法,
一种是:listBox1.items :=oper1.getList;//数据库表完全封装在类里.
另外一种就是listBox1.items :=oper2.getList(dataModule1.adoQuery1,'姓名');//'姓名'是该表的一个字段.哪种更好?
本虾自学面向对象编程,老想封装数据库表,不知我的做法是否正确,大侠们大力指教.
以下是实际代码,在delphi7+windows98下运行正确.
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,unit2, StdCtrls;type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  Oper1 :TOper;
  oper2 :TOper2;implementation
uses dataUnit;{$R *.dfm}procedure TForm1.FormActivate(Sender: TObject);
begin
  oper1 :=TOper.create(nil);
  with dataModule1.ADOQuery2 do begin
    SQl.Clear;
    SQL.Add('select * from 用户');
    open;
  end;
  oper2 :=TOper2.create(nil);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  oper1.Free;
  oper2.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  listBox1.Items :=oper1.getList;
  listBox2.Items :=oper2.getList(dataModule1.ADOQuery2,'姓名');
end;end.-----------------------------unit Unit2;interface
uses DB,ADODB,classes;type
  TOper =class(TDataset)
  private
    query :TADOQuery;
    FList :TStringList;
  public
    constructor create(Owener: TComponent);override;
    destructor destroy;override;
    function getList: TStringList;
  end;  TOper2 =class(TDataset)
  private
    FList :TStringList;
  public
    constructor create(Owener: TComponent);override;
    destructor destroy;override;
    function getList(aQuery: TADOQuery;aField: String):TStringList;
  end;
implementation
uses dataUnit;{ TOper2 }constructor TOper2.create;
begin
  inherited;
  FList :=TStringList.Create;
end;destructor TOper2.destroy;
begin
  FList.Free;
end;function TOper2.getList(aQuery: TADOQuery; aField: String): TStringList;
begin
  FList.Clear;
  with aQuery do begin
    first;
    while not eof do begin
      FList.Add(fieldByName('姓名').Value );
      next;
    end;
  end;
  result :=FList;
end;{ TOper }constructor TOper.create;
begin
  inherited;
  FList :=TStringList.Create;
  with query do begin
    query :=dataModule1.ADOQuery1;
    query.SQl.Clear;
    query.SQL.Add('select * from 用户');
    query.open;
  end;
end;destructor TOper.destroy;
begin
  FList.free;
end;function TOper.getList: TStringList;
begin
  FList.Clear;
  with query do begin
    first;
    while not eof do begin
      FList.Add(fieldByName('姓名').Value );
      next;
    end;
  end;
  result :=FList;
end;end.