一段代码的苦恼!(0分)

  • 主题发起人 主题发起人 Nizvoo
  • 开始时间 开始时间
N

Nizvoo

Unregistered / Unconfirmed
GUEST, unregistred user!
TJs = class
aaa: TDataBase;
end;


Js := nil;
Js := TJs.Create;
aaa := TDataBase.Create(Self);
aaa.DataBaseName := 'xxx';


Js := nil;
Js := TJs.Create;
aaa := TDataBase.Create(nil);
aaa.DataBaseName := 'xxx';
有何区别
我的调试结果正确后者错误,结果。
 
TDataBase.Create(nil);里面的参数表示TDataBase的拥有者。
它的作用是它可以代替我们去释放TDataBase的资源,当它Destory的时候。

Self表示我,由于现在是在TJS里面,所以这个SELF表示JS。
如果你在FORM里面写SELF,就表示是这个FORM。
 
Nizvoo兄弟,TDatabase的构造函数里要求指定其Owner,
__fastcall virtual TDatabase(Classes::TComponent* AOwner);
应该你指定一下就可以了。
 
SELF就类似C++Builder、VC里面的this,表示当前Form
 
楼上的几位说的很对,nil 表示没有拥有者
 
不错,其实一个问题是我其它地方造成的,以前我是定义在Form中的,后来自建一类,问题
就多了起来。
 
DataProcess.ConnctionDB := 'MyData';
if not Assigned(DataProcess.Connection) then
//DataProcess.Connection := nil;
DataProcess.Connection := TDataBase.Create(nil);
DataProcess.Connection.Connected := False;
DataProcess.Connection.AliasName := AliasDBName;
ShowMessage(DataProcess.Connection.AliasName);
DataProcess.Connection.DatabaseName := DataProcess.ConnctionDB; //此处老出错改进方法见下的DisConnect
DataProcess.Connection.Params.Clear;
DataProcess.Connection.Params.Add('User Name=' + UserName);
DataProcess.Connection.Params.Add('Password=' + PassWord);
// ShowMessage(Js.DataProcess.Connection.Params.Strings[0]);
DataProcess.Connection.LoginPrompt := False;
DataProcess.Connection.Connected := True;


procedure TJs.DisConnect;
begin
DataProcess.Connection.Connected := False;
DataProcess.Connection.DatabaseName := ''; //把这个清空了,所以可以了。why
DataProcess.Connection := nil;
end;
 
由多了一个孤儿!!!!可怜
 
接受答案了.
 
后退
顶部