【问题标题】:"Improper data type" with query in Rocket UNIVERSE databaseRocket UNIVERSE 数据库中的“不正确的数据类型”查询
【发布时间】:2014-03-22 13:32:18
【问题描述】:

我正在尝试从 UV 命令行做一个简单的 LIST:

LIST PSUB TSN.COMMENT

我得到以下信息:

LIST PSUB TSN.COMMENT 07:37:39am  22 Mar 2014  PAGE    1
@ID..................................... TSN..........

**Program "DICT.GET.LEDGER.DET.VALUE": Line 9, Improper data type.**

进一步看,我可以看到该领域的以下详细信息:

TSN.COMMENT
TYPE: I
LOC: SUBR('DICT.GET.LEDGER.DET.VALUE',FIELD(@ID,'~',4),FIELD(@ID,'~',6),FIELD(@ID,' ',5)"R%3",'3')<1,1,2>
CONV:
NAME: TSN
FORMAT: 13L
SM: S 

我们针对此数据库使用的应用程序是 EPICOR Ecpise——从他们提供的包含该字段的工具生成的报告确实有效,所以我认为数据文件没有问题——我认为是只有我;我对这种类型的数据库不是很熟悉,不知道我不知道什么。

DICT.GET.LEDGER.DET.VALUE 程序如下:

ED OC DICT.GET.LEDGER.VALUE 531 行。

----: P
0001:           SUBROUTINE (VAL,ATTB)
0002:           $INCLUDE AD.DIR CC~COMMON
0003: *
0004: *
<--And lots more after that -->

我认为代码没问题,因为有很多其他我键入的字段使用类似的 SUBR,当从 UV 调用目录时,这些错误会以相同的方式出现。我想我只是错过了一些东西。

然后看看CC~COMMON里面有什么:

          COMMON /STDCOM/ COMDATA(150),SECURITY,MAIN.MEN,FILES(50),AOFILES(150),GLDATA(35)
** Version# 13 - 05/07/2008 - 10:24am - BABS - main

          COMMON FLAGS(100)
          COMMON TCL.LEVEL., RECALL.FLAG, E.MESS.
          COMMON LED(200),OLED(200),LD(150),OLD.LD(150)
          COMMON PRD(200),PRDP(30),PRD.BR(70),PRDC.BR(30),PRDD.BR(40)
          COMMON PGRP(10),PLNE(30),PLNE.BR(20),PLNB(5),BL.BR(50)
          COMMON CUS(200),CUSS(200),MA(40)
          COMMON TAX(20),AR(50)
          COMMON SCROLL.VAR, SVIEW.DEF., SVIEW.DATA.(10)

          $INCLUDE CC EQU.ESC.OBJECT
          $INCLUDE CC EQUATES

          PROMPT CHAR(0)
!BABS~05/07/08~10:24
* Compiled by ECLIPSE on 02/11/12 09:29 from CC:COMMON
*** Version# 13 - 05/07/2008 - 10:24am - BABS - main

【问题讨论】:

  • 子程序DICT.GET.LEDGER.DET.VALUE的代码是什么?您可以通过在命令行输入“ED DICT.GET.LEDGER.DET.VALUE”来打开程序。通常程序文件是BP。因此,您的命令将是“ED BP DICT.GET.LEDGER.DET.VALUE”。如果这不起作用,您可以通过查看程序“ED VOC DICT.GET.LEDGER.DET.VALUE”的 VOC 条目的第 2 行来查找程序文件
  • 另外,如果您将 LIST 选择限制为仅一条记录,您是否仍然会收到错误:LIST SAMPLE 1 TSN.COMMENT PSUB
  • 感谢您的意见!是的,只是做一个 1 的样本会产生相同的错误。我已经发布了上面程序文件的代码。感谢您找到它的命令。
  • 现在我已将子程序的代码放入问题中,这是否说明了问题?
  • 看这段代码,第9行的LEDFILE还没有打开。我没有看到已打开此文件的参数变量、OPEN 语句或 COMMON 块。这很可能是您的问题之一。

标签: universe


【解决方案1】:

您需要创建一个包装例程来调用 OPEN.STANDARD.FILES:

>ED BP OPEN.STANDARD.FILES.TCL
001 * OPEN.STANDARD.FILES.TCL
002 CALL OPEN.STNADARD.FILES
003 STOP
004 END

>BASIC BP OPEN.STANDARD.FILES.TCL
>CATALOG BP OPEN.STANDARD.FILES.TCL

然后你可以在你的 list 语句之前执行 OPEN.STANDARD.FILES.TCL。如果您不启动 Epicor 的框架,这一点很重要,例如当您想使用 .NET 或 ODBC 访问这些数据时。

-内森

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多