laoxie_198 发表于 2006-11-22 08:08:00

[求助]急求高手帮忙!!!

<P>下面是我根据数据库图元信息在cad里绘制图形时根据表里字段添加扩展数据的vba代码.发现一个很奇怪的问题:如果我按f8一步一步的执行的话就能达到我的要求,如果我按f5执行的话扩展数据就好象没写进去,请大家帮我看看问题出在哪!<BR>Private Sub tjkzsj(cadid, dwname, tc) '将新增的图元添加上扩展数据<BR>wj = "d:\a.txt"<BR>Open wj For Append As #1<BR>Dim ty As AcadEntity<BR>Dim layer As AcadLayer<BR>Set layer = ThisDrawing.Layers.Add(tc)</P>
<P>Dim ssget As AcadSelectionSet</P>
<P>'If Not IsNull(ThisDrawing.SelectionSets.Item("xzj")) Then<BR>&nbsp;'Set ssget = ThisDrawing.SelectionSets.Item("xzj")<BR>&nbsp;'ssget.Delete<BR>上面这段总是提示找不到主键!!!!<BR>'End If<BR>Set ssget = ThisDrawing.SelectionSets.Add("xzj")<BR>ssget.Select acSelectionSetLast<BR>For Each ty In ssget<BR>ty.layer = tc<BR>ty.Update<BR>Dim datatype(0 To 7) As Integer<BR>Dim data(0 To 7) As Variant<BR>datatype(0) = 1001: data(0) = "xdata"<BR>datatype(1) = 1000: data(1) = dwname<BR>datatype(2) = 1003: data(2) = "0"<BR>datatype(3) = 1040: data(3) = 1.232<BR>datatype(4) = 1041: data(4) = cadid<BR>datatype(5) = 1070: data(5) = 5656<BR>datatype(6) = 1071: data(6) = 32332<BR>datatype(7) = 1042: data(7) = 10<BR>ty.SetXData datatype, data<BR>Dim xtype As Variant<BR>Dim xdata As Variant<BR>ty.GetXData "", xtpye, xdata<BR>Write #1, tc, xdata(4);从这里生成的数据不对.<BR>Next ty<BR>'Write #1, tc, xdata(4)<BR>Close #1<BR>'kckzsj ty<BR>ssget.Delete<BR>End Sub</P>

wyj7485 发表于 2006-11-22 08:52:00

<P>1,找不到主键!!!!-----前加 on error resume next</P>
<P>2,ty.SetXData datatype, data后加语句:ThisDrawing.Application.Update</P>

laoxie_198 发表于 2006-11-22 11:07:00

<P>请问楼上的朋友:ssget怎么总是空的.?我已经在cad里画好图形了呀!怎么选择不上呢?</P>

wyj7485 发表于 2006-11-23 08:29:00

ssget.Select acSelectionSetLast<BR>说明该语句没有起作用,换成窗选ssget.SelectOnScreen

iq0050 发表于 2006-11-23 10:11:00

<P>若我,可能会改为把最近加入图形空间的对象存入一个集合变量,然后用ADDITEM方法把其加入选择集.</P>
<P>用acSelectionSetLast是要相信CAD的选择不会出错,我的原择,求人不如求己.</P>
<P>个人想法.</P>
<P>另外,你说F8结果正确,F5就出错,可能是哪步利用CAD内部功能执行时是产生了一个CAD的内部线程,当其返回值时,你的代码已进行到下一步,可在适当位置写入一个延时函数看看.</P>

laoxie_198 发表于 2006-11-23 12:02:00

<P>谢谢朋友们!我回去试试</P>

laoxie_198 发表于 2006-11-24 11:08:00

<P><FONT color=#000066><B><A name=39427><FONT color=#000066><B>iq0050</B></FONT></A>朋友:还是读取不了图元</B></FONT></P>

iq0050 发表于 2006-11-24 14:49:00

<P>看了你另一篇帖子,只从代码上看,确实看不出什么问题.想调你的代码,但要建立的东西实在太多.读了那篇,感觉主要问题是出在MODELSPACE的COUNT属性上,若COUNT值大于0,你的acSelecttionSetLast就能够取到值了.</P>
<P>若我进行调试,要确定一下,在从数据库中读取数据后,加入图元时,MODELSPACE的COUNT的属性是如何变化的.若这时就为空,用一下UPDATE看看有没有变化.</P>
<P>感觉上,一定是加入图元后MODEL的COUNT就一直为空.要在这上想办法.和你的选择集的语句该没关.</P>
<P>没法进行调试,只能凭猜测.如果调试成功了,告诉一下问题出在哪了,大家共享一下.</P>

laoxie_198 发表于 2006-11-24 17:15:00

我从库里调出一个数据,然后在cad里生成图形,再将库里主键的值加到扩展数据里.我明明是生成图形了的,怎么值还是0呢?是不是cad里生成图形要一段时间才分配数据给图元?

iq0050 发表于 2006-11-24 19:18:00

<P>我用VBA试了一下,直接发出SENDCOMMOND命令画线,MODELSPACE的COUNT的值会马上得到更新.只能是你的两个函数所指向的THISDRAWING不是同一图形了.你在两个函数都设置一下断点,看看两个函数的THISDRAWING的所有属性是否相同(同一对象).如果是,可能是你两函数中间执行了其它一些函数更改了THISDRAWING的一些值.在每一个执行的函数中设置断点,看THISDRAWING的变化有可能找到错误点.</P>
<P>&nbsp;</P>
页: [1] 2
查看完整版本: [求助]急求高手帮忙!!!