我有一个从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 个位置需要应用该更改。