我先建立一个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.
delphi面向对象
刘艺的书
应该学到不少
OO是仁者见仁,智者见智