Zobrazit plnou verzi pøíspìvku: ActiveSelectionSet po Query.Execute

MarianA
12.01.2006, 14:22
Zdravim,  
mam problem vo VBA pri ziskani objektov po Query.Execute do SelectionSet-u pomocou ThisDrawning.ActiveSelectionSet. V pripade, ze query vyberie nejake objekty ActiveSelectionSet ich vrati v SelectionSet-e. 
 Ked Query.Execute nevyberie ziadny objekt ActiveSelectionSet vrati objekty vybrate v poslednom SelectionSet-e. A nie prazdny SelectionSet ako ocakavam.
Vdaka za kazdu radu, pomoze mi tiez rada ako dostat vo VBA objekty pomocou Query do SelectionSet-u.
                                                   Marian

MarianA
17.01.2006, 09:24
na upresnenie posielam kod.
1. v pripade ze v pripojenom vykrese sa nachadzaju objekty s layer = 0 SelectionSet po query vrati objekty s layer = 0. Ak sa nenachadza, vrati  vsetky objekty z predchadzajuceho SelectionSet-u.
2. taktiez v danom pripade nefunguje Query.Execute, ale iba ThisDrawing.SendCommand "_MAPWSQUERYEXECUTE "
Sub QueryToSelectionSet()    Dim oQry As Query    Dim oQLeaf As QueryLeaf    Dim oQBranch As QueryBranch    Dim oProject As Project    Dim oUtil As AcadUtility    Dim sLayer As String        sLayer = "0"       Dim oProjectOptions As ProjectOptions    Dim oAcadSelSet As AcadSelectionSet        Set oUtil = ThisDrawing.Utility    Set oProject = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Appli cation").Projects(ThisDrawing)    Set oProjectOptions = oProject.ProjectOptions        Set oAcadSelSet = ThisDrawing.SelectionSets.Add("AllObjectsSelected")    If Not Nothing Is oAcadSelSet Then        oAcadSelSet.Select acSelectionSetAll        oUtil.Prompt "Before _MAPWSQUERYEXECUTE oAcadSelSet.Name = " & oAcadSelSet.Name & vbCrLf        oUtil.Prompt "Before _MAPWSQUERYEXECUTE oAcadSelSet.Count = " & CStr(oAcadSelSet.Count) & vbCrLf        oAcadSelSet.Clear        oAcadSelSet.Delete    End If        oProjectOptions.MkSelSetWithQryObj = True        Set oQry = oProject.CurrQuery    oQry.Clear    Set oQBranch = oQry.QueryBranch        Set oQLeaf = oQBranch.Add(kPropertyCondition, kOperatorAnd)    If True = oQLeaf.SetPropertyCond(kLayer, kCondEq, sLayer) Then        oQry.Mode = kQueryDraw        If True = oQry.Define(oQBranch) Then '           ;  If False = oQry.Execute( ) Then '           ;      ThisDrawing.Utility.Prompt "Query.Execute fail" '           ;  End If              ThisDrawing.SendCommand "_MAPWSQUERYEXECUTE "              oUtil.Prompt "Execute Query for Layer = " & sLayer & vbCrLf        End If    End If        Set oAcadSelSet = ThisDrawing.ActiveSelectionSet    If Not Nothing Is oAcadSelSet Then        oUtil.Prompt "After _MAPWSQUERYEXECUTE oAcadSelSet.Name = " & oAcadSelSet.Name & vbCrLf        oUtil.Prompt "After _MAPWSQUERYEXECUTE oAcadSelSet.Count = " & CStr(oAcadSelSet.Count) & vbCrLf        oAcadSelSet.Clear        oAcadSelSet.Delete    End If        oQry.Clear    Set oUtil = Nothing    Set oQry = Nothing    Set oQBranch = Nothing    Set oQLeaf = Nothing    Set oAcadSelSet = Nothing    End Sub

MarianA
18.01.2006, 11:32
Zdravim,
podobny kod som nasiel ako odpoved na Query so Selection Setu na adn.autodesk.com. Je v podstate identicky, akurat volanie query je
ThisDrawing.SendCommand "(ade_qryexecute)" & Chr(13)
No aj tak to neriesi problem, ked je pocet objektov, ktore vyberie query rovne nule. Je nejaka moznost zistit vo VBA pocet objektov, ktore vrati Query?
dik