解决 access vilstion at....(200分)

  • 主题发起人 主题发起人 wangwei1
  • 开始时间 开始时间
W

wangwei1

Unregistered / Unconfirmed
GUEST, unregistred user!
我用mo+delphi编写小的gis应用。
以下代码目的是通过外部的odbc:mp来关联shp文件,并高亮度显示制定的目标。
但首次运行,总提示程序错误框:access violation at address ××××× in module 。。。
不知到是否是某个对象应用错误。还是。。。。
请大家帮忙看看,谢谢!!!

procedure TForm1.Button1Click(Sender: TObject);
var
mylyr:Imomaplayer;
reltbl:IMoTable;
recs:IMORecordset;
count:integer;
field:IMofield;
value:string;
shp:iMoPolygon;
exp:string;
//rect:imorectangle;
dc:imodataconnection;


begin

dc:=imodataconnection(createoleobject('mapobjects2.dataconnection'));
dc.database:=samp1.returndatapath('world');
if not dc.connect then
exit;

mylyr:=imomaplayer(createoleobject('mapobjects2.maplayer'));
mylyr.geodataset:=dc.findgeodataset('ah');
map1.layers.add(mylyr);

//reltbl:=imotable(createoleobject('mapobjects2.table'));
reltbl:=cotable.Create as IMotable;
reltbl.Database:='mp';
reltbl.Name:='ah11.DBF';
// mylyr:=imomaplayer(createoleobject('mapobjects2.maplayer'));
mylyr:=map1.Layers.Item(0) as IMomaplayer
if mylyr.AddRelate('COUNTLL_ID',reltbl,'lx',true) then

begin

memo1.Clear;
showmessage('connect suss');
end
else

showmessage('connect error!');
recs:=mylyr.Records;
count:=recs.Count;

////////show results
while count > 0do

begin

field:=recs.Fields.Item('lx');
value:=field.ValueAsString;
recs.MoveNext;
memo1.Lines.Add(value);
count:=count-1;
end;

exp:='lx='''+'嗜人按蚊 '+'''';
wset:=mylyr.searchexpression(exp);

{if (not wset.eof) then


begin

flds:=wset.fields;
shp:=imopolygon(createoleobject('mapobjects2.polygon'));
shp:=Imopolygon(Idispatch(flds.item('shape').value));
rect:=imorectangle(createoleobject('mapobjects2.rectangle'));
//rect:=shp.extent;
//rect.scalerectangle((2.0));
// map1.extent:=rect;
map1.Refresh;
map1.flashshape(shp,20);
end
else
}
map1.Refresh;
end;


procedure TForm1.Map1AfterLayerDraw(Sender: TObject;
index: Smallint;
canceled: WordBool;
hDC: Cardinal);
var
shp1:iMoPolygon;
Symbol:imoSymbol;
flds:imofields;
FLD:imofield;

begin

Symbol:=imoSymbol(createoleobject('mapobjects2.Symbol'));
Symbol.COLOR:=clred;
FLDS:=wset.FIELDS;
FLD:=FLDS.ITEM('SHAPE');
SHP1:=Imopolygon(Idispatch(fld.value));
map1.drawshape(shp1,symbol);
SHP1:=NIL;

end;

 
版主可以帮忙么?每人知道么?[:(]
 
Pointer Error.
Check your program carefully.
 
这种错误很麻烦
 
看看你有没用访问还没用创建的对象或变量的地方,就是说你访问了这个对象或变量,
但它还没有被创建而不存在。
 
你应该用F8 和 F7并配合断点 来单步调试一下程序,看程序在执行到哪一句时出的错,错误锁定了,才能知道怎么出的错
你贴的代码看不出错误,因为不知道你有没有其它单元,也不知道你程序一开始做了点什么
 
对啊,这样怎么看的出错在哪,还是先调试一下再看。
 
后退
顶部