我们有一个winforms应用程序,必须与AS400交谈.为此,我们在Winforms应用程序中导入了IBM.Data.DB2.iSeries类,并在我们的机器上安装了IBM System I Access for Windows.它必须具有System I Access,否则它将不与AS/400通信.在我的64位开发机器上一切正常.它也适用于客户端的64位机器.但是,当我们尝试在32位机器上安装它时,我们会遇到Bad Image格式异常.我们尝试只使用x86安装程序而不是任何cpu,但这不起作用(同样的坏图像异常).有任何想法吗?
我有一个Java应用程序,我将使用CommandCall远程调用它.
目前我已将其放在/home/username文件夹中,并在JAVA命令的CLASSPATH参数中指定此文件夹.
但现在我必须将应用程序发送给客户端,似乎这些是可能的位置
/myapp/QOpenSys/myapp.这篇ITJungle文章大致提到了这一点但我没有在iSeries文档中找到推荐位置的提及.
那么在iSeries上部署Java应用程序的推荐位置是什么?
我试图使用ODBC驱动程序和VBA从远程计算机上的AS400数据库中读取数据.我可以成功建立连接,但没有查询返回数据.所有查询都会遇到错误"[IBM] [System i Access ODBC Driver] [DB2 for i5/OS] PWS9801 - 库SQLSECR0 QSYSMCD中的用户出口程序拒绝了该函数".请帮我...
我正在尝试在JAVA中读取AS400假脱机文件.我用这段代码读了它.但问题是它只检索该假脱机文件的一个页面详细信息.但我想阅读并获取所有页面详细信息.谁知道怎么做?
提前致谢!
代码:
try {
jTextArea1.setText(null);
DefaultTableModel DTM =(DefaultTableModel) jTable1.getModel();
int SR = jTable1.getSelectedRow();
String SPLFNAME = (String) DTM.getValueAt(SR, 0);
String SPLFNUMBERT = (String) DTM.getValueAt(SR, 1);
String JOBNAME = (String) DTM.getValueAt(SR, 3);
String JOBUSER = (String) DTM.getValueAt(SR, 4);
String JOBFNUMBER = (String) DTM.getValueAt(SR, 5);
int SPLNO = Integer.parseInt(SPLFNUMBERT);
AS400 sys = new AS400();
SpooledFile sf = new SpooledFile( sys, // AS400
SPLFNAME, // splf name
SPLNO, // splf number
JOBNAME, // job name
JOBUSER, // job user
JOBFNUMBER ); // …Run Code Online (Sandbox Code Playgroud) 我有以下RPGLE程序:
dmypgm pr extpgm('MYPGM')
d myarr like(myarr)
d somevar like(somevar)
d myarr s 64a dim(100)
d somevar s 65a
/free
callp mypgm(myarr: somevar);
*inlr = *on;
/end-free
Run Code Online (Sandbox Code Playgroud)
当我尝试在V6R1盒子上编译它时,我收到错误消息:
RNF5343 30 1 Array has too many omitted indexes; specification is ignored.
Run Code Online (Sandbox Code Playgroud)
一些文档告诉我:
RNF5343
数组有太多省略的索引; 规范被忽略了.
三十
原因.....:在赋值运算符右侧用作操作数的数组的省略索引数大于指定为赋值结果的数组的省略索引数.
恢复...:减少操作数的省略索引数; 或者增加结果的省略索引数.再次编译.
这不是很有用,因为这是一个程序调用,而不是尝试分配一个值(比如EVAL语句或其他东西).
如果我将外部程序调用的声明更改为:
dmypgm pr extpgm('MYPGM')
d myarr 64a dim(100)
d somevar like(somevar)
Run Code Online (Sandbox Code Playgroud)
该程序将编译得很好.
那么如何将LIKE关键字与数组一起用于外部程序定义?
我写信给你是因为我不能to_date在AS400数据库上使用运算符.
使用Oracle数据库,我使用:
datefield >= to_date('01/01/2014','DD/MM/YYYY')
Run Code Online (Sandbox Code Playgroud)
但是使用AS400,我收到一个错误:
不兼容的运营商
我可以使用另一种功能来替换to_date吗?
我试图从我的Java程序连接到IBM中型(AS400)计算机,然后重设用户密码。使用Jt400.jar,我设法做到了。但是问题是,我需要将端口设置为专门使用端口23。我希望它按照tn5250的方式连接到AS400。从IBM网站在这里,我知道我可以利用这样做as400.connectToPort(23)。
令我感到困惑的是,当我添加该方法时,我得到了一个java.lang.RuntimeException: java.lang.NegativeArraySizeException。我曾尝试寻找什么导致此异常导致我在这里和更多的解释在这里。这是我的代码:
public void executeSetPassword(final String userName, final GuardedString password) {
if ((userName != null) && (password != null)) {
final String host = configuration.getHost();
final String remoteUser = configuration.getRemoteUser();
GuardedString passwd = configuration.getPassword();
boolean isSuccessful;
final AS400 as400 = new AS400();
try {
as400.setSystemName(host);
as400.setUserId(remoteUser);
passwd.access(new Accessor(){
@Override
public void access(char[] clearChars) {
try {
as400.setPassword(new String(clearChars));
}catch (Exception e) {
e.printStackTrace();
}
}});
as400.setGuiAvailable(false);
as400.connectToPort(23);
final CommandCall …Run Code Online (Sandbox Code Playgroud) 我已经制作了一个CL程序来简化更改所有者,USRPRF和对象的权限.它利用GRTOBJAUT等进行更改.这是参数定义:
pgm parm(&libobj &type &owner &usrprfown &user1 &auth1 +
&user2 &auth2 &user3 &auth3)
...
dcl var(&libobj) type(*char) len(21)
dcl var(&type) type(*char) len(10)
dcl var(&user1) type(*char) len(10)
dcl var(&auth1) type(*char) len(10)
...
Run Code Online (Sandbox Code Playgroud)
这就是我称之为GRTOBJAUT的方式:
grtobjaut obj(&libobj) objtype(*all) user(&user1) +
aut(&auth1)
Run Code Online (Sandbox Code Playgroud)
但是,只有前10个字符&libobj实际传递给GRTOBJAUT.我已经在调试器中验证了grtobjaut obj('MYLIB/TEST')尽管&libobj包含完整的字符串,但传递MYLIB/TEST1234的结果仍然存在.根据文档,这应该是GRTOBJAUT命令的正确语法,因此允许超过10个字符的长路径.实际情况并非如此吗?交互式GRTOBJAUT和CL GRTOBJAUT之间有区别吗?我该如何工作?
该程序是为v6.1编译的,并在支持v7.1的环境中运行.
编辑:同样的问题适用于CHGOBJOWN.
我是ILE RPG的新手.今天我开始从我的工作中找出书.在本章的其中一章中,有一些使用Substring函数的示例%SUBSTR.这是代码:
DMOD S 5 INZ('VWXYZ')
DCON S 5 INZ('abcde')
DLENGTH S 5 0 INZ(2)
DSTART1 S 5 0 INZ(3)
DSTART2 S 5 0 INZ(4)
D*
C mod DSPLY
C con DSPLY
C start1 DSPLY
C start2 DSPLY
C length DSPLY
C*
C EVAL %SUBST(mod:3:2) = con
C*
C EVAL %SUBST(mod : 3 : 2) = %SUBST(con : 4 : 2)
C*
C EVAL %SUBST(mod:start1:length) =
C %SUBST(con:start1:length)
C*
C EVAL %SUBST(mod:start1-1:length) =
C %SUBST(con:start2/2:length+1)
C*
C MOVE …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.Net应用程序来调用AS400程序,以便在QTEMP下创建一个文件.但是当我尝试从QTEMP中选择此文件时,它不存在.
我明白原因:调用程序和选择文件是不同的工作.我无法访问其他工作的QTEMP.
我对AS400知之甚少,我能找到的唯一方法就是在QTEMP以外的其他库下创建这个文件.但它会影响我不想做的其他应用功能.
我使用cwbx.dll来调用AS400程序,然后我使用IBM.Data.DB2.iSeries从QTEMP中选择文件.显然他们是两个连接打开.我不确定是否在as400概念下,它们可能是两个独立的工作.
这是调用程序的函数:
As400Caller1.CallAs400Program("myProgram", "myLibrary", paramsList1);
Run Code Online (Sandbox Code Playgroud)
这是CallAs400Program函数:
public void CallAs400Program(string programName, string libraryName, List<AS400Param> parameters) {
try
{
system.Connect(cwbcoServiceEnum.cwbcoServiceRemoteCmd);
//check connection
if (system.IsConnected(cwbcoServiceEnum.cwbcoServiceRemoteCmd) == 1)
{
//create a program object and link to the system
Program program = new Program();
program.LibraryName = libraryName;
program.ProgramName = programName;
program.system = system;
//create a parameter collection associated with the program and pass data
ProgramParameters prms = new ProgramParameters();
foreach (AS400Param p in parameters)
{
prms.Append(p.ParameterName, cwbrcParameterTypeEnum.cwbrcInout, p.ParameterLength);
if (!p.OutParam)
{
prms[p.ParameterName].Value …Run Code Online (Sandbox Code Playgroud)