1:为什么我的AdoQuery数据集不能修改
我用AdoQuery打开数据集,LockType也设置的是乐观锁定,可我修改的时候提示DataSet不能处于编辑或插入模式
2:窗体为什么没有完全销毁
我在一个窗体的Close模块中使用了free释放,窗口正常关闭,可是我从调用它的菜单再次调用打开时却提示访问地址错误,我加了一条=nil的判断发现窗体并不为nil,可是我明明已经用free释放了窗体
我的调用窗体语句是这样的:
if frmSysUser=nil then frmSysUser:=TfrmSysUser.Create(application);
frmSysUser.Show;
想让它执行如果没有打开窗体就创建再打开,如果已打开就直接Show,结果就出现了如上情况
后来在前面加了:
if frmSysUser=nil then
showmessage('no create')
else
showmessage('create');
发现第二次执行的时候frmSysUser已经不为nil了,可我在frmSysUser的Close中已经执行了free:
procedure TfrmSysUser.FormClose(Sender: TObject; var Action: TCloseAction);
begin
GridUserDBTV.DataController.DataSource:=nil;
DataSource.DataSet:=nil;
//AdoQuery.Close;
AdoQuery.Connection:=nil;
AdoQuery.Free;
free;
end;
注:我的Connection指向的是另一个窗体的一个Connection组件,此窗体的资源该释放的都释放了
我用AdoQuery打开数据集,LockType也设置的是乐观锁定,可我修改的时候提示DataSet不能处于编辑或插入模式
2:窗体为什么没有完全销毁
我在一个窗体的Close模块中使用了free释放,窗口正常关闭,可是我从调用它的菜单再次调用打开时却提示访问地址错误,我加了一条=nil的判断发现窗体并不为nil,可是我明明已经用free释放了窗体
我的调用窗体语句是这样的:
if frmSysUser=nil then frmSysUser:=TfrmSysUser.Create(application);
frmSysUser.Show;
想让它执行如果没有打开窗体就创建再打开,如果已打开就直接Show,结果就出现了如上情况
后来在前面加了:
if frmSysUser=nil then
showmessage('no create')
else
showmessage('create');
发现第二次执行的时候frmSysUser已经不为nil了,可我在frmSysUser的Close中已经执行了free:
procedure TfrmSysUser.FormClose(Sender: TObject; var Action: TCloseAction);
begin
GridUserDBTV.DataController.DataSource:=nil;
DataSource.DataSet:=nil;
//AdoQuery.Close;
AdoQuery.Connection:=nil;
AdoQuery.Free;
free;
end;
注:我的Connection指向的是另一个窗体的一个Connection组件,此窗体的资源该释放的都释放了
在CLOSE里添加:Action:=caFree; 判断窗体是否构造,一般用Assign(Form1)
这样难道错了吗