我尝试创建新的单元Ado_Op,在这个unit中我尝试创建如下所示的procedure:
procedure CloseAllTables ();
Var I : Integer; T : TADOTable;
begin
for I := 1 to ComponentCount-1 do
if Components[i] is TADOTable then
begin
T := FindComponent(Components[i].Name) as TADOTable;
T.Close;
end;
T.Destroy;
end;错误:
ComponentCount无法访问。
备注:,我正在使用Delphi 10西雅图。
发布于 2016-12-30 13:14:59
您报告的编译器错误只是问题的开始。还有相当多的。我看到以下问题,其中第1项是问题中指出的问题:
ComponentCount和Components[]的对象。FindComponent来查找您已经拥有的组件。Destroy一次,在最后找到的任何对象上。或者在未初始化的变量上,如果找不到任何变量。编译器应该对此发出警告,我希望您启用了警告和提示,并注意它们。基于注释,您正在尝试调用表单拥有的每个表上的Close方法。这样做:
procedure CloseAllTables(Owner: TComponent);
var
i: Integer;
begin
for i := 0 to Owner.ComponentCount-1 do
if Owner.Components[i] is TADOTable then
TADOTable(Owner.Components[i]).Close;
end;如果您也希望销毁所有这些组件,我对此表示怀疑,那么您需要按降序运行循环。这是因为当您销毁一个组件时,它将从其所有者组件列表中删除。假设不需要对即将被销毁的对象调用Close,该代码将如下所示。
procedure DestroyAllTables(Owner: TComponent);
var
i: Integer;
begin
for i := Owner.ComponentCount-1 downto 0 do
if Owner.Components[i] is TADOTable then
Owner.Components[i].Free;
end;https://stackoverflow.com/questions/41396500
复制相似问题