默认头像
路人甲
路人甲
  • 注册日期2004-07-30
  • 发帖数16
  • QQ
  • 铜币176枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2267回复:4

我会疯了,到底怎样才能使dataset 的readonly属性可以设为false?

楼主#
更多 发布于:2004-09-20 08:57

我先前用odbc从数据库中渎数据生成新的图层同时用数据集绑定。

Mydataset:= Map1.Datasets.Add(miDatasetODBC,parm,emptyparam,'name','id',BindlayerObject,emptyparam,false);     

但是向数据集中添加新的图元的参数时候 frmmain.Map1.Layers.Item[1].AddFeature(newobj,rvs);

抱错说dataset不能是readonly并且必须与layer绑定

但是我查文档 他说只有midatasetlayer型的数据集才能设置readonly 于是我删除原来odbc创建的dataset 重新绑定

dsetpnt:= frmmain.map1.datasets.add(midatasetlayer,lyr,'dset',lyr.keyfield,emptyparam,lyr.name,emptyparam,false); 还是抱同样的错,'此dataset不能assign to readonly'

请各位帮帮忙 看看。为这个 我一宿没睡了。

谢谢了。

[此贴子已经被作者于2004-9-20 9:55:44编辑过]
喜欢0 评分0
默认头像
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2004-09-20 10:25

n久没动mapx了,现在也没装这个,帮不上忙

只有midatasetlayer型的数据集才能设置readonly

不是你生成地图数据的问题吧?

GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-07-30
  • 发帖数16
  • QQ
  • 铜币176枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-09-20 19:19

我用的就是记录集 还是抱错 'dataset readonly属性不能为readonly'

我改readonly属性又说不能改。

我现在用得最笨的方法 添加图元时候 把图层 和数据集都remove了

重新帮定 :(

du.jiang@gmail.com是我的邮箱

请您把小例子给我 我用delphi

vbvc借鉴一下吧

谢谢您了

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-07-30
  • 发帖数16
  • QQ
  • 铜币176枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-09-20 19:28

另外我想到的另一个方法:

dataset.refresh方法该方法用于在数据中有更改时对地图的更新。   Refresh方法被激活后,系统重读原数据源的数据从而对绑定图层的属性值进行modify 但是根本还是不管用 新的图元的各项值还是没有被绑定到图层中。

如果这样的话 以后即使是修改图元某个参数值都要删除图层 数据集 重新绑定 太。。。。。 请指教我这个弱人

请指教 谢谢

[此贴子已经被作者于2004-9-20 19:29:53编辑过]
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-09-08
  • 发帖数6
  • QQ
  • 铜币132枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-09-25 11:21
帮主:你好,你也得救救我啦,我用VC+mapx并通过ADO进行绑定SQL数据表,不行啊

求救:

  long fieldcount=0; void zjgisView::OnToolUsed(short ToolNum,double X1,double Y1,double X2,double Y2,double Distance,BOOL Shift,BOOL Ctrl,BOOL* EnableDefault) {      CString str;  CMapXPoint pt;  CMapXFeatures fs;  CMapXFeature f;  pt.CreateDispatch(pt.GetClsid());  pt.Set(X1,Y1);  str.Format("Tool=%d,[%f,%f],[%f,%f],dist=%f,%s,%s\n",ToolNum,X1,Y1,X2,Y2,Distance,(Shift)? "Shift":" ",(Ctrl)? "Ctrl-": " ");  TRACE(str);

SetRedraw(false);     if(ToolNum==MYTOOL_INFO)  {   dlg.m_ctrList.ResetContent();      try   {    if(m_ctrlMapX.GetDatasets().GetCount()==0)    {   BSTR ColName;     VARIANT sd;              CMapXLayer layer;                    layer =m_ctrlMapX.GetLayers().Item(1);     sd.vt = VT_DISPATCH;     sd.pdispVal = layer.m_lpDispatch;     sd.pdispVal->AddRef();     CString strLayername=m_ctrlMapX.GetLayers().Item(1).GetName();            // dataset =m_ctrlMapX.GetDatasets().Add(miDataSetLayer,sd,strLayername);        CString sql=_T("SELECT * FROM 光点分布");                 pRs->Open((_variant_t)sql,(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);        pRs->GetFields()->Item[long(0)]->get_Name(;ColName);     dataset =layer.GetDatasets().Add(miDataSetADO,(_variant_t)(IDispatch*)pRs,(char*)_bstr_t(ColName),false);     fieldcount=dataset.GetFields().GetCount();    }

  fs=m_ctrlMapX.GetLayers().Item(1).SearchAtPoint(pt);    if(fs.GetCount()!=1)    {     return;    }

  f=fs.Item(1);

  COleVariant vRow;    COleVariant vVal;   

  vRow.vt=VT_DISPATCH;    vRow.pdispVal=f.m_lpDispatch;    vRow.pdispVal->AddRef();

  CString strtemp;               for(long i=1;i<=fieldcount;i++)    {       strtemp=dataset.GetFields().Item(i).GetName();    strtemp+=_T(":");

  vVal=dataset.GetValue(vRow,COleVariant(i));    if(vVal.vt!=VT_NULL)    {     vVal.ChangeType(VT_BSTR);       strtemp+=vVal.bstrVal;    }    dlg.m_ctrList.AddString((LPCTSTR)strtemp);

  }

     dlg.UpdateData(false);    dlg.ShowWindow(SW_SHOW);      }     catch(COleDispatchException *e)   {    e->ReportError();    e->Delete();   }

 catch(COleException *e)   {    e->ReportError();    e->Delete();      }  }

SetRedraw(true);

}

能通过编译并且可以运行,但是一使用显示工具显示属性就会弹出"operation is not allow on this datasets collection"

);     dataset =layer.GetDatasets().Add(miDataSetADO,(_variant_t)(IDispatch*)pRs,(char*)_bstr_t(ColName),false);     

,(_variant_t)(IDispatch*)pRs是不是因为记录指针转换有问题啊,请大哥帮帮忙啊,困也一个星期了,我的邮箱是gzmslinzy@163.com 谢谢了

举报 回复(0) 喜欢(0)     评分
默认头像

返回顶部