我先建立一个mainOper的unit,然后在mainUnit中生成一个aMainOper :TMainOperation;
以后对该数据库的操作都是针对aMainOper来进行。本文中删除了一些与问题没有直接关系的代码。
几点请教:
1.这是面向对象的数据库操作吗?
2.如果我要继承mainOper生成子类,对mainOper的设计要注意什么?
3.哪位大侠有面向对象的数据库源程序可以作为教材的?本人一直找不到面向对象理论与一个完整数据库操作的文件。请大侠不吝指教,我的email是[email protected] mainOper;
  type
    TMainOperation =class(TObject)
    private
      FName :string; //表的名称:类别或具体项目
      FQuery :TADOQuery;
      FCommand :TADOCommand;
      FRecordCount :integer;
    public
      constructor create;
      procedure openQuery(aSql :string);//按aSql要求打开
      procedure append(aDate :TDateTime;aUser,aClass,aName,aYes,aStory :string;aMoney :double);
      procedure openQueryDate(startDate,stopDate :TDatetime);//按日期打开
      property name :string read FName write FName;
      property dataSet :TADOQuery read FQuery;
      destructor destroy;override;
    end;{ TmainOperation }
constructor TMainOperation.create;
begin
  FQuery :=TADOQuery.Create(nil);
  FCommand :=TADOCommand.create(nil);
  Fquery.Connection :=data.ADOC;
  FCommand.Connection :=data.ADOC;
  FName :='主表';
end;procedure TmainOperation.openQuery(aSql :string);
begin
  with Fquery do begin
    SQL.Clear;
    SQL.Add(aSql);
    SQL.Add(mainOperOrderBy);
    Open;
    FRecordCount :=RecordCount;
  end;
end;procedure TmainOperation.openQueryDate(startDate,stopDate :TDatetime);
begin
  with Fquery do begin
    SQL.Clear;
    SQL.Add('select * from 主表 where 日期 between aStartDate and aStopDate');
    SQL.Add(mainOperOrderBy);
    parameters.ParamByName('aStartDate').Value :=startDate;
    parameters.ParamByName('aStopDate').Value :=stopDate;
    Open;
    FRecordCount :=RecordCount;
  end;
end;procedure TmainOperation.append(aDate :TDateTime;aUser,aClass,aName,aYes,aStory :string;aMoney :double);
begin
  with FQuery do begin
    Append;
    fieldValues['日期'] :=aDate;
    fieldValues['用户'] :=aUser;
    fieldValues['类别'] :=aClass;
    fieldValues['金额'] :=aMoney;
    fieldValues['具体项目'] :=aName;
    fieldValues['摘要'] :=aStory;
    post;
  end;
end;destructor TmainOperation.destroy;
begin
  FQuery.Free;
  FCommand.Free;
  inherited;
end;end.以下是主界面文件unit mainUnit;
type
  TmainForm = class(TForm)
    outDS: TDataSource;
var
  mainForm: TmainForm;
  aMainOper :TMainOperation;
  startDate,stopDate :TDatetime;implementation
{$R *.dfm}
procedure TmainForm.FormActivate(Sender: TObject);
begin
  aMainOper :=TMainOperation.create;
  with aMainOper do begin
    openQueryDate(now-30,now);   
    dataset.First;
  end;
 
procedure TmainForm.outGridMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if button =mbRight then
    if not aMainOper.dataSet.IsEmpty then     
      aMainOper.dataSet.Delete;    
end;end.

解决方案 »

  1.   

    1.我觉得数据库面向对象重点在于在数据库里使用对象,比如:嵌套表,对象表等等,你把前端的程序有意写在一个类然后来调用,这种意义好像不大,因为即使你写在mainUnit里,也是存在于TmainForm类里面的。2.如果要继承mainOper类,应该设计好各函数或过程的接口,便于扩展。尽量采用SQL语句操作数据库(如果能把SQL语句封装到数据库最好)。3.建议看看Oracle面向对象这一块的书籍。My Email:[email protected]
      

  2.   

    建议你看看
    delphi面向对象
    刘艺的书
    应该学到不少
    OO是仁者见仁,智者见智