我有这个问题,我可以通过抛弃这个错误来解决这个问题,兄弟我按下一个调用表单Cencillo进行搜索的按钮。错误如下。
消息:模块“Almacen.pgi”中地址为09A878EE的访问冲突。读取地址00000000。
给我这个错误的按钮代码如下:
procedure TfListaEntregaBodegas.SBBuscarClick(Sender: TObject);
begin
inherited;
FBuscarRequisicionBodega := TFBuscarRequisicionBodega.Create(Application);
FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
FBuscarRequisicion.ShowModal;
FBuscarRequisicion.Free;
dbgListaRequisiciones.Setfocus;
end;
答案 0 :(得分:3)
明显的问题出现在下面的注释行中,您可以在其中创建名为TFBuscarRequisicionBodega
的内容,并将其分配给名为FBuscarRequisicionBodega
的变量,并设置FBuscarRequisicionBodega
的一些属性。然后,您在名为ShowModal
的完全不同的变量上调用FBuscarRequisicion
,然后将其释放。你现在已经孤立FBuscarRequisicionBodega
(没有任何东西可以释放它),同时在你没有为(ShowModal
)提供代码的东西上调用FBuscarRequisicion
,并在之后释放它。再次单击该按钮将调用ShowModal
上最后一次释放的内容。
这个问题看起来很清楚,甚至没有读取变量名称 - 只需检查这两行代码:
FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
FBuscarRequisicion.ShowModal;
查看变量名长度如何不匹配? (.
没有对齐,因为第一个字母比第二个字母多六个字母。)
在您发布的代码中仔细阅读变量名称,问题看起来非常清楚。 (调试器的两秒钟会告诉你;你真的应该学会使用它。)
procedure TfListaEntregaBodegas.SBBuscarClick(Sender: TObject);
begin
inherited;
// You create something and assign it to one variable here.
// Set debugger breakpoint on next line (F5, click the grey
// gutter to the left of the editor line numbers, or right-click
// the line and choose Debug->Toggle Breakpoint, run your app (F9),
// and step through the code with F8.
FBuscarRequisicionBodega := TFBuscarRequisicionBodega.Create(Application);
FBuscarRequisicionBodega.dsRequisicionBodega.DataSet:=qListaRequisiciones;
// You then call ShowModal on a totally different variable here, then
// free it after ShowModal returns.
FBuscarRequisicion.ShowModal;
FBuscarRequisicion.Free;
dbgListaRequisiciones.Setfocus;
end;