⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 122801_05.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>计算机世界日报:
用Delphi/400转换AS/400的打印文件
</title>
<!--***********-->
</head>

<body bgcolor="#FFFFFF" >














<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
用Delphi/400转换AS/400的打印文件
</h2></font>
<h3>
天津外轮代理公司
<br>朱志和  冯卫
</h3>
</center>
<p><font color="#ffffff">----</font>
随着Internet应用的日益广泛,外轮代理公司作为IBM的AS/400小型机的老用户,在实际的工作中,需要将AS/400中的数据以E-mail的方式与外界进行数据通讯的需求也越来越多。比如,需要将某一航次的货物舱单(Cargo Manifest)以E-mail的方式传给船公司,此货物舱单就是AS/400的打印文件(Spool File)。如何将AS/400的打印文件以E-mail的方式与外界进行数据通讯,其关键是将此打印文件转化为微机能支持的.txt文件格式。本文即介绍利用Delphi/400实现其过程的方法及步骤。
<p><font color="#ffffff">----</font>

Delphi for AS/400是Borland公司(现改为Inprise公司)专门为AS/400用户提供的用于开发AS/400应用程序的Delphi前端开发工具。除了具有Delphi 3.0的全部功能外,Delphi/400提供了与AS/400相兼容的三组元件--SCD400 Data、SCD400 System和SCD400 DB。其中SCD400 Data和SCD400 DB两组元件与普通Delphi 3.0所属两组元件Data Access和Data Controls中元件具有相同或类似的功能。在SCD400 System元件组中,提供的元件,可以直接调用AS/400 PGM程序和直接调用A/400 CL命令。
<p><font color="#ffffff">----</font>
<b>一、 在AS/400上编制实现打印货物舱单的RPG程序</b>
<p><font color="#ffffff">----</font>

    为叙述方便,假设所需要用到的AS/400上的文件(在AS/400中称为对象--Object)都放在TEST库(Library)中。DCPRTMF为打印文件,用来输出打印舱单的打印格式和内容。DCRPGMF为RPG程序,带两参数VSLCOD(船代码)和VOYNO(航次),用来生成舱单。
<p><font color="#ffffff">----</font>

<b>二、 在AS/400上将打印文件转化为AS/400的物理文件</b>
<p><font color="#ffffff">----</font>

在AS/400上建一物理文件MFPC(相当于其它数据库的Table),记录名为MP,字段名为MP198,长度为198字符。此物理文件用来保存货物舱单打印文件内容。这个过程用MFCPYSPL程序(CLP类型)来实现,程序如下:
<pre>

***************Beginning of data***************
01.0 PGM  PARM(&STRJOB &STRUSR &STRNBR)  

0002.00        DCL VAR(&STRJOB) TYPE(*CHAR) LEN(10)  
0003.00        DCL VAR(&STRUSR) TYPE(*CHAR) LEN(10) 
04.0 DCL VAR(&STRNBR) TYPE(*CHAR) LEN(6)  
0005.00     CPYSPLF    FILE(DCPRTMF) TOFILE(TEST/MFPC) + 
0006.00          JOB(&STRNBR/&STRUSR/&STRJOB) TOMBR(MFPC) +
0007.00            MBROPT(*REPLACE)  ①
0008.00    DLTSPLF   FILE(DCPRTMF) 
JOB(&STRNBR/&STRUSR/&STRJOB)  ②
0010.00     ENDPGM     
******************  End   of   data **************
</pre>
<font color="#ffffff">----</font>
上述文件定义了三个参数STRJOB、STRUSR和STRNBR,是与操作Spool File相关的参数。<p><font color="#ffffff">----</font>
①将打印文件(Spool File)拷贝到物理文件MFPC;②删除打印文件。
<p><font color="#ffffff">----</font>
<b>三、 用Delphi/400将AS/400上的打印文件转化为微机的文本文件</b>
<p><font color="#ffffff">----</font>

在进行程序处理以前,先在Delphi的Database Module进行如下VCL组件设置:
<p><font color="#ffffff">----</font>
1.AS400组件设置:name--AS4001。
<p><font color="#ffffff">----</font>

2.Table组件设置:name--MfpcTbl;
<br>tablename--MFPC。与AS/400上的物理文件连接。

<p><font color="#ffffff">----</font>
3.Call400组件设置:name--Call400PRTMF;
<br>AS400--AS4001;LibraryName--TEST;
<br>ProgramName--DCRPGPC;Params定义对应VSLCOD和VOYNO。

<p><font color="#ffffff">----</font>
4.Call400组件设置:name--Call400CPYSPL;
<br>AS400--AS4001;LibraryName--TEST;
<br>ProgramName--MFCPYSPL;Params
<br>定义对应STRJOB、STRUSR和STRNBR。

<p><font color="#ffffff">----</font>
5.Cmd400组件设置:name--Cmd400Addlible;
<br>AS400--AS4001;CommandLine--ADDLIBLE  LIB(TEST) 
<br> POSITION(*FIRST)。将TEST加入库表。

<p><font color="#ffffff">----</font>
6.Cmd400组件设置:name--Cmd400Rtvjob;AS400--AS4001;
<br>CommandLine--RTVJOBA JOB(&P.1) USER(&P.2) 
<br>NBR(&P.3) USRLIBL(&P.4)。用于获取运行MFCPYSPL程序所需要的参数。
<p><font color="#ffffff">----</font>

以下就是实现将AS/400上的打印文件DCPRTMF转化为微机的文本文件的源程序。

<pre>
var
     F,ToF:TextFile;
     TempStr:String;
     Fname:String;
     Str_Job:String;
     Str_Usr:String;
     Str_Nbr:String;
begin
     //获取运行将打印文件转换为物理文件程序的参数
     CommDtmFrm.Cmd400Rtvjoba.Execute;
     Str_Job:=CommDtmFrm.Cmd400Rtvjoba.Value[0];
     Str_Usr:=CommDtmFrm.Cmd400Rtvjoba.Value[1];
     Str_Nbr:=CommDtmFrm.Cmd400Rtvjoba.Value[2];
          
     //增加库表
     CommDtmFrm.Cmd400Addlible1.Execute;
     
     //生成CARGO MENIFEST,其中StrVslcod、
	StrVoyage为打印舱单的参数
     CommDtmFrm.Call400PRTMF.Value[0]:=StrVslcod;   
     CommDtmFrm.Call400PRTMF.Value[1]:=StrVoyage;
     CommDtmFrm.Call400PRTMF.Execute ;

     //转换为物理文件
     CommDtmFrm.Call400Cpyspl.Value[0]:=Str_Job;
     CommDtmFrm.Call400Cpyspl.Value[1]:=Str_Usr;
     CommDtmFrm.Call400Cpyspl.Value[2]:=Str_Nbr;
     CommDtmFrm.Call400Cpyspl.Execute ;
     
     //产生一个新文件
     Fname:='C:\Communication\Newmf.txt';
     AssignFile(F,Fname);
     ReWrite(F);
     if CommDtmFrm.MfpcTbl.Active=false then 
	CommDtmFrm.MfpcTbl.Active:=True ;

     //将物理文件的数据读出保存为文本文件
     with CommDtmFrm.MfpcTbl do
     begin
          DisableControls;
          try
          First;
          while not EOF do
          begin
               { Process each record here }
               TempStr:=CommDtmFrm.MfpcTblMP198.Value;
               writeln(F,TempStr);
               Next;
          end;
          finally
               EnableControls;
          end;
      end;

      if SaveDialog1.Execute then
      begin
         AssignFile(ToF, SaveDialog1.FileName);
         ReWrite(ToF);
         Reset(F);
         while not EOF(F) do
         begin
               { Process each record here }
               Readln(F,TempStr);
               writeln(ToF,TempStr);
              
          end;

      end;
      CloseFile(F);
      CloseFile(ToF);
</pre>

 



<p align="right"><small><em>中国计算机世界出版服务公司版权所有</em></small> 
<br>
</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -