首页 > 解决方案 > 特定代码行上的 Delphi 访问冲突错误

问题描述

我有一个TTreeViewDB table. 然后,我根据检查的项目运行此代码 &queryvalue从该表中的另一个获取 a并将其添加到.columnTTreeViewTMemo

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
test: string;

begin
  for i:=0 to TreeView1.Items.Count do
   begin
     if TreeView1.Items[i].Checked then
      begin
       test := TreeView1.Items.Item[i].Text;
        try
         Query1.SQL.Text := 'SELECT column2 FROM someTable WHERE column1='''+test+'''';
         Query1.Open;
        finally
         Memo1.Lines.Add(Query1.FieldByName('column2').Value);
        end;
       Query1.Close;
      end;
   end;
for i:=0 to TreeView1.Items.Count do TreeView1.Items.Item[i].Checked := false;
end;

一切正常,除了Access Violation error我启动它后得到的。

Delphi 调试器将其识别为源自这行代码:

if TreeView1.Items[i].Checked then

并说:Expression illegal in evaluator

我不明白那行代码有什么问题。愿意分享你的想法吗?

标签: delphitreeview

解决方案


这是一个典型的菜鸟错误(我有时仍然会犯)

count从 1 开始,而items从零开始索引。因此,当i达到比可索引多 1的计数时,您会得到一个 AV您需要更改此行

for i := 0 to TreeView1.Items.Count do

for i := 0 to TreeView1.Items.Count - 1 do

您的代码中有 2 个地方需要应用该更改。


推荐阅读