有人可以帮我这个吗?我需要通过系统DSN检查我与AS400服务器的ODBC连接,如果某个特定的DSN不存在,则创建一个系统DSN.我试过谷歌搜索,但一直没能找到对我好的东西.
顺便说一下,我对编程很陌生.任何帮助都感激不尽.谢谢
我必须在iSeries计算机上更改CL程序.原始CL有一个名为&SEQ的变量.它是一个值为"001"的文本字段.是否有可能在CL中添加一个值使其成为'002'?我不熟悉CL编程,所以我不知道你是否可以在字符变量上做数学函数.谢谢你的帮助!
有没有办法为程序源指定,在编译期间应该使用哪些激活组选项?
在as/400上的大多数程序中,我们需要更改激活组的处理(因为默认行为根本没有用...).每次我编的程序之一,我一定要记得设置编译器选项(这是在PDM:进入14,打F4,变化DFTACTGRP来自*YES于*NO,打enter,变化ACTGRP到*NEW或者*CALLER,这取决于程序).因此,我们在开始时有很多带有注释的程序,有大量的惊叹号,提醒程序员这样做.是的,有时候你会忘记.
有没有诀窍,所以你不必记住自己?
我在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与我们的默认CCSID不同,我可以转换它.我在几年前编写代码来做到这一点并且工作正常.
我的问题是以编程方式查找IFS文件的CCSID.在谷歌搜索之后,我发现的唯一相关信息来自JamesA的Stackoverflow(如何确定CPYFRMIMPF命令中使用的CCSID?)谁指出你可以在QSHELL中执行"ls -S"以获得显示其CCSID的文件列表和文件名.
因此理论上我可以执行ls -S filename,解析输出以获取CCSID,然后在必要时使用该CCSID执行数据转换.这是一个丑陋的黑客,如果可能的话我更喜欢使用IBM API.
有谁知道这样的API或更优雅的黑客比解析列表ls -S filename?
[1]我使用C API open(),read()并close()实际读取数据.
[2]我知道65535是一个糟糕的选择,但我无能为力.
我正在看一个RPG计划.有一些这样的子程序:是否有任何工具可以将其创建为一个过程,可以在单独的过程中使用?
C Eval FinQty# = 0
C Eval OdCom# = OhCom#
C Eval OdOrd# = OhOrd#
C OdKey Setll OeOrd1
C OdKey Reade OeOrd1
C Dow %eof = *off
*
C If OdPrt# = OdAls# and
c %subst(odprt#:1:3) <> 'FRT'
C Eval FinQty# += OdQty#
C Endif
*
C OdKey Reade OeOrd1
C Enddo
*
Run Code Online (Sandbox Code Playgroud) 我一直在尝试查看AS400触发器的“触发器定义”,但似乎找不到帮助我的命令。我可以列出触发器,创建或删除触发器,但是如何查看触发器定义。
我正在尝试使用java程序中的JDBC连接到AS400 DB2数据库,但我无法连接,因为它提供了一个SQLException,指出没有为jdbc找到合适的驱动程序:as400://192.168.1.11
虽然我添加了没有为jdbc找到合适的驱动程序:as400://192.168.1.11
我将以下库添加到我的项目中:db2jcc_licence_cu.jar,db2jcc4.jar,jt400-6.4.jar.
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class ReadAllTables {
public static void main(String args[]) throws Exception {
//Class.forName ("com.ibm.as400.access.AS400JDBCDriver");
DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
// Enable logging
// DriverManager.setLogStream(System.err);
System.out.println("Getting Connection");
Connection c = DriverManager.getConnection ("?jdbc:as400://ipaddress","username","password");
DatabaseMetaData md = c.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
System.out.println(rs.getString(3));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我得到的错误:
在线程"main"java.sql.SQLException中获取连接异常:在java.sql.DriverManager.getConnection(java.sql.DriverManager.getConnection上的java.sql.DriverManager.getConnection(未知源)中找不到合适的jdbc驱动程序:as400://192.168.1.11来自com.test.ReadAllTables.main的未知来源(ReadAllTables.java:18)
提前致谢
在IBMi系统上,数据库服务器作业 - QZDASOINIT - 具有"最大使用次数"属性,这意味着一个QZDASOINIT作业将在结束之前接受配置的SQL请求数.默认值为200.但是,具有多个SQL语句的事务是否被视为单个请求?如果不是,如果一个事务包含200多个SQL语句会发生什么?
是否可以通过RPGLE中的物理文件获取指针读取的位置?
这样我可以存储该位置并稍后再回到它?
有没有一种方法可以在打印机文件的末尾附加其他行?我用于创建打印机文件的大多数技术(RPG O规范,写入外部定义的文件)都会使您每个程序只有一个输出文件。我想在一个程序或过程中写一些行,然后让另一个程序或过程打开文件并写其他行。
特定的用例是具有一个“订单标题”,该“订单标题”对于多个报表是相同的,而下面的行项目数据是特定于报表的。我想我可以将所有这些都保存在一个大型程序中,而报表的变体位于单独的RPG子例程中,但是我喜欢从多个不同程序中调用通用标头的模块化,并且将来可能还会有其他报告。
系统的体系结构可能会阻止这种技术,因为我不清楚如何保持文件打开并通过它,或者如何打开已经放入出队列的关闭文件。我过去曾经使用过CPYSPLF,虽然我可能可以使用它来读取以前编写的内容,但是创建一个文件,关闭它,将其复制到QTEMP,读取它,然后将其重新写入另一个文件中似乎毫无意义。然后删除第一个打印机文件。也许还有其他我没有想到的方法。