特定代码行上的德尔福访问冲突错误



我有一个从DB table填充的TTreeView。 然后,我运行此代码并query,根据选中的TTreeView项,从该表中的另一个column获取value,并将其添加到TMemo中。

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

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

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

计数 从 1 开始,而项目从零开始编制索引。因此,当我达到计数时,您会得到一个 AV,它比可以索引的多 1。您需要更改此行

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

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

代码中有 2 个位置需要应用该更改。

相关内容

  • 没有找到相关文章

最新更新