在三层结构中!
有两个类,其中第一个类从TRemoteDataModule继承(类名为:A)
该类中放了两个控件,一个SQLConnection , 一个SQLQuery!该类中没有任何其它过程或函数;第二个类(类名为B)从A继承,该类包含一个构造函数和析构函数,
并新增了部分函数或过程,如执行SQL语句的公共函数或过程(该过程有使用到父类的SQLConnection 和SQLQuery);现在出现了两个问题:
1:将B设置为自动创建时,构造函数一直不会得到执行;
2:将B设置为手工创建时,当 B := TB.CREATE()后(此时执行了构造函数),但在B类的过程中又无法访问A类中的SQLConnection和SQLQuery时,因其值为NIL?
高手帮忙解决一下!
有两个类,其中第一个类从TRemoteDataModule继承(类名为:A)
该类中放了两个控件,一个SQLConnection , 一个SQLQuery!该类中没有任何其它过程或函数;第二个类(类名为B)从A继承,该类包含一个构造函数和析构函数,
并新增了部分函数或过程,如执行SQL语句的公共函数或过程(该过程有使用到父类的SQLConnection 和SQLQuery);现在出现了两个问题:
1:将B设置为自动创建时,构造函数一直不会得到执行;
2:将B设置为手工创建时,当 B := TB.CREATE()后(此时执行了构造函数),但在B类的过程中又无法访问A类中的SQLConnection和SQLQuery时,因其值为NIL?
高手帮忙解决一下!
解决方案 »
- 麻烦帮忙看下SQL查询分析器连接不上SQL
- 使用trayicon,导致无法关机,注销和重启。
- 那位大虾给我写个小算法,100分献上,不够在给!~
- ADO+Access 日期时间类型字段的问题, 急!!!
- 烦!我用流的方式把WORD文件插入到数据库中的IMAGE类型字段,如何把把该字段的内容读出来,我用SAVETOFILE生成一个指定的WORD文件,但打
- 可以象控制Word那样控制Flash么?
- 怎么样调用计划任务程序
- 如何判断日期?谢谢各位啦
- OleVariant与Pointer的转换问题
- 怎样用Delphi发邮件(在smtp需要验证的情况下)
- 想知道买正版Dephi的代理商
- 高分请教: 在fastreport 中如何将报表内容保存在数据库中而不是.frf文件中
TDMEventLog = class(TRemoteDataModule)
SQLCon: TSQLConnection;
SQLQueryComm: TSQLQuery;
private
protected
constructor Create ; virtual;
Destructor Destroy ; override;
public
end;implementation{$R *.dfm}end.type
TDMDataDirect = class(TDMEventLog)
private
FDataSetStringList: TStringList;
protected
procedure ExecSQL(const SQLStr : String ; ExecType : Byte);
public
Constructor create;override;
destructor destroy;override;
published
property DataSetStringList : TStringList read FDataSetStringList;
end;
var
DMDataDirect: TDMDataDirect;
implementation{$R *.dfm}
constructor TDMDataDirect.create;
begin
FDataSetStringList := TStringList.Create;
end;destructor TDMDataDirect.destroy;
begin
FreeAndNil(FDataSetStringList);
inherited;
end;procedure TDMDataDirect.ExecSQL(const SQLStr : String ; ExecType : Byte);
begin
//公共SQL执行过程,该过程有使用到父类的SQLCon,SQLQueryComm;
//并将返回的结果组成字符串存入于FDataSetStringList中;
end;
问题描述:
一:当我通过ALT+SHIFT+F11键,将TDMEventLog,TDMDataDirect类都设置为Auto Create Forms 时,
程序能正常启动,TDMDataDirect类中的构造函数为什么一直不会执行;
此时通过 DMDataDirect.ExecSQL('select * from aaa',1) 能正确的执行SQL语句;
但由于没有对FDataSetStringList进行创建,所以无法在ExecSQL过程中使用该成员;
二:当我通过ALT+SHIFT+F11键,将TDMEventLog,TDMDataDirect类都设置为Available Forms 后,
通过
var x : TDMDataDirect;
begin
x := TDMDataDirect.create();//此时执行了构造函数;
x.exec('select * from aaa',1);
freeandnil(x);
end;
执行TDMDataDirect.Exec时,居然出现父类的SQLCon,SQLQueryComm为nil?
现在这个问题应该怎么解决?我需要达到的目的就是能够通过父类的SQLCon,SQLQueryComm控件来执行SQL语句,并将结果存放到FDataSetStringList中!
begin
inherited Create(nil); //需要寫
FDataSetStringList := TStringList.Create;
end;你復寫了Create方法後沒有調用父類的Create方法.所以TDMDataDirect就不能正确的創建
begin
inherited Create;//添上这句
FDataSetStringList := TStringList.Create;
end
type
TDMEventLog = class(TRemoteDataModule)
SQLCon: TSQLConnection;
SQLQueryComm: TSQLQuery;
private
public
constructor Create(aOwner: TCompoent); override; //重载一下
Destructor Destroy ; override;
end;就ok了