delphi - 特定代码行上的 Delphi 访问冲突错误
问题描述
我有一个TTreeView
从DB table
. 然后,我根据检查的项目运行此代码 &query
以value
从该表中的另一个获取 a并将其添加到.column
TTreeView
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
我不明白那行代码有什么问题。愿意分享你的想法吗?
解决方案
这是一个典型的菜鸟错误(我有时仍然会犯)
count从 1 开始,而items从零开始索引。因此,当i达到比可索引多 1的计数时,您会得到一个 AV您需要更改此行
for i := 0 to TreeView1.Items.Count do
至
for i := 0 to TreeView1.Items.Count - 1 do
您的代码中有 2 个地方需要应用该更改。
推荐阅读
- java - 当我使用该对象时,是否会一次又一次地调用静态最终对象的 init 方法?
- reactjs - 函数回调中的 setState
- javascript - Javascript 不会更改附加内容
- excel - Excel Weekday 函数,查找星期几
- keras - Keras Bi-LSTM CRF Python 到 R
- sql - Excel 和 SQL - Excel 文件之间的连接
- linux - 使用 Ansible 中的字符串查询搜索 Linux 进程 (PID)
- git - 在本地创建存储库并使用 ssh、git 授予访问权限
- python - 动态 Django 应用程序
- html - CSS clear:两者都不清除双方?