自写delphi基类(属性是packed record),继承基类之后。属性没法用,出现‘Left side cannot be assigned to’

zgplyl 2010-01-18 11:06:22
我写了一个基类如下:
type
T_T_Class = packed record //部门组织表
FClassId: integer;//部门内码
FOrganId: integer;//机构内码
FOrganName: string[50];//部门名称
FOrganHideFlag: boolean;//部门隐藏标志 0开1关
end;

type
TDataBase = class(TInterfacedObject)
private
FADOC : TADOConnection;
FADOQ : TADOQuery;
FDS : TDatasource;
FConnectionString : string;
FT_Class: T_T_Class;//部门组织表
procedure SetT_Class(const Value: T_T_Class);
public

function Checkeed: Boolean;
procedure InitQuery(InputQuery: TADOQuery; QueryString: String);
function OpenDataBase():TDataSource;overload;
function OpenDataBase(ConnectionString: String):TDataSource;overload;
procedure CloseDataBase();
function InsertRecord(MyTabel:T_Tabel;Reco:T_T_Organ):boolean;overload;

function QueryRecord(value:string):TADOQuery;virtual;abstract;
function DeleteRecord(Value : Integer):boolean;virtual;abstract;
function AddRecord(Value : T_T_Organ):boolean ;virtual;abstract; //
function SaveRecord(Value : T_T_Organ):boolean;virtual;abstract; //
procedure NextRecord;virtual;abstract; //
procedure PriorRecord; virtual;abstract; //
function IsLock():boolean;virtual;abstract; //
function GetQuery: TADOQuery;overload;virtual; //
function GetExecuteScalar(QueryString: String): Variant;overload;virtual; //
function GetExecuteNoQuery(ExecuteSQL:String):Boolean;overload;virtual; //

property T_Class: T_T_Class read FT_Class write SetT_Class; // 这里把T_T_Class作为类的一个属性;
end;

然后继承基类(不在同一个单元里):

type
TFundPlanManClass = class (TDataBase, IMyInterEverdayFundExpend, IMyInterEnterPlanFunds)
public
function test(): string;
function test1():string;
function test2():string;
end;

function TFundPlanManClass.test: string;
var
a : TEnterPlanFundsClass;

begin
a := TEnterPlanFundsClass.Create;

a.T_Organ.FOrganId:=1; //这里为什么会出错 错误提示是: Left side cannot be assigned to
end;
...全文
606 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianxueshan 2010-01-26
  • 打赏
  • 举报
回复
with a.T_Class do
FClassId:=1
yyfhz 2010-01-25
  • 打赏
  • 举报
回复
不用属性,直接用public变量应该可以
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
用对象封装数据,有例子吗?
Harryfin 2010-01-18
  • 打赏
  • 举报
回复
1、可以把原来属性的记录先读出来,改完再写回去
2、我一般习惯用对象封装数据,因为可以用继承来抽象子类数据,同时也没有这个访问上的限制。不过自己要注意点对象生命周期的管理。
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
Harryfin兄弟,哪有没有更好的办法呀
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
wzwcn高手,这样可以,但能否说一下原因,还有,aClass.FClassId 不只这一个,还有FOrganId:
FOrganName: FOrganHideFlag 如果这些不赋值,直接执行a.T_Class:=aClass; 哪么没有赋值的是否默认为空呢?谢谢
Harryfin 2010-01-18
  • 打赏
  • 举报
回复
记录作为属性的时候,是不可以直接设置里面的值的
dd_zhouqian 2010-01-18
  • 打赏
  • 举报
回复
var ttclass:T_T_Class;
a:TEnterPlanFundsClass;
begin
a := TEnterPlanFundsClass.Create;
ttclass.FClassId:=1;
a.T_Class:=ttclass;
end;
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
我试试
wzwcn 2010-01-18
  • 打赏
  • 举报
回复
刚才没仔细看你的代码,你应该这样写,你不能直接那样赋值的:
function TFundPlanManClass.test: string;
var
a : TEnterPlanFundsClass;
aClass: T_T_Class;
begin
a := TEnterPlanFundsClass.Create;
aClass.FClassId:=1;
a.a.T_Class:=aClass;
//...
end;
kfcoffe 2010-01-18
  • 打赏
  • 举报
回复
TEnterPlanFundsClass 是从哪里继承下来地?里是否确实含有此T_Class属性?
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
高手们,请帮忙,分不是问题,不够再加。只要能解决问题。
wzwcn 2010-01-18
  • 打赏
  • 举报
回复
按你那样说应该没问题,你可以自己写个小程序试验一下
ok1411 2010-01-18
  • 打赏
  • 举报
回复
代码真乱
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
我在基类里面定义了一个记录集(packed record),然后我把这个记录定义成了一个属性。然后在继承的类里面访问这个记录集里的其中一个属性。然后赋值。
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
我定义了一个记录集:请您好好看一下。谢谢你。
type
T_T_Class = packed record //部门组织表
FClassId: integer;//部门内码
FOrganId: integer;//机构内码
FOrganName: string[50];//部门名称
FOrganHideFlag: boolean;//部门隐藏标志 0开1关
end;
wzwcn 2010-01-18
  • 打赏
  • 举报
回复
就是这个,你都不看清楚FClassId是属性还是函数还是什么就给他赋值了
zgplyl 2010-01-18
  • 打赏
  • 举报
回复
最后一句是这个,刚写错了:a.T_Class.FClassId:=1;
wzwcn 2010-01-18
  • 打赏
  • 举报
回复
你的FOrganId应该是函数之类的,而你给它赋值了
wzwcn 2010-01-18
  • 打赏
  • 举报
回复
不知道你的TEnterPlanFundsClass的T_Organ.FOrganId是什么,自己看一下
加载更多回复(4)

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧