发信人: goodfrd(supervisor)
整理人: hunter__fox(2002-03-16 21:48:54), 站内信件
|
【 在 zhouboy 的大作中提到:】
:RUN 后面如何才能支持空格字符(路径中包含空格)?如何解决才能支持空格?
:......
看看我的部分程序吧。
使用我的DLL 函数 ShellExecWait,你可以运行 DOS 程序或 WINDOWS 程序,
可以取得 DOS 程序的退出码(以前在 DOS BAT程序中用 IF ERRORLEVEL ...
检测),可以使运行程序窗口不可见,保证你启动的程序执行完成才继续运行
VFP 程序.
需要我的 DLL 文件者请来 EMAIL。
* X_DOWNPE.PRG --- 从AS/400下载对帐文件, V1.0
* MLY 2000.12.01
*======================================================================
glSYSMENU = .F.
gnDOSpgmShowWinMode = 0 && 0=窗口隐藏
* 参见 VC6 的 WINUSER.H:
*/*
* * ShowWindow() Commands
* */
*#define SW_HIDE 0
*#define SW_SHOWNORMAL 1
*#define SW_NORMAL 1
*#define SW_SHOWMINIMIZED 2
*#define SW_SHOWMAXIMIZED 3
*#define SW_MAXIMIZE 3
*#define SW_SHOWNOACTIVATE 4
*#define SW_SHOW 5
*#define SW_MINIMIZE 6
*#define SW_SHOWMINNOACTIVE 7
*#define SW_SHOWNA 8
*#define SW_RESTORE 9
*#define SW_SHOWDEFAULT 10
*#define SW_FORCEMINIMIZE 11
*#define SW_MAX 11
CLOSE TABLES ALL
DECLARE INTEGER ShellExecWait IN ShellExW.DLL ;
STRING lpProgName, STRING lpParms, ;
SHORT n_ShowWinMode, INTEGER @ExitCode
CD DATA
DO XX_DOWNPE
CD ..
CLOSE TABLES ALL
glSYSMENU = .T.
SET SKIP OF MENU _MSYSMENU .F.
RETURN
*============================================================
PROCEDURE XX_DOWNPE
gnExitCode = 0
c_MSG_TIT = [从 AS/400 (] + gcAS400SYS + [) 下载对帐文件]
IF MESSAGEBOX([是否继续?], 4+32+256, c_MSG_TIT) != 6
RETURN
ENDIF
* 输入日期
DO FORM I_1DATE WITH [下载对帐文件], [请输入需要下载的交易日期:], {}
IF glSEL_CANCEL
RETURN
ENDIF
c_SEL_DATE = DTOS(gdDATE1)
* 检查是否已经下载
USE T_PETSA.DBF
LOCATE FOR 系统日期 = VAL(c_SEL_DATE)
IF FOUND()
=MSG_INF("今天 ("+c_SEL_DATE+") PETSA 已经下载!", "!!!")
USE
RETURN
ENDIF
USE
WAIT WINDOW NOWAIT "正在生成下载对帐文件的 .TTO 文件 ..."
*......
WAIT WINDOW NOWAIT "正在下载 PETSA ..."
IF DOWNLOAD_AS400PF("PETSA.TTO", "PETSA") < 0
RETURN -1
ENDIF
*PETSA(BIN)转换成 TXT
rc = ShellExecWait("..\PF400CVT.EXE"+CHR(0),"1 PETSA.BIN PETSA.FFD PETSA.CSV 2"+CHR(0),;
gnDOSpgmShowWinMode, @gnExitCode)
*出错处理
IF rc != 0
=MSG_ERR("转换 PETSA 出错! 出错码:"+ALLTRIM(STR(rc)))
RETURN
ENDIF
IF gnExitCode != 0
=MSG_ERR("转换 PETSA 出错! PF400CVT 退出码:"+ALLTRIM(STR(gnExitCode)))
RETURN
ENDIF
*.............
*ARJ压缩
rc = ShellExecWait("..\ARJ.EXE"+CHR(0),"A ..\ARJ\"+c_SEL_DATE+".ARJ"+;
" ..\OUTPUT\"+c_SEL_DATE+"*.*"+CHR(0),;
gnDOSpgmShowWinMode, @gnExitCode)
*出错处理
IF rc != 0
=MSG_ERR("调用 ARJ 压缩出错! 出错码:"+ALLTRIM(STR(rc)))
RETURN
ENDIF
IF gnExitCode != 0
=MSG_ERR("ARJ 压缩出错! ARJ 退出码:"+ALLTRIM(STR(gnExitCode)))
RETURN
ENDIF
*填发送Email参数
SELECT 0
USE T_S_MAIL.DBF
APPEND BLANK
REPLACE 交易日期 WITH VAL(c_SEL_DATE), SMTP WITH gcMailServer, ;
SenderMail WITH gcSenderEmail, SenderName WITH gcUID+gcSenderName, ;
Recipient WITH gcRecipient, Subject WITH gcSubject, ;
BodyText WITH gcMessage, ;
Attachment WITH "..\ARJ\"+c_SEL_DATE+".ARJ"
USE
WAIT WINDOW NOWAIT "从AS/400下载对帐文件,统计,生成文件,准备发送Email---OK!"
RETURN
*......
*============================================================
FUNCTION DOWNLOAD_AS400PF
PARAMETERS c_TTO_FILE, c_PF_NAME
* 从 AS/400 下载文件
* 返回: 0 --- 无数据
* -52 --- 转换出错
* <0 --- 出错
* 1 --- ok
*!..\RTOPCB.EXE &c_TTO_FILE > TTO_OUT.TXT
=DEL_FILE("TTO_OUT.TXT")
rc = ShellExecWait("DOWN400.BAT"+CHR(0), c_TTO_FILE + " TTO_OUT.TXT"+CHR(0),;
gnDOSpgmShowWinMode, @gnExitCode)
IF APPINF_TXT_TO_DBF("TTO_OUT.TXT", "T_APPINF.DBF", "行号", "信息", 80) < 0
=MESSAGEBOX([将应用程序运行信息文本文件倒入 DBF 出错!],16, [出错!])
RETURN -1
ENDIF
* 检查应用程序(CA400 上/下载文件)的错误信息
SELECT 0
USE T_APPINF.DBF
rc = CHK_CA400_INFO_ERR()
USE
IF rc = 0
=MESSAGEBOX([下载 ] + c_PF_NAME + [ 无数据!], 48, [???])
ENDIF
IF rc = -52
=MESSAGEBOX([下载 ] + c_PF_NAME + [ 转换出错! 请检查!], 16, [出错!])
RETURN rc
ENDIF
IF rc < 0
=MESSAGEBOX([下载 ] + c_PF_NAME + [ 出错! 请检查!], 16, [出错!])
USE T_APPINF.DBF
KEYBOARD '{CTRL+F10}'
BROWSE NOMODIFY NODELETE NOAPPEND NOMENU ;
TITLE [下载 ] + c_PF_NAME + [的出错信息如下, 按Esc退出]
USE
RETURN rc
ENDIF
IF rc > 0
=MESSAGEBOX([下载 ] + c_PF_NAME + [ OK!], 0, [OK!])
ENDIF
RETURN rc
*============================================================
FUNCTION APPINF_TXT_TO_DBF
PARAMETERS TXT_FNAME, DBF_NAME, LINE_NO_FLD, TXT_FLD, WRAP_LEN
* 将应用程序运行信息文本文件倒入 DBF
FP = FOPEN(TXT_FNAME, 0)
IF FP < 0
RETURN -1
ENDIF
SELECT 0
USE (DBF_NAME)
ZAP
I = 1
DO WHILE .T.
IF FEOF(FP)
EXIT
ENDIF
cLine = FGETS(FP, WRAP_LEN)
APPEND BLANK
REPLACE &LINE_NO_FLD WITH I, &TXT_FLD WITH cLINE
I = I + 1
ENDDO
=FCLOSE(FP)
USE
RETURN 0
*============================================================
FUNCTION CHK_CA400_INFO_ERR
* 具体检查信息
* 返回: 0 --- 无数据
* -52 --- 转换出错
* <0 --- 出错
* 1 --- ok
LOCATE FOR 'CWBTF0004 - No data was matched to the specified options' $ 信息
IF FOUND()
RETURN 0
ENDIF
LOCATE FOR 'CWBDB0052 - Error occurred during data conversion' $ 信息
IF FOUND()
RETURN -52
ENDIF
LOCATE FOR 'CWBTF' $ 信息 OR 'CWBDB' $ 信息 OR 'SQL' $ 信息
IF FOUND()
RETURN -1
ENDIF
LOCATE FOR 'Error' $ 信息 OR 'failed' $ 信息 OR 'not correct' $ 信息 OR 'Cause' $ 信息
IF FOUND()
RETURN -1
ENDIF
LOCATE FOR '错' $ 信息 OR '失败' $ 信息 && CA/400 中文版
IF FOUND()
RETURN -1
ENDIF
RETURN 1
*============================================================
FUNCTION HZ_RTRIM
PARAMETERS c_STR
c_STR = TRIM(c_STR)
DO WHILE .T.
IF RIGHT(c_STR, 2) != " "
EXIT
ENDIF
c_STR = SUBSTR(c_STR, 1, LEN(c_STR)-2)
c_STR = TRIM(c_STR)
ENDDO
c_STR = TRIM(c_STR)
RETURN c_STR
*============================================================
FUNCTION DEL_FILE
PARAMETERS c_FILENAME
IF FILE(c_FILENAME)
ERASE (c_FILENAME)
ENDIF
RETURN 1
*============================================================
FUNCTION APPEND_FROM_CSV
PARAMETERS c_FILENAME
IF FILE(c_FILENAME)
APPEND FROM (c_FILENAME) TYPE DELIMITED
ENDIF
RETURN 1
*============================================================
FUNCTION STOD
PARAMETERS c_DATE
c_DATE = ALLTRIM(c_DATE)
c_DD = RIGHT(c_DATE, 2)
c_MM = LEFT(RIGHT(c_DATE, 4), 2)
c_YYYY = LEFT(RIGHT(c_DATE, 8), 4)
RETURN CTOD(c_YYYY+[.]+c_MM+[.]+c_DD)
*** End of program.
---- 欢迎光临良友程序库:
http://mly363.363.net
http://computeruser.go.163.com
http://mylib.top263.net
有大量的源程序提供, 涉及:
DOS, 汇编, Fortran, C, VFP, Oracle, Netware, 网络, TCP/IP,
VMS, HP3000, HP9000, MPE, HP-UX,
AS/400, OS/400, UNIX, Virus, 图形图象处理
|
|