在另一种形式的 1 形式上打开数据源会引发错误
Opening datasource on 1 form in another raises error
我有一个包含多个表单的 delphi 项目。在其中一个表单上,我有一个包含字段的数据集,我想在另一个表单上打开这个数据集,但是我收到以下错误消息,这是我以前从未见过的:
项目引发异常 class $C0000005,在地址 0x000000e8 的 0x005f536f:read 处出现消息访问冲突。
我是不是做错了什么或处理方法不对?
如有任何帮助,我们将不胜感激。
谢谢,
代码:
uses frm1
procedure Tfrm2.FormCreate(Sender: TObject);
begin
frm1.ds.DataSet.Open;
end;
点击 frm1 按钮启动 frm2 的代码
procedure Tfrm1.btnCreateClick(Sender: TObject);
var Form2 : tfrm2;
begin
Form2 := tfrm2.Create(self);
Form2.Editing := False;
try
Form2.ShowModal
finally
Form2.Free;
end;
end;
您的代码示例展示了非常糟糕的做法:
Unit1 using Unit2
Unit2 using Unit1
创建 DataModule 单元并从 Unit1 和 Unit2 使用它
会变成这样:
Unit1 using Unit2 and DataModule unit
Unit2 using DataModule unit
无论如何,您的代码应该可以工作。您获得 AccessViolation 的原因——也许您有一些 TADOQuery/TADOTable and/or TDAtaSource 的事件未在您的代码示例
中列出
可能代码不完整,但问题是您还没有创建 form1 的实例。所以 frm1 不可用。所以这段代码将避免访问冲突。
uses frm1
procedure Tfrm2.FormCreate(Sender: TObject);
begin
frm1 := TForm1.Create(Application);
frm1.ds.DataSet.Open;
end;
首先,我不建议在每个表单中单独使用数据访问组件,而是将它们全部放在一个数据模块中。这样,您的应用程序的所有形式都可以访问您的数据访问组件,并且您的应用程序看起来干净且有条理。
关于错误,重要的是要提到 form1(带有数据集)应该通过其接口调用 form2,而 Form2(调用 form1 数据集的那个)应该通过其实现调用 form1。我相信它会解决你的问题。让我知道它是否有效。
J
我有一个包含多个表单的 delphi 项目。在其中一个表单上,我有一个包含字段的数据集,我想在另一个表单上打开这个数据集,但是我收到以下错误消息,这是我以前从未见过的:
项目引发异常 class $C0000005,在地址 0x000000e8 的 0x005f536f:read 处出现消息访问冲突。
我是不是做错了什么或处理方法不对?
如有任何帮助,我们将不胜感激。
谢谢,
代码:
uses frm1
procedure Tfrm2.FormCreate(Sender: TObject);
begin
frm1.ds.DataSet.Open;
end;
点击 frm1 按钮启动 frm2 的代码
procedure Tfrm1.btnCreateClick(Sender: TObject);
var Form2 : tfrm2;
begin
Form2 := tfrm2.Create(self);
Form2.Editing := False;
try
Form2.ShowModal
finally
Form2.Free;
end;
end;
您的代码示例展示了非常糟糕的做法:
Unit1 using Unit2
Unit2 using Unit1
创建 DataModule 单元并从 Unit1 和 Unit2 使用它
会变成这样:
Unit1 using Unit2 and DataModule unit
Unit2 using DataModule unit
无论如何,您的代码应该可以工作。您获得 AccessViolation 的原因——也许您有一些 TADOQuery/TADOTable and/or TDAtaSource 的事件未在您的代码示例
中列出可能代码不完整,但问题是您还没有创建 form1 的实例。所以 frm1 不可用。所以这段代码将避免访问冲突。
uses frm1
procedure Tfrm2.FormCreate(Sender: TObject);
begin
frm1 := TForm1.Create(Application);
frm1.ds.DataSet.Open;
end;
首先,我不建议在每个表单中单独使用数据访问组件,而是将它们全部放在一个数据模块中。这样,您的应用程序的所有形式都可以访问您的数据访问组件,并且您的应用程序看起来干净且有条理。 关于错误,重要的是要提到 form1(带有数据集)应该通过其接口调用 form2,而 Form2(调用 form1 数据集的那个)应该通过其实现调用 form1。我相信它会解决你的问题。让我知道它是否有效。 J