Sql 访问Enterprise Architect中的Repository.GetElementSet时发生异常

Sql 访问Enterprise Architect中的Repository.GetElementSet时发生异常,sql,vba,enterprise-architect,Sql,Vba,Enterprise Architect,我尝试使用VBA脚本在EnterpriseArchitect中自动化元素之间的可跟踪性。如果元素之间已经存在可追溯性,我需要跳过这些元素 我使用一个简单的查询编写,其中对象ID存在于EAP中 set useCaseCollection = Repository.GetElementSet("select Start_Object_ID from t_connector where (Start_Object_ID = -1222814411 and End_Object_ID = 505

我尝试使用VBA脚本在EnterpriseArchitect中自动化元素之间的可跟踪性。如果元素之间已经存在可追溯性,我需要跳过这些元素

我使用一个简单的查询编写,其中对象ID存在于EAP中

   set useCaseCollection = Repository.GetElementSet("select Start_Object_ID from t_connector where (Start_Object_ID = -1222814411  and End_Object_ID = 505879126 and Connector_Type = 'Realisation')",2)
   If Err.Number <> 0 Then
   Session.Output( useCaseCollection.Count)
   End if 
   On Error Goto 0
set useCaseCollection=Repository.GetElementSet(“从t_连接器中选择开始对象ID,其中(开始对象ID=-1222814411和结束对象ID=505879126,连接器类型='realization')”,2)
如果错误号为0,则
输出(useCaseCollection.Count)
如果结束
错误转到0

现在的问题是,如果元素之间存在可追溯性,我会得到一个异常,因为在集合中找不到项。如果没有可追溯性,那么它会将值打印为零。上述方法有什么问题吗?或者这个问题还有其他解决方案吗?

我想答案很简单
GetElementSet
仅对
t\u对象(元素)有效,对
t\u连接器无效。改用
SQLQuery
。或者使用
JOIN
实际返回连接的元素,而不是对象ID

大致如下:

dim useCaseCollection as EA.Collection
set useCaseCollection = Repository.GetElementSet("select * from t_object WHERE object_ID in (SELECT start_object_id FROM t_connector)",2)      
Session.Output( useCaseCollection.Count)

我认为将查询中的
Start\u Object\u ID
字段的别名更改为
Object\u ID

set useCaseCollection = Repository.GetElementSet("select Start_Object_ID as Object_ID from t_connector where (Start_Object_ID = -1222814411  and End_Object_ID = 505879126 and Connector_Type = 'Realisation')",2)

当然,假设查询的其余部分是可以的;我从未见过负对象ID。

谢谢,别名正在工作。但我怀疑别名是列名的缩写,Start_Object_ID和Object_ID都返回相同的值。因此GetElementSet正在搜索“Object_ID”,而不是它的类型或值。我也从未见过负的Object ID,我教过它可能是EA功能。是的,我怀疑EA checks在查询名为“Object_ID”的列的结果集中查找. 其他一切都可能被忽略。