我是UniObjects世界的新手,因为自从它首次亮相以来我一直在.NET领域。构建一个简单的应用程序以返回UniCommand语句的选择列表后,我注意到UniData和UniObjects如何解析UniCommand语句存在一些主要差异。从我发现的情况来看,它似乎是所使用的PICK风味的差异。
我要问的是其他UniObjects程序员(UniVerse或UniData)知道可以执行的命令的差异或知道,以便在此处列出它们。我问这个是因为很难找到能够和不能成为命令的文档。
以下是一个示例:(两者都返回相同来源的相同结果)
我们将进入UniData :(如果在UniCommand中给出解析器错误)
应该在UniObject的UniCommand中输入什么:
注意UniData的通配符是“(”方括号),其中UniCommand是“......”(省略号)。还要注意UniData如何接受相等运算符以及UniCommand如何使用LIKE运算符和WITH。
此外,如果任何人都有关于所有可用命令的文档链接,他们也可以在此处发布。
答案 0 :(得分:3)
ECLTYPE“U”命令与TCL的交互式会话一起工作,但是我可以看到从UniObjects永久设置是多么棘手。
口口相传Unidata技巧,方便知道是小写动词总是以ECLTYPE U执行。所以无论风味如何,你都会得到你正在寻找的行为的帐户。所以这应该工作正常:
select COLORS WITH @ID LIKE "BLU..."
答案 1 :(得分:2)
问题是您的Unidata环境设置为使用PICK解析器解析命令,但UniCommand对象正在执行Unidata的本机解析器。 (LIKE和...语法来自Unidata的本机模式,它是根据Prime信息建模的。)
我在UniSession或UniCommand上查找了一个属性,该属性将更改用于Execute方法的解析器,但没有找到。但是,UniCommand的文档说它等同于EXECUTE基本语句。这个以及一些UDT.OPTIONS命令可以为解决方法打开大门,即使UniObjects不直接支持它也可以使用PICK命令语法。
Unidata的EXECUTE命令可以接受由@AM分隔的多个命令,并将一个接一个地执行它们,只有在处理完所有命令后才返回。 (这有点像迷你proc。)因此,在属性1中至少使用“UDT.OPTIONS 2 ON”命令构建命令,然后是您可能需要的任何其他命令,最后是最后一个所需的PICK命令属性。然后通过UniCommand对象的Execute方法立即发送整个束。
UDT.OPTIONS 2的文档如下:
Determines the parser the system uses to interpret UniQuery commands.
ON System uses the Pick® parser.
OFF System uses the UniData parser.
还有其他一些与PICK兼容性相关的UDT.OPTIONS。查看文档,特别是udto.pdf,在“Pick®兼容性”部分中。
所有这一切,当我使用UniObjects时,我只使用它来调用基本子程序,并处理服务器端例程中的所有其他内容。
编辑:C#代码示例
UniSession s = UniObjects.OpenSession("machine", "user", "password", "/path/to/account", "udcs");
UniCommand c = s.CreateUniCommand();
c.Command = "UDT.OPTIONS 2 ON" + "\xfe" + "SELECT COLORS = \"BLU]\"";
c.Execute();
“\ xfe”是属性标记。 (这就是Pick-speak中的CHAR(254)。)希望这会有所帮助。
答案 2 :(得分:2)
您描述的差异是UniData中ECLTYPE的差异,它完全独立于UniObjects。如果您将UniData帐户的ECLTYPE设置为“U”,它将接受语法:
SELECT COLORS WITH @ID LIKE "BLU..."
如果将ECLTYPE设置为“P”,它将接受语法:
SELECT COLORS = "BLU]"
UniObjects for .NET文档声明:
“在UniData系统上,ECLTYPE U是 最好。您可能会遇到变化 与其他ECLTYPE或UDT.OPTIONS 设置“。
我从文档中不清楚UniCommands是否总是使用ECLTYPE "U"
执行,或者是否有一个参数可以让您配置解析器类型。您可以尝试从UniObjects会话中执行ECLTYPE "P"
命令,然后查看具有“P”语法的后续UniCommands是否会被解析。