看到近期很多人都在讨论Delphi的OO数据库开发,我也来凑凑热闹。
昨天一个上午看来看关于O/R Mapping 的介绍,都是用Java描述的,少数用c#描述的,就是没有Delphi的,于是乎我大胆写了下面的代码。如果把下面的代码中的那些的配置工作放到XML文件中,再使用delphi里边的反射机制(在Delphi里是RTTI吧?)作出来的是不是就是 O/R Mapping 了?
Kao,现在最多只能放100分了,那大家多多光临我的小站吧:
http://lincosoft.go.nease.net基础类代码
type
TORBase = class(TObject)
private
FDataSet: TDataSet;
procedure FSetDataSet(AValue: TDataSet);
function FGetRecordCount: integer;
public
constructor Create;
destructor Destroy;override;
procedure Setter(AName: string;AValue: Variant);virtual;
function Getter(AName: string): Variant;virtual;
procedure Connnect;virtual;
procedure Insert;virtual;//添加记录
procedure Delete;virtual;//删除记录
procedure First;virtual;//第一条记录
procedure Last;virtual;//最后一条记录
procedure Next;virtual;//下一条记录
procedure Prior;virtual;//前一条记录
procedure Post;virtual;//保存记录
procedure Cancel;virtual;
published
property DataSet: TDataSet read FDataSet write FSetDataSet;
property RecordCount: Integer read FGetRecordCount;
end;implementationconstructor TORBase.Create;
begin
FDataSet := TDataSet.Create(nil);
end;destructor TORBase.Destroy;
begin
inherited;
FDataSet.Free;
end;procedure TORBase.FSetDataSet(AValue: TDataSet);
begin
FDataSet := AValue;
end;function TORBase.FGetRecordCount: Integer;
begin
result := FDataSet.RecordCount;
end;procedure TORBase.Setter(AName: string;AValue: Variant);
begin
FDataSet.FieldByName(AName).AsVariant := AValue;
end;function TORBase.Getter(AName: string): Variant;
begin
result := FDataSet.FieldByName(AName).AsVariant;
end;procedure TORBase.Connnect;
begin
FDataSet.Open;
end;procedure TORBase.Insert;
begin
FDataSet.Insert;
end;procedure TORBase.Delete;
begin
FDataSet.Delete;
end;procedure TORBase.First;
begin
FDataSet.First;
end;procedure TORBase.Last;
begin
FDataSet.Last;
end;procedure TORBase.Next;
begin
FDataSet.Next;
end;procedure TORBase.Prior;
begin
FDataSet.Prior;
end;procedure TORBase.Post;
begin
FDataSet.Post;
end;procedure TORBase.Cancel;
begin
FDataSet.Cancel;
end;基类
type
TORBase = class(TObject)
private
FDataSet: TDataSet;
procedure FSetDataSet(AValue: TDataSet);
function FGetRecordCount: integer;
public
constructor Create;
destructor Destroy;override;
procedure Setter(AName: string;AValue: Variant);virtual;
function Getter(AName: string): Variant;virtual;
procedure Connnect;virtual;
procedure Insert;virtual;//添加记录
procedure Delete;virtual;//删除记录
procedure First;virtual;//第一条记录
procedure Last;virtual;//最后一条记录
procedure Next;virtual;//下一条记录
procedure Prior;virtual;//前一条记录
procedure Post;virtual;//保存记录
procedure Cancel;virtual;
published
property DataSet: TDataSet read FDataSet write FSetDataSet;
property RecordCount: Integer read FGetRecordCount;
end;implementationconstructor TORBase.Create;
begin
FDataSet := TDataSet.Create(nil);
end;destructor TORBase.Destroy;
begin
inherited;
FDataSet.Free;
end;procedure TORBase.FSetDataSet(AValue: TDataSet);
begin
FDataSet := AValue;
end;function TORBase.FGetRecordCount: Integer;
begin
result := FDataSet.RecordCount;
end;procedure TORBase.Setter(AName: string;AValue: Variant);
begin
FDataSet.FieldByName(AName).AsVariant := AValue;
end;function TORBase.Getter(AName: string): Variant;
begin
result := FDataSet.FieldByName(AName).AsVariant;
end;procedure TORBase.Connnect;
begin
FDataSet.Open;
end;procedure TORBase.Insert;
begin
FDataSet.Insert;
end;procedure TORBase.Delete;
begin
FDataSet.Delete;
end;procedure TORBase.First;
begin
FDataSet.First;
end;procedure TORBase.Last;
begin
FDataSet.Last;
end;procedure TORBase.Next;
begin
FDataSet.Next;
end;procedure TORBase.Prior;
begin
FDataSet.Prior;
end;procedure TORBase.Post;
begin
FDataSet.Post;
end;procedure TORBase.Cancel;
begin
FDataSet.Cancel;
end;业务实体类 TPerson = class(TORBase)
public
procedure Set_Name(AValue: string);
function Get_Name: string;
published
property Name: string read Get_Name write Set_Name;
end;
procedure TPerson.Set_Name(AValue: string);
begin
Setter('Name',AValue);
end;function TPerson.Get_Name: string;
begin
result := Getter('Name');
end;界面:procedure TForm1.FormCreate(Sender: TObject);
begin
FPerson := TPerson.Create;
FPerson.DataSet := ADOTable1;
FPerson.Connnect;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
FPerson.Next;
Edit1.Text := FPerson.Name;
end;procedure TForm1.FormDeactivate(Sender: TObject);
begin
FPerson.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
FPerson.Prior;
Edit1.Text := FPerson.Name;
end;
昨天一个上午看来看关于O/R Mapping 的介绍,都是用Java描述的,少数用c#描述的,就是没有Delphi的,于是乎我大胆写了下面的代码。如果把下面的代码中的那些的配置工作放到XML文件中,再使用delphi里边的反射机制(在Delphi里是RTTI吧?)作出来的是不是就是 O/R Mapping 了?
Kao,现在最多只能放100分了,那大家多多光临我的小站吧:
http://lincosoft.go.nease.net基础类代码
type
TORBase = class(TObject)
private
FDataSet: TDataSet;
procedure FSetDataSet(AValue: TDataSet);
function FGetRecordCount: integer;
public
constructor Create;
destructor Destroy;override;
procedure Setter(AName: string;AValue: Variant);virtual;
function Getter(AName: string): Variant;virtual;
procedure Connnect;virtual;
procedure Insert;virtual;//添加记录
procedure Delete;virtual;//删除记录
procedure First;virtual;//第一条记录
procedure Last;virtual;//最后一条记录
procedure Next;virtual;//下一条记录
procedure Prior;virtual;//前一条记录
procedure Post;virtual;//保存记录
procedure Cancel;virtual;
published
property DataSet: TDataSet read FDataSet write FSetDataSet;
property RecordCount: Integer read FGetRecordCount;
end;implementationconstructor TORBase.Create;
begin
FDataSet := TDataSet.Create(nil);
end;destructor TORBase.Destroy;
begin
inherited;
FDataSet.Free;
end;procedure TORBase.FSetDataSet(AValue: TDataSet);
begin
FDataSet := AValue;
end;function TORBase.FGetRecordCount: Integer;
begin
result := FDataSet.RecordCount;
end;procedure TORBase.Setter(AName: string;AValue: Variant);
begin
FDataSet.FieldByName(AName).AsVariant := AValue;
end;function TORBase.Getter(AName: string): Variant;
begin
result := FDataSet.FieldByName(AName).AsVariant;
end;procedure TORBase.Connnect;
begin
FDataSet.Open;
end;procedure TORBase.Insert;
begin
FDataSet.Insert;
end;procedure TORBase.Delete;
begin
FDataSet.Delete;
end;procedure TORBase.First;
begin
FDataSet.First;
end;procedure TORBase.Last;
begin
FDataSet.Last;
end;procedure TORBase.Next;
begin
FDataSet.Next;
end;procedure TORBase.Prior;
begin
FDataSet.Prior;
end;procedure TORBase.Post;
begin
FDataSet.Post;
end;procedure TORBase.Cancel;
begin
FDataSet.Cancel;
end;基类
type
TORBase = class(TObject)
private
FDataSet: TDataSet;
procedure FSetDataSet(AValue: TDataSet);
function FGetRecordCount: integer;
public
constructor Create;
destructor Destroy;override;
procedure Setter(AName: string;AValue: Variant);virtual;
function Getter(AName: string): Variant;virtual;
procedure Connnect;virtual;
procedure Insert;virtual;//添加记录
procedure Delete;virtual;//删除记录
procedure First;virtual;//第一条记录
procedure Last;virtual;//最后一条记录
procedure Next;virtual;//下一条记录
procedure Prior;virtual;//前一条记录
procedure Post;virtual;//保存记录
procedure Cancel;virtual;
published
property DataSet: TDataSet read FDataSet write FSetDataSet;
property RecordCount: Integer read FGetRecordCount;
end;implementationconstructor TORBase.Create;
begin
FDataSet := TDataSet.Create(nil);
end;destructor TORBase.Destroy;
begin
inherited;
FDataSet.Free;
end;procedure TORBase.FSetDataSet(AValue: TDataSet);
begin
FDataSet := AValue;
end;function TORBase.FGetRecordCount: Integer;
begin
result := FDataSet.RecordCount;
end;procedure TORBase.Setter(AName: string;AValue: Variant);
begin
FDataSet.FieldByName(AName).AsVariant := AValue;
end;function TORBase.Getter(AName: string): Variant;
begin
result := FDataSet.FieldByName(AName).AsVariant;
end;procedure TORBase.Connnect;
begin
FDataSet.Open;
end;procedure TORBase.Insert;
begin
FDataSet.Insert;
end;procedure TORBase.Delete;
begin
FDataSet.Delete;
end;procedure TORBase.First;
begin
FDataSet.First;
end;procedure TORBase.Last;
begin
FDataSet.Last;
end;procedure TORBase.Next;
begin
FDataSet.Next;
end;procedure TORBase.Prior;
begin
FDataSet.Prior;
end;procedure TORBase.Post;
begin
FDataSet.Post;
end;procedure TORBase.Cancel;
begin
FDataSet.Cancel;
end;业务实体类 TPerson = class(TORBase)
public
procedure Set_Name(AValue: string);
function Get_Name: string;
published
property Name: string read Get_Name write Set_Name;
end;
procedure TPerson.Set_Name(AValue: string);
begin
Setter('Name',AValue);
end;function TPerson.Get_Name: string;
begin
result := Getter('Name');
end;界面:procedure TForm1.FormCreate(Sender: TObject);
begin
FPerson := TPerson.Create;
FPerson.DataSet := ADOTable1;
FPerson.Connnect;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
FPerson.Next;
Edit1.Text := FPerson.Name;
end;procedure TForm1.FormDeactivate(Sender: TObject);
begin
FPerson.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
FPerson.Prior;
Edit1.Text := FPerson.Name;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货