1

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

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

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

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

  • 选择颜色=“蓝色]”

UniObject 的 UniCommand 应该输入什么:

  • 选择带有@ID 的颜色,例如“BLU ...”

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

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

4

3 回答 3

3

ECLTYPE "U" 命令适用于 TCL 的交互式会话,但我可以看到从 UniObjects 永久设置是多么棘手。

一个很容易知道的口口相传的 Unidata 技巧是,小写动词始终以 ECLTYPE U 执行。因此,无论帐户的风格如何,您都会得到您正在寻找的行为。所以这应该可以正常工作:

select COLORS WITH @ID LIKE "BLU..."
于 2011-10-10T23:13:50.160 回答
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 是否被解析。

于 2009-09-09T16:23:44.360 回答
2

问题是您的 Unidata 环境设置为使用 PICK 解析器解析命令,但 UniCommand 对象正在执行 Unidata 的本机解析器。(LIKE 和 ... 语法来自 Unidata 的本机模式,它是从 Prime Information 建模的。)

我在 UniSession 或 UniCommand 上寻找可以更改用于 Execute 方法的解析器的属性,但没有找到。但是,UniCommand 的文档说它相当于 EXECUTE 基本语句。这和一些 UDT.OPTIONS 命令可能会为解决方法打开大门,即使 UniObjects 不直接支持它,您也可以使用 PICK 命令语法。

Unidata 的 EXECUTE 命令可以接受多个命令,以@AMs 分隔,并会一个接一个地执行它们,只有在全部处理完后才返回。(它有点像一个迷你过程。)所以,在属性 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。在“Pick® 兼容性”部分查看文档,特别是 udto.pdf。


综上所述,当我使用 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)。)希望这会有所帮助。

于 2009-09-09T16:16:27.357 回答