问题标签 [rpgle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
14136 浏览

rpgle - 在 ILE RPG 中检查 sql found 条件的正确方法是什么?

在 RPG 中使用嵌入式 SQL 时,您通常会使用游标和dow-loop 来处理结果中的所有行。循环中的条件以某种方式依赖于SQLCOD和/或SQLSTTSQLRPGLE 程序中的一些全局可用变量?

但是检查这些值的正确方法是什么?有些人建议SQLCOD = 0其他人not (SQLCOD = +100 or SQLSTT = '02000')。一个在所有警告上都失败了,另一个在某些错误上没有失败,所以我不满意。

为了说明我用一些代码做什么:

我在这里寻找正确的返回语句,如果没有发生错误,这将使我遍历所有行,并在发生错误时让我离开。一些体面的方法来检查错误的奖励积分。

0 投票
4 回答
4272 浏览

ibm-midrange - 如何创建 RPG IV 以从 DB2 插入和检索数据

我是 AS/400 的新手,熟悉数据描述规范 (DDS) 语句。我有两个使用数据描述规范创建的表。

我需要编写两个 RPGLE 程序来从这些表中插入和检索。

帝皇档案

部门文件

0 投票
1 回答
553 浏览

java - 是否可以重新使用在 RPG 的另一个 OS/400 作业中创建的 JVM?

我有一个调用 Java 类的 RPG PGM,如果 Job 中没有 JVM,则 RPG 运行时会在调用 Java 类时添加一个。此后,来自同一 RPG 程序或同一 Job 中的另一个 RPG 程序的所有调用都使用相同的 JVM。

问题是,如果我从另一个 Job 启动相同的 PRG 程序,它会启动另一个 JVM,基本上我有一个用于 Job 的 JVM。

我想知道是否有可能只有一个 JVM 并从其他作业附加到它。

任何帮助将不胜感激。

这就是我试图通过程序集成 RPG/JAVA 的方式。但是由于某种原因,线程没有被触发。

0 投票
3 回答
3243 浏览

ibm-midrange - 如何防止用户在文本字段(字符类型)中输入特殊字符(如键盘中不可见的符号)?

如何防止用户在 AS400 的文本字段(字符类型)中输入特殊字符(如键盘中不可见的符号)?显然,大多数时候 iseries/as400 在接受它并将其保存到文件中没有问题,但有时当数据在下游报告系统中处理时,它会在系统中因不同的错误而被拒绝。有没有办法防止入口点本身?

例如:在客户的地址字段中,最终用户从网页或文档中复制粘贴 (ctrl + c ctrl + v) 详细信息,导致输入垃圾字符或空值,这些字符在存储时没有问题,但后来在其他报告应用程序中出现问题。

0 投票
3 回答
2683 浏览

ibm-midrange - 如何以编程方式确定 IFS 中文件的 CCSID?

我在 IFS 中有许多具有多种 CCSID(0、37、819、1200、1252 等)的文件,我的任务是编写一个简单的 RPGLE [1] 程序,该程序将允许用户查看任何这些文件的内容。

我们的系统 (V6R1) CCSID (DSPSYSVAL QCCSID) 是 65535 [2],我们的作业的默认 CCSID 是 37,这意味着当我尝试显示 CCSID 819 (ASCII) 时,我看到了垃圾——符号、随机颜色等。

我熟悉通过QtqIconvOpen API 将数据从一个 CCSID 转换为另一个,所以如果我知道一个文件的 CCSID 与我们的默认 CCSID 不同,我可以转换它。我几年前编写了代码来做到这一点,它工作得很好。

我的问题是以编程方式找出 IFS 文件的 CCSID。谷歌搜索后,我发现的唯一相关信息是来自 JamesA 的 Stackoverflow(如何确定 CPYFRMIMPF 命令中使用的 CCSID?),他指出您可以在 QSHELL 中执行“ls -S”以获取显示其 CCSID 的文件列表和文件名。

所以理论上我可以执行ls -S filename,解析输出以获取 CCSID,然后在必要时使用该 CCSID 执行数据转换。虽然这是一个丑陋的黑客,但如果可能的话,我更喜欢使用 IBM API。

有谁知道这样的 API 或更优雅的 hack,而不是从 解析列表ls -S filename

[1] 我使用 C API's open()read()close()进行数据的实际读取。

[2] 我知道 65535 是一个糟糕的选择,但我对此无能为力。

0 投票
1 回答
1166 浏览

pdfbox - 访问我加载的 .pdf 页面(使用 pdfbox)(我正在使用 RPG)

我正在尝试修改使用 PDFBOX 加载的 .pdf。我正在使用 RPG,我发现 Java 代码可以从加载的 .pdf 访问页面

我看到的另一个代码是

我遇到的问题是将代码转换为 RPG。

我现在拥有的代码只是加载我的 .pdf 模板创建一个文档目录并创建我的列表并保存它(XLEnvVar 是我获取类路径的地方)。

获取原型

上面的原始帖子

我想我会发布我的 PDFBOX 程序,所以互联网上有另一个在 RPG 中使用 PDFBOX 的示例。这是一个完整的示例(它使用我公司的服务程序,而 SQL 只是一个示例 shell,因此如果有人要使用它,他们将不得不更改它们。但我解释了这些服务程序在做什么,以便您可以使用自己的公司服务程序或编写代码来完成这些服务程序所做的事情)。随意拿走这个并将其发布到其他地方,只需留下“编写者”块。希望这可以帮助任何使用 PDFBOX 的人。

以为我会在阅读我的代码后添加一些评论。我必须每年制作一个新文件夹。这就是 crtdir 正在做的事情。如果目录已经存在,那么已经创建的目录中的内容是安全的,crtdir 不会覆盖该目录。我将模板从一个位置加载到 /tmp 然后在再次移动之前保存到 /tmp 的原因是,当我使用 PDFBOX 时,jstring_new(' ') 最大为 30 个字符(包括 / 和空格和 . ) . 所以 myString = jstring_new('/tmp/2013/myreportnamethatistoolong.pdf') 该字符串的长度为 39 个字符,并且该字符串将被截断。当我制作字符串时,olong.pdf 将丢失。我可以使用 rpg 代码创建一个字符串并将该字符串传递给 jString_new() 并且长度超过 30 个字符并且它可以工作。

0 投票
4 回答
4541 浏览

db2 - SQLRPGLE 中 OPEN 游标上的 SQL -302

问题

我有一个 SQLRPGLE 程序,它执行如下所示的查询:

字段定义:

我在工作日志中看到以下错误:

当我提示输入其他消息信息时,我被告知:

这些错误是通过打开光标触发的:

我的 outq 中也有 QSQSVCDMP 文件,其中填充了转储信息。我在那里看到的唯一有用的东西是对 CPF4278 和 CPD4374 的引用

CPF4278 表示Query definition template &1 not valid.

CPD4374 是什么意思Field &1 and value &3 not compatible. Reason &5.

不幸的是,错误消息本身不存在,只有字符串“CPF4278”和“CPD4374”。

在我监视 SQL 错误代码的程序中,它们都是相同的:

错误状态/代码表示“参数或变量值无效”。

我试过的...

经过大量谷歌搜索后,我尝试过:

  1. 删除 ORDER BY 子句(在 OPEN 上,当有 ORDER BY 子句时,数据被提取和排序)
  2. 将所有 LEFT JOIN 更改为 INNER JOIN(这样做是为了确保右侧的结果记录中没有 NULL)
  3. 在 WHERE 子句中添加“ AND orapdt IS NOT NULL”
  4. 还有很多我忘记的事情

我在问什么...

如何找出哪个字段中有错误数据?我知道这HVR0001是无效的,但哪个字段由 表示HVR0001?我尝试以不同的顺序选择字段,但它总是HVR0001具有无效值。

理想情况下,我希望能够打印出所有 HVR* 字段/值,以便我可以检查它们。

当我查看编译列表时,没有列出 HVR* 字段。列出了一些 SQL_* 字段,我可以看到它们SQL_00011用于临时保存放入orapdt. SQL_00011定义与orapdt(7,0 packed) 完全相同。这是我查询中唯一的数字字段...

我觉得我的问题是由文件的连接方式引起的,以某种方式将无效值(可能为 NULL)放入我的orapdt字段中。

我还认为我的问题与一个接一个地执行许多这些查询有关(每个查询的某些 WHERE 细节都会发生变化),因为我可以将其中一个失败的查询放入它自己的程序中并运行它它工作正常。

这是在 DB2 for i (V6R1) 上,所有涉及的文件都是使用 DDS 创建的

编辑:这是 LIKE 语句所需的主变量(数据结构)和两个外部数据结构:

这是实际获取数据的 fetch 语句:

我之前没有包含这个只是因为当我打开游标而不是获取一行时发生错误。oOPEN 语句不应该对数据结构有任何了解。

至于 WHERE 子句中的哪些变化 - 所有这些都是动态构建的(因此可以更改),除了:

0 投票
1 回答
585 浏览

rpgle - 确定承诺控制是否正在运行

我正在尝试有条件地使用承诺控制。RPG 允许在它打开的文件上使用条件 COMMIT 关键字。由于我的一个程序是从触发器中调用的,因此我希望更高级别的逻辑来控制提交范围。这意味着,在触发器中,我需要确定提交控制是否有效,如果有效,则将可选参数传递给被调用程序。

有谁知道如何判断承诺控制当前是在 RPG 还是 DB2400 中运行?

0 投票
2 回答
182 浏览

ibm-midrange - 简单的 RPG 生锈了

我想做一个小型 RPG 程序,但很生疏。它类似于最近的SQL。

我想读取一个逻辑文件,并且只选择今天日期的那些记录。该字段定义为 NUMeric 8 0。 YYYYMMDD 这是执行此操作的方法吗?我只想阅读那些记录 = 今天的日期。(工作日期还可以)。

0 投票
2 回答
51247 浏览

ibm-midrange - CPF4131 在文件打开期间出现

CPF4131 出现在程序中的文件上的可能原因是什么。

我们如何解决这个问题?