【问题标题】:UniCommand differences for UniDataUniData 的 UniCommand 差异
【发布时间】:2009-09-09 15:09:11
【问题描述】:

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

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

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

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

  • 选择颜色 = "BLU]"

UniObject 的 UniCommand 应该输入什么:

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

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

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

【问题讨论】:

标签: .net unidata universe pick uniobjects


【解决方案1】:

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

一个很容易知道的口口相传的 Unidata 技巧是小写动词 always 执行为 ECLTYPE U。因此,您将获得所需的行为,无论其风格如何的帐户。所以这应该可以正常工作:

select COLORS WITH @ID LIKE "BLU..."

【讨论】:

  • 我希望始终作为 ECLTYPE 执行到“P”,即选择带有 @id 的颜色,例如“BLU]”
【解决方案2】:

您所描述的差异是完全独立于 UniObjects 的 UniData 中的 ECLTYPE 差异。如果您将 UniData 帐户的 ECLTYPE 设置为“U”,它将接受以下语法:

SELECT COLORS WITH @ID LIKE "BLU..."

如果您将 ECLTYPE 设置为“P”,它将接受以下语法:

SELECT COLORS = "BLU]"

UniObjects for .NET 文档指出:

"在 UniData 系统上,ECLTYPE U 是 最好的。您可能会遇到变化 与其他 ECLTYPE 或 UDT.OPTIONS 设置。”

从文档中我不清楚 UniCommand 是否总是使用 ECLTYPE "U" 执行,或者是否有一个参数可以让您配置解析器类型。您可以尝试从 UniObjects 会话中执行 ECLTYPE "P" 命令,然后查看后续带有“P”语法的 UniCommands 是否被解析。

【讨论】:

  • 我确实尝试使用 SELECT COLORS = "BLU]" 内联执行 ECLTYPE "P" 以及单独的语句,但运气不佳。 UniObjects 必须有自己的解析器??
【解决方案3】:

问题在于您的 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)。)希望这会有所帮助。

【讨论】:

  • 我似乎没有 udto.pdf。是在 UniData 客户端工具中还是从网上下载的?你说的确实如此,我也找不到使用 UniObjects 更改解析器的方法。我们不会离开 UniData 而是谈论锁定,因为文档很难找到。
  • 我从 1993 年开始阅读 UniData 的 UniBasic 参考指南,但它们的语法是我们一直在使用的。 (根据我的知识和我问过的情况)
  • 顺便说一句,当我使用@AM UniObjects 时说它不是动词。此外,当我进入 UniData 终端时,它也说了同样的话。也许它的语法不正确?我在上面提到的参考书中也没有看到。
  • 这些文档由我们的系统管理员放置在我们的网络共享中。我不知道在分发 CD 上哪里可以找到它们。哦,我只是浪费了 10 分钟试图在 IBM 的网站上查找文档。那是一个可怕的网站:搜索不起作用,即使它显示结果,链接也是死的。尴尬。我知道他们在某个地方,这使挫败感加倍。我将编写一个代码示例并编辑我的答案。
  • 这个社区wiki是什么时候开始的?对我来说似乎是一个合法的问题。
猜你喜欢
  • 2011-01-05
  • 2016-09-08
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2017-05-29
  • 2011-02-05
相关资源
最近更新 更多