|
阅读:664回复:0
[求助]oracle表下载到本地并保存为本地*.tab表的问题
我的代码如下所示:
procedure AddServerLayer(Map:TMap;UID,PWD,SRVR:string;LayerName:String;TableName:String; KeyField:String;LabelField:String; LabelStyle:CMapXStyle); var LayerInfCMapXLayerInfo; LocalLayerInfCMapXLayerInfo; flds:CMapXFields; ftrs:CMapXFeatures; Lyr:CMapXLayer; ds:CMapXDataSet; i:Integer; begin try LayerInfo := CoLayerInfo.Create; LocalLayerInfo := CoLayerInfo.Create; flds:=coFields.Create; LayerInfo.Type_ := miLayerInfoTypeServer; LayerInfo.AddParameter('ConnectString','UID='+UID+';PWD='+PWD+';SRVR='+SRVR); LayerInfo.AddParameter('Cache','On'); LayerInfo.AddParameter('MBRSearch','On'); LayerInfo.AddParameter('ToolKit','ORAINET'); LayerInfo.AddParameter('AutoCreateDataset', miDataSetLayer); LayerInfo.AddParameter('Name',LayerName); LayerInfo.AddParameter('Query','select * from '+TableName); <P>LayerInfo.AddParameter('DatasetName',LayerName); Map.Layers.Add(LayerInfo,0); //这里工作正常[LayerName].KeyField:=KeyField; Map.Layers.Item[LayerName].Visible :=False; Map.Layers.item[LayerName].LabelProperties.Dataset := Map.DataSets.Item[LayerName]; Map.Layers.item[LayerName].LabelProperties.DataField := Map.DataSets.Item[LayerName].Fields.Item[LabelField]; Map.Layers.item[LayerName].LabelProperties.Overlap := True; Map.Layers.Item[LayerName].LabelProperties.Style := LabelStyle;</P> <P>ds:=Map.Datasets.Item[LayerName]; flds:=ds.Fields; ftrs:=Map.Layers.Item[LayerName].AllFeatures; LocalLayerInfo.Type_:=miLayerInfoTypeNewTable; LocalLayerInfo.AddParameter('Name','1'); LocalLayerInfo.AddParameter('FileSpec','c:\1.tab'); LocalLayerInfo.AddParameter('Fields', flds); LocalLayerInfo.AddParameter('Features', ftrs); LocalLayerInfo.AddParameter('OverwriteFile','1'); Lyr:=Map.Layers.Add(LocalLayerInfo,EmptyParam); //这里出现异常 Map.datasets.Add(miDataSetLayer,Lyr, '1',EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); finally LocalLayerInf=nil; LayerInf=nil; end; end; 但不能运行它可以加载从oracle上下载的表,但创建本地表的时候就会出错,异常错误如下所示:'Invaid Name Parameter specified'. 如果我用 flds.AddStringField('ID',50,EmptyParam); 替换 flds:=ds.Fields; 即Fields改为自己创建的,则程序可以正常运行,并且保存为本地的tab文件。</P> |
|