首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在新单元中查找组件的过程

在新单元中查找组件的过程
EN

Stack Overflow用户
提问于 2016-12-30 12:45:21
回答 1查看 865关注 0票数 1

我尝试创建新的单元Ado_Op,在这个unit中我尝试创建如下所示的procedure

代码语言:javascript
复制
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西雅图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-30 13:14:59

您报告的编译器错误只是问题的开始。还有相当多的。我看到以下问题,其中第1项是问题中指出的问题:

  1. 您需要提供引用属性ComponentCountComponents[]的对象。
  2. 您错误地使用了一个基于一个的索引。
  3. 您不必要地调用FindComponent来查找您已经拥有的组件。
  4. 您只调用Destroy一次,在最后找到的任何对象上。或者在未初始化的变量上,如果找不到任何变量。编译器应该对此发出警告,我希望您启用了警告和提示,并注意它们。

基于注释,您正在尝试调用表单拥有的每个表上的Close方法。这样做:

代码语言:javascript
复制
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,该代码将如下所示。

代码语言:javascript
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41396500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档