UniData的UniCommand差异

时间:2009-09-09 15:09:12

标签: .net unidata universe pick uniobjects

我是UniObjects世界的新手,因为自从它首次亮相以来我一直在.NET领域。构建一个简单的应用程序以返回UniCommand语句的选择列表后,我注意到UniData和UniObjects如何解析UniCommand语句存在一些主要差异。从我发现的情况来看,它似乎是所使用的PICK风味的差异。

我要问的是其他UniObjects程序员(UniVerse或UniData)知道可以执行的命令的差异或知道,以便在此处列出它们。我问这个是因为很难找到能够和不能成为命令的文档。

以下是一个示例:(两者都返回相同来源的相同结果)

我们将进入UniData :(如果在UniCommand中给出解析器错误)

  • SELECT COLORS =“BLU]”

应该在UniObject的UniCommand中输入什么:

  • 使用@ID LIKE选择颜色“BLU ...”

注意UniData的通配符是“(”方括号),其中UniCommand是“......”(省略号)。还要注意UniData如何接受相等运算符以及UniCommand如何使用LIKE运算符和WITH。

此外,如果任何人都有关于所有可用命令的文档链接,他们也可以在此处发布。

3 个答案:

答案 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是否会被解析。