首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

Delphi数据库面向对象编程范例

打印文章

分享到:
{*******************************************************}
{ }
{ 继承范例 }
{ }
{ }
{ 版权所有 (C) 2000,2001 真光软件 }
{*******************************************************}
unit clsPerson;
{*******************************************************
项目:
模块:TPerson,TTeacher,TStudent
描述:OOP范例类
版本:1.0
日期:2001.9.23
作者:黄洪烈
更新:2001.9.23
TODO:
*******************************************************}
interface
uses
  clsApplication,Forms,classes,Dialogs;
const
  C_tblStudent='student.db';//学生类表名
  C_tblTeacher='teacher.db';//老师类表名
type
  TPerson=class(TDbRecordset)
  private
    FTelephone: string;
    FId: string;
    FName: string;
    function GetId: string;
    function GetName: string;
    function GetTelephone: string;
  protected
     procedure BindFieldValues;virtual;//设置字段值
  public
    property Id:string read GetId write FId;
    property Name:string read GetName write FName;
    property Telephone:string read GetTelephone write FTelephone;
    procedure ShowId;//显示编码
  end;
  TStudent=class(TPerson)
  private
    FTotalScore: integer;
    function GetTotalScore: integer;
  protected
    procedure BindFieldValues;override;//设置字段值
  public
    constructor Create(AOwner:TComponent);override;
    function Post:boolean;override;
    property TotalScore:integer read GetTotalScore write FTotalScore;
  end;
  TTeacher=class(TPerson)
  private
    FSubject: string;
    function GetSubject: string;
  protected
    procedure BindFieldValues;override;//设置字段值
  public
    constructor Create(AOwner:TComponent);override;
    function Post:boolean;override;
    property Subject:string read GetSubject write FSubject;
  end;

implementation

{ TPerson }

{设置字段值}
procedure TPerson.BindFieldValues;
begin
  FTable.Edit;
  FTable.FieldByName('Id').AsString:=FId;
  FTable.FieldByName('Name').AsString:=FName;
  FTable.FieldByName('Telephone').AsString:=FTelephone;
end;

{定义字段属性}
function TPerson.GetId: string;
begin
  FId:=FTable.FieldByName('Id').AsString;
  Result:=FId;
end;

function TPerson.GetName: string;
begin
  FName:=FTable.FieldByName('Name').AsString;
  Result:=FName;
end;

function TPerson.GetTelephone: string;
begin
  FTelephone:=FTable.FieldByName('Telephone').AsString;
  Result:=FTelephone;
end;

{显示编码}
procedure TPerson.ShowId;
var
  IdCaption,Id:string;
begin
  Id:=FTable.FieldByName('Id').AsString;
  if FTable.TableName=C_tblStudent then
    IdCaption:='Student Id:'
  else if FTable.TableName=C_tblTeacher then
    IdCaption:='Teacher Id:';
  ShowMessage(IdCaption+Id);
end;

{ TStudent }

{设置字段值}
procedure TStudent.BindFieldValues;
begin
  inherited;
  FTable.FieldByName('TotalScore').AsInteger:=FTotalScore;
end;

constructor TStudent.Create(AOwner: TComponent);
begin
  inherited;
  FTable.TableName:=C_tblStudent;
  FTable.Active:=True;
end;

{定义字段属性}
function TStudent.GetTotalScore: integer;
begin
  FTotalScore:=FTable.FieldByName('TotalScore').AsInteger;
  Result := FTotalScore;
end;

{保存记录}
function TStudent.Post: boolean;
begin
  FTable.Insert;
  BindFieldValues;
  Result:=Inherited Post;
end;

{ TTeacher }

{设置字段值}
procedure TTeacher.BindFieldValues;
begin
  inherited;
  FTable.FieldByName('Subject').AsString:=FSubject;
end;

constructor TTeacher.Create(AOwner: TComponent);
begin
  inherited;
  FTable.TableName:=C_tblTeacher;
  FTable.Active:=True;  
end;

{定义字段属性}
function TTeacher.GetSubject: string;
begin
  FSubject:=FTable.FieldByName('Subject').AsString;
  Result := FSubject;
end;

{保存记录}
function TTeacher.Post: boolean;
begin
  FTable.Insert;
  BindFieldValues;
  Result:=Inherited Post;
end;

end.

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章