阅读:2263回复:4
我会疯了,到底怎样才能使dataset 的readonly属性可以设为false?<P>我先前用odbc从数据库中渎数据生成新的图层同时用数据集绑定。</P> <P>Mydataset:= Map1.Datasets.Add(miDatasetODBC,parm,emptyparam,'name','id',BindlayerObject,emptyparam,false); </P> <P>但是向数据集中添加新的图元的参数时候 frmmain.Map1.Layers.Item[1].AddFeature(newobj,rvs);</P> <P>抱错说dataset不能是readonly并且必须与layer绑定</P> <P>但是我查文档 他说只有midatasetlayer型的数据集才能设置readonly 于是我删除原来odbc创建的dataset 重新绑定</P> <P>dsetpnt:= frmmain.map1.datasets.add(midatasetlayer,lyr,'dset',lyr.keyfield,emptyparam,lyr.name,emptyparam,false); 还是抱同样的错,'此dataset不能assign to readonly'</P> <P>请各位帮帮忙 看看。为这个 我一宿没睡了。</P> <P>谢谢了。</P> [此贴子已经被作者于2004-9-20 9:55:44编辑过]
|
|
1楼#
发布于:2004-09-20 10:25
<P>n久没动mapx了,现在也没装这个,帮不上忙</P><P>只有midatasetlayer型的数据集才能设置readonly </P><P>不是你生成地图数据的问题吧?</P>
|
|
|
2楼#
发布于:2004-09-20 19:19
<P>我用的就是记录集 还是抱错 'dataset readonly属性不能为readonly'</P><P>我改readonly属性又说不能改。</P><P>我现在用得最笨的方法 添加图元时候 把图层 和数据集都remove了</P><P>重新帮定 :(</P><P> <a href="mailtdu.jiang@gmail.com是我的邮箱" target="_blank" >du.jiang@gmail.com是我的邮箱</A></P><P>请您把小例子给我 我用delphi</P><P>vbvc借鉴一下吧</P><P>谢谢您了</P>
|
|
3楼#
发布于:2004-09-20 19:28
<P>另外我想到的另一个方法:</P>
<P>dataset.refresh方法该方法用于在数据中有更改时对地图的更新。 Refresh方法被激活后,系统重读原数据源的数据从而对绑定图层的属性值进行modify 但是根本还是不管用 新的图元的各项值还是没有被绑定到图层中。</P> <P>如果这样的话 以后即使是修改图元某个参数值都要删除图层 数据集 重新绑定 太。。。。。 请指教我这个弱人</P> <P>请指教 谢谢</P> [此贴子已经被作者于2004-9-20 19:29:53编辑过]
|
|
4楼#
发布于:2004-09-25 11:21
帮主:你好,你也得救救我啦,我用VC+mapx并通过ADO进行绑定SQL数据表,不行啊
<P>求救:</P>
<P> 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);</P> <P> 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(); }</P> <P> fs=m_ctrlMapX.GetLayers().Item(1).SearchAtPoint(pt); if(fs.GetCount()!=1) { return; }</P> <P> f=fs.Item(1);</P> <P> COleVariant vRow; COleVariant vVal; </P> <P> vRow.vt=VT_DISPATCH; vRow.pdispVal=f.m_lpDispatch; vRow.pdispVal->AddRef();</P> <P> CString strtemp; for(long i=1;i<=fieldcount;i++) { strtemp=dataset.GetFields().Item(i).GetName(); strtemp+=_T(":");</P> <P> vVal=dataset.GetValue(vRow,COleVariant(i)); if(vVal.vt!=VT_NULL) { vVal.ChangeType(VT_BSTR); strtemp+=vVal.bstrVal; } dlg.m_ctrList.AddString((LPCTSTR)strtemp);</P> <P> }</P> <P> dlg.UpdateData(false); dlg.ShowWindow(SW_SHOW); } catch(COleDispatchException *e) { e->ReportError(); e->Delete(); }</P> <P> catch(COleException *e) { e->ReportError(); e->Delete(); } }</P> <P> SetRedraw(true);</P> <P>} </P> <P>能通过编译并且可以运行,但是一使用显示工具显示属性就会弹出"operation is not allow on this datasets collection"</P> <P>); dataset =layer.GetDatasets().Add(miDataSetADO,(_variant_t)(IDispatch*)pRs,(char*)_bstr_t(ColName),false); </P> <P>,(_variant_t)(IDispatch*)pRs是不是因为记录指针转换有问题啊,请大哥帮帮忙啊,困也一个星期了,我的邮箱是<a href="mailtgzmslinzy@163.com" target="_blank" >gzmslinzy@163.com</A> 谢谢了</P> |
|