Delphi+MapX5+Access数据绑定实例
从网上搜一下,Delphi+MapX+Access数据绑定的例子不少,但大多没法运行.本人也是初学,经过试验实践,终于成功,总结如下.
学MapX这些天以来,在几个QQ群上发现一个通病:似乎学MapX的前辈们都很保守, 抱着自己的一点点技术象看家宝贝? 初学者提点问题,大家都不愿回答. 太小气,太以为自己了不起了吧.
*本文部分代码修改自互联网
关键点:
1、表的结构要与TAB的结构相同,或者至少要有一个相对应的索引字段。
2、要先创建一个新图层,然后再把DataSet绑定到该图层。
3、绑定的方法就是Tmap.Datasets.Add
实例步骤:
1、创建MDB文件:
2、创建一个TAB图层文件
3、创建ADO链接和查询的代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
with Self.ADOConnection1 do begin
if Connected then Close;
LoginPrompt := False;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+SysUtils.ExtractFilePath(ParamStr(0))
+'db1.mdb;Persist Security Info=False;Jet OLEDB:Database Password=';
end;
Self.ADOQuery1.Connection := Self.ADOConnection1;
Self.ADOQuery1.SQL.Text := 'select ID, Name, X, Y from MyTab';
Self.ADOQuery1.Open;
end;
4、绑定的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
oBLayer : BindLayer;
SearchLayer : Layer;
ds : Dataset;
begin
Map1.Layers.RemoveAll;//先删除a图层。事实上,后来我用一个没有a图层的GST也测试成功,当然,就没必要写RemoveAll这句了
oBLayer := coBindLayer.Create;
oBLayer.LayerName := 'a';
oBLayer.LayerType := miBindLayerTypeXY;//必须使用这个参数才能绑定XY坐标
oBLayer.RefColumn1 := 'X';//第一个参数必须指定为横坐标
oBLayer.RefColumn2 := 'Y';//纵坐标
//添加数据集
ds := map1.Datasets.Add(12,//数据集类型,这是miDataSetADO,即ADO专用的
Self.ADOQuery1.Recordset,//使用这个方法获得ADO中的_Recordset类型
'MyTab',//数据集名称
'ID',//传入的是Xunit表中的字段ID的名称
EmptyParam,
oBLayer,//BindLayer
EmptyParam,
EmptyParam);
//下边将设置新图层的各项属性
searchLayer := map1.Layers._Item('a');//长尾兔注:应该是_Item而不是Item
//字体颜色
searchLayer.LabelProperties.Style.TextFontColor := miColorPurple;
searchLayer.LabelProperties.Style.TextFontHalo := true;
searchLayer.LabelProperties.Style.TextFontBackColor := miColorWhite;
//设置图元显示的标签
searchLayer.LabelProperties.Dataset := ds;
searchLayer.LabelProperties.DataField := ds.Fields._Item('Name'); //长尾兔注:应是_Item
searchLayer.LabelProperties.LabelZoom := true;
{ //设置图层缩放比例范围
searchLayer.ZoomMin := 0;
searchLayer.ZoomMax := 200;
searchLayer.ZoomLayer := true;
//设置标签缩放比例范围
searchLayer.LabelProperties.LabelZoomMin := 0;
searchLayer.LabelProperties.LabelZoomMax := 200;
searchLayer.LabelProperties.LabelZoom := true;
//自动标记图元
searchLayer.AutoLabel := true;}
end;
附:
以下是用默认的北美地图做试验:
相应的把座标改了一下,位置在墨西哥西北部: