Access violation at address 00403E00 in moudle 'xxx.exe'(50分)

I

ipec

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
我在编一个用TREEVIEW和LISTVIEW来控制数据的管理系统。
在TREEVIEW的ONMOUSEDOWN事件中加入代码:
if TV1.Selected = nil then Exit;
adodataset1.First;
listview1.Items.Clear;
for w:=0 to recout-1 do
begin
if adodataset1.FieldByName('depart').Asstring=tv1.Selected.Text then begin
listview1.Items.Insert(w); find:=find+1;
listview1.Items[w].Caption:=adodataset1.FieldByName('name').Asstring; end;
if adodataset1.FieldByName('comp').Asstring=tv1.Selected.Text then begin
listview1.Items.Insert(w); find:=find+1;
listview1.Items[w].Caption:=adodataset1.FieldByName('name').Asstring; end;
adodataset1.Next;
end;
运行后,在点击TREEVIEW的ITEM时,可以对数据进行遍历,但在点击到第N次(N有时是2,有时是3不定)
就开始出错:“Access violation at address 00403E00 in moudle 'xxx.exe'. write of address 00000024“
请问如何解决?
 
你加断点跟踪呀,看看到底在什么地方出的错,这么大一堆,谁能看的过来呀,
你跟踪完了把出错的那句指出来,再看可能会好点。
 
碰到这样的错误多半是系统的事
格式化吧
 
多半跟系统没关,是访问内存出了问题,最好这样写:
var
ListItem : TListItem;
begin
if TV1.Selected = nil then Exit;
adodataset1.First;
ListView1.BeginUpdate;
try

listview1.Items.Clear;
while not adodataset1.eof do
begin
if adodataset1.FieldByName('depart').Asstring=tv1.Selected.Text then
begin
ListItem := listview1.Items.Add;
Inc(find);
ListItem.Caption := adodataset1.FieldByName('name').Asstring;
end;
if adodataset1.FieldByName('comp').Asstring=tv1.Selected.Text then
begin
ListItem := ListView1.Items.Add;
Inc(find);
ListItem := adodataset1.FieldByName('name').Asstring;
end;
adodataset1.Next;
end;
finally
ListView1.EndUpdate;
end;
end;
请你试试看。 另外有点疑惑:depart 与 comp 在 ListView 中是并列的吗?
 
用指针的时候一定要判断指针是否为nil,如果是nil对它的访问会出来你说的错误!
 
谁有dxdbtreeview的下载地址???
 
同意郭玉梁
这种错误提示,多半是说你的程序的某一部分访问越界了,比如:资源已经释放或还没建立
就访问它
 
var
ListItem : TListItem;
begin
if TV1.Selected = nil then Exit;
adodataset1.First;
ListView1.BeginUpdate;
try

listview1.Items.Clear;
while not adodataset1.eof do
begin
if adodataset1.FieldByName('depart').Asstring=tv1.Selected.Text then
begin
ListItem := listview1.Items.Add;
Inc(find);
ListItem.Caption := adodataset1.FieldByName('name').Asstring;
end;
if adodataset1.FieldByName('comp').Asstring=tv1.Selected.Text then
begin
ListItem := ListView1.Items.Add;
Inc(find);
ListItem := adodataset1.FieldByName('name').Asstring;
end;
adodataset1.Next;
end;
finally
ListView1.EndUpdate;
end;
end;
 

Similar threads

I
回复
0
查看
677
import
I
I
回复
0
查看
745
import
I
I
回复
0
查看
487
import
I
I
回复
0
查看
602
import
I
顶部