var
frm:TfrmChange;
begin
frm := TfrmChange.Create(nil);
with frm do
begin
try
EmpNum := dbgrdh1.DataSource.DataSet.FieldByName('EmpNo').AsString;
//调试到这里的把鼠标放到DataSet上面显示:DataSet Variable 'Self'inassessible here due to optimizition,是什么原因呢?
EmpName := dbgrdh1.DataSource.DataSet.FieldByName('EmpName').AsString;
ShowModal;
finally
Free;
end;
end;
解决方案 »
- 如何知道程序是否处理运行状态
- 千千静听的样式:磁性窗体/拖动主窗体,子窗体随之移动/改变大小,自动对齐窗体
- SaveDialog不覆盖文件保存? 很常见的功能!
- 如果一个数的值是空就让函数返回值是0,是什么函数呀,在线给分
- 一个非常简单的图片问题?小弟太苯,怎么调总是调不出,哪位高手指点一下,高分相送?
- ★Windows XP下的程序为什么会有白斑?
- 各位达人好,小弟请教关于GPRS的数据库开发问题!
- ?请问一下现在流行的UNIX下X-WINDOWS开发工具及其特点?
- 网络通信和delphi,很急!
- 有什么生成Gif的动画Vcl的控件
- 老师们,下面语句有什么错?请帮助一下
- 初学delphi,想问问delphi要不要虚拟机之类的东西支持?
procedure TfrmHRMRegister.actContractExecute(Sender: TObject);
var
frm:TfrmContract;
begin
frm := TfrmContract.Create(nil);
with frm do
begin
try
EmpNum := dbgrdh1.DataSource.DataSet.FieldByName('EmpNo').AsString;
EmpName := dbgrdh1.DataSource.DataSet.FieldByName('EmpName').AsString;
ShowModal;
finally
Free;
end;
end;
end;procedure TfrmHRMRegister.actUndergoExecute(Sender: TObject);
var
frm:TfrmUndergo;
begin
frm := TfrmUndergo.Create(nil);
with frm do
begin
try
EmpNum := dbgrdh1.DataSource.DataSet.FieldByName('EmpNo').AsString;
EmpName := dbgrdh1.DataSource.DataSet.FieldByName('EmpName').AsString;
ShowModal;
finally
Free;
end;
end;
end;
这里2个按钮的代码, 一个会出错, 一个不会出错。 为什么呢? 如果是内存没有释放,为什么另外一个不会呢?
我没有猜错的话就是WITH所引起的错误.为什么呢?
procedure TfrmHRMRegister.actUndergoExecute(Sender: TObject);
var
frm:TfrmUndergo;
begin
frm := TfrmUndergo.Create(nil);
with frm do
begin
try
EmpNum := dbgrdh1.DataSource.DataSet.FieldByName('EmpNo').AsString;
EmpName := dbgrdh1.DataSource.DataSet.FieldByName('EmpName').AsString;
ShowModal;
finally
Free;
end;
end;
end;拿你这个来分析,如果你的TfrmUndergo类中也有一个dbgrdh1;哪么上面的代码相当于procedure TfrmHRMRegister.actUndergoExecute(Sender: TObject);
var
frm:TfrmUndergo;
begin
frm := TfrmUndergo.Create(nil);
try
frm.EmpNum := frm.dbgrdh1.DataSource.DataSet.FieldByName('EmpNo').AsString;
frm.EmpName := frm.dbgrdh1.DataSource.DataSet.FieldByName('EmpName').AsString;
ShowModal;
finally
Free;
end;
end;
这个时侯拿到的DBGRDH1就不对了,
但如果这样改.
procedure TfrmHRMRegister.actUndergoExecute(Sender: TObject);
var
frm:TfrmUndergo;
begin
frm := TfrmUndergo.Create(nil);
with frm do
begin
try
EmpNum := self.dbgrdh1.DataSource.DataSet.FieldByName('EmpNo').AsString;
EmpName := self.dbgrdh1.DataSource.DataSet.FieldByName('EmpName').AsString;
ShowModal;
finally
Free;
end;
end;
end;
就正确了.