如何在 VFP 中操作 AS/400 主机上的文件数据
IBM 的 AS/400 主机以其安全性、可靠性在金融系统得到了广泛的应用。但是 AS/400 的大部分程序是采用 RPG 语言开发的,比较难于掌握。而微机上的 VFP 则以界面漂亮、简单易学而著称。是否可以在 VFP的界面中操作后台 AS/400 主机的数据?笔者为此进行了成功的测试,现将具体方法介绍如下。
首先,需要安装 IBM 的 Client Access for Windows 95,其中包含了IBM的 Client Access ODBC Driver (32-bit),对应的文件是 cwbodbc.dll。
第二步是增加ODBC数据源。在Windows 95 的控制面板中启动“ODBC 数据源(32位)”,在“驱动程序”页应能找到Client Access ODBC Driver (32-bit),在“用户DSN”页点“添加”按钮,然后输入以下内容:
在 General 页:
Data source name: 输入数据源名称,例如 MY400。
System: 输入AS/400 系统名,如 ASSYSN1。
User ID: 输入AS/400 的用户名,如 MLY。
在 Server 页:
Default: 输入 AS/400 缺省库名,如 QGPL。
其它设置可以采用系统缺省配置。
第三步是在 VFP 中建立远程视图。你可以新建一个项目 PRJ1,然后新建一个数据库 DBC1,用鼠标选择远程视图,然后点“新建”,在“选取”处点“可用的数据源”,在“可用的数据源”列表栏选择我们刚才增加的数据源MY400,然后点“确定”。之后添加 AS/400 上的表名(格式是 LIB.FILE),选择字段,设置联接条件、筛选条件、排序依据、分组依据、更新条件和杂项。
这里有两点需要特别注意:如果需要在视图进行增、删、修改记录后传递回AS/400主机的基表,首先必须在“更新条件”页设置关键字段和可更新字段标记;其次,如果某个字段允许输入汉字,则视图中该字段的属性定义中其宽度必须至少比 AS/400 中的定义小 2,否则更新时将出现错误 1526:
“连接错误: [IBM][Client Access ODBC Driver (32-bit)][DB2/400 SQL] Data truncated.”。全部设置完成后,按 Ctrl+W存盘,将远程视图取名为 VIEW1。
现在,你就可以象操作普通 .DBF 表一样操作远程视图 VIEW1了。用 USE打开 VIEW1,用 BROWSE 命令对记录数据进行增、删、修改。通过 Client Access 或 Telnet 登录 AS/400,你可以在主机上检查物理文件是否真的被更新。
通过远程视图,我们实现了对 AS/400 数据文件的透明操作,可以向AS/400发送复杂的查询条件,如果使用 OLE 自动化技术,还可以将数据加工后送往 Excel 进行报表输出打印。
下面给出一个完整的演示程序 ODBC.PRG,程序先请用户输入数据源名、AS/400 的表名、SQL SELECT 的字段(缺省是*表示所有字段)以及 WHERE 和ORDER BY 子句,然后程序就在 C:\TEMP 子目录下创建数据库 DBC1,并在其中建立远程视图 VIEW1,之后启动 BROWSE 界面让用户浏览从 AS/400 主机查询出的数据。程序在中文 VFP 3.0/5.0、中文 Windows 95/98 环境下均调试通过。
* ODBC.PRG
* M.L.Y 2000.5
SET TALK OFF
SET SAFETY OFF
SET EXACT OFF
SET DATE ANSI
SET CENTURY ON
CLEAR ALL
CLEAR
_SCREEN.WINDOWSTATE = 2
_SCREEN.CAPTION =
"Browse Data from AS/400"
MODIFY WINDOW SCREEN
NOCLOSE NOFLOAT NOGROW NOZOOM
IF MESSAGEBOX("
本程序演示通过 Client
Access查看 AS/400 上的数据文件,"+;
CHR(13)+CHR(13)+
"你需要先配置好
Client Access ODBC 数据源"+;
CHR(13)+CHR(13)+"
是否继续?", 1+32, "Browse
Data from AS/400") < > 1
RETURN
ENDIF
CNN = SPACE(30)
FLDS = '*'+SPACE(78)
TAB = SPACE(78)
COND = SPACE(78)
ORDERBY = SPACE(78)
@ 2, 0 SAY '构造远程视图:'
@ 4, 0 SAY 'ODBC DSN:'
GET CNN
@ 6, 0 SAY 'AS/400
LIB.file:' GET TAB
@ 8, 0 SAY 'Fields:'
GET FLDS
@ 10, 0 SAY 'Where:'
GET COND
@ 12, 0 SAY 'Order
by:' GET ORDERBY
READ
CLEAR
IF EMPTY(CNN) OR EMPTY(TAB)
RETURN
ENDIF
IF EMPTY(FLDS)
FLDS = '*'
ENDIF
FLDS = ALLTRIM(FLDS)
IF !EMPTY(COND)
CND = 'WHERE '
+ ALLTRIM(COND)
ELSE
CND = ''
ENDIF
IF !EMPTY(ORDERBY)
ORD = 'ORDER BY '
+ ALLTRIM(ORDERBY)
ELSE
ORD = ''
ENDIF
CLOSE ALL
IF ADIR(arr1,
"C:\TEMP", "D") < > 1
MD C:\TEMP
ENDIF
CD C:\TEMP
IF FILE('DBC1.DBC')
DELETE DATABASE DBC1
ENDIF
CREATE DATABASE DBC1
*OPEN DATABASE DBC1
*CNNNAME = DBGETPROP
('VIEW1', 'VIEW', 'ConnectName')
*DROP VIEW VIEW1
CREATE SQL VIEW VIEW1
REMOTE CONNECT &CNN AS
SELECT &FLDS FROM &TAB ;
&CND &ORD
SELECT 0
USE VIEW1
KEYBOARD '{CTRL+F10}'
BROWSE NOMODIFY NODELETE
NOAPPEND NOMENU ;
TITLE [查看AS/400数据
文件内容(FoxPro远程视图),
按Esc退出]
CLEAR ALL
RETURN
*** End of program.***
metmay 回复于:2003-04-30 15:14:54 |
试了一下,总是报错:连接错误,找不到数据源,为什么? |
hanyu 回复于:2003-05-01 17:33:18 |
又好了 |
metmay 回复于:2003-05-16 15:54:38 |
.com |
雪花啤酒 回复于:2003-09-25 07:16:51 |
发表于: 2003-03-13 12:03 发表主题: 转贴近::::如何在 VFP 中操作 AS/400 主机上的文件数据
-------------------------------------------------------------------------------- 如何在 VFP 中操作 AS/400 主机上的文件数据 IBM 的 AS/400 主机以其安全性、可靠性在金融系统得到了广泛的应用。但是 AS/400 的大部分程序是采用 RPG 语言开发的,比较难于掌握。而微机上的 VFP 则以界面漂亮、简单易学而著称。是否可以在 VFP的界面中操作后台 AS/400 主机的数据?笔者为此进行了成功的测试,现将具体方法介绍如下。 首先,需要安装 IBM 的 Client Access for Windows 95,其中包含了IBM的 Client Access ODBC Driver (32-bit),对应的文件是 cwbodbc.dll。 第二步是增加ODBC数据源。在Windows 95 的控制面板中启动“ODBC 数据源(32位)”,在“驱动程序”页应能找到Client Access ODBC Driver (32-bit),在“用户DSN”页点“添加”按钮,然后输入以下内容: 在 General 页: Data source name: 输入数据源名称,例如 MY400。 System: 输入AS/400 系统名,如 ASSYSN1。 User ID: 输入AS/400 的用户名,如 MLY。 在 Server 页: Default: 输入 AS/400 缺省库名,如 QGPL。 其它设置可以采用系统缺省配置。 第三步是在 VFP 中建立远程视图。你可以新建一个项目 PRJ1,然后新建一个数据库 DBC1,用鼠标选择远程视图,然后点“新建”,在“选取”处点“可用的数据源”,在“可用的数据源”列表栏选择我们刚才增加的数据源MY400,然后点“确定”。之后添加 AS/400 上的表名(格式是 LIB.FILE),选择字段,设置联接条件、筛选条件、排序依据、分组依据、更新条件和杂项。 这里有两点需要特别注意:如果需要在视图进行增、删、修改记录后传递回AS/400主机的基表,首先必须在“更新条件”页设置关键字段和可更新字段标记;其次,如果某个字段允许输入汉字,则视图中该字段的属性定义中其宽度必须至少比 AS/400 中的定义小 2,否则更新时将出现错误 1526: “连接错误: [IBM][Client Access ODBC Driver (32-bit)][DB2/400 SQL] Data truncated.”。全部设置完成后,按 Ctrl+W存盘,将远程视图取名为 VIEW1。 现在,你就可以象操作普通 .DBF 表一样操作远程视图 VIEW1了。用 USE打开 VIEW1,用 BROWSE 命令对记录数据进行增、删、修改。通过 Client Access 或 Telnet 登录 AS/400,你可以在主机上检查物理文件是否真的被更新。 通过远程视图,我们实现了对 AS/400 数据文件的透明操作,可以向AS/400发送复杂的查询条件,如果使用 OLE 自动化技术,还可以将数据加工后送往 Excel 进行报表输出打印。 下面给出一个完整的演示程序 ODBC.PRG,程序先请用户输入数据源名、AS/400 的表名、SQL SELECT 的字段(缺省是*表示所有字段)以及 WHERE 和ORDER BY 子句,然后程序就在 C:\TEMP 子目录下创建数据库 DBC1,并在其中建立远程视图 VIEW1,之后启动 BROWSE 界面让用户浏览从 AS/400 主机查询出的数据。程序在中文 VFP 3.0/5.0、中文 Windows 95/98 环境下均调试通过。 * ODBC.PRG * M.L.Y 2000.5 SET TALK OFF SET SAFETY OFF SET EXACT OFF SET DATE ANSI SET CENTURY ON CLEAR ALL CLEAR _SCREEN.WINDOWSTATE = 2 _SCREEN.CAPTION = "Browse Data from AS/400" MODIFY WINDOW SCREEN NOCLOSE NOFLOAT NOGROW NOZOOM IF MESSAGEBOX(" 本程序演示通过 Client Access查看 AS/400 上的数据文件,"+; CHR(13)+CHR(13)+ "你需要先配置好 Client Access ODBC 数据源"+; CHR(13)+CHR(13)+" 是否继续?", 1+32, "Browse Data from AS/400") < > 1 RETURN ENDIF CNN = SPACE(30) FLDS = '*'+SPACE(7 TAB = SPACE(7 COND = SPACE(7 ORDERBY = SPACE(7 @ 2, 0 SAY '构造远程视图:' @ 4, 0 SAY 'ODBC DSN:' GET CNN @ 6, 0 SAY 'AS/400 LIB.file:' GET TAB @ 8, 0 SAY 'Fields:' GET FLDS @ 10, 0 SAY 'Where:' GET COND @ 12, 0 SAY 'Order by:' GET ORDERBY READ CLEAR IF EMPTY(CNN) OR EMPTY(TAB) RETURN ENDIF IF EMPTY(FLDS) FLDS = '*' ENDIF FLDS = ALLTRIM(FLDS) IF !EMPTY(COND) CND = 'WHERE ' + ALLTRIM(COND) ELSE CND = '' ENDIF IF !EMPTY(ORDERBY) ORD = 'ORDER BY ' + ALLTRIM(ORDERBY) ELSE ORD = '' ENDIF CLOSE ALL IF ADIR(arr1, "C:\TEMP", "D") < > 1 MD C:\TEMP ENDIF CD C:\TEMP IF FILE('DBC1.DBC') DELETE DATABASE DBC1 ENDIF CREATE DATABASE DBC1 *OPEN DATABASE DBC1 *CNNNAME = DBGETPROP ('VIEW1', 'VIEW', 'ConnectName') *DROP VIEW VIEW1 CREATE SQL VIEW VIEW1 REMOTE CONNECT &CNN AS SELECT &FLDS FROM &TAB ; &CND &ORD SELECT 0 USE VIEW1 KEYBOARD '{CTRL+F10}' BROWSE NOMODIFY NODELETE NOAPPEND NOMENU ; TITLE [查看AS/400数据 文件内容(FoxPro远程视图), 按Esc退出] CLEAR ALL RETURN *** End of program.*** _________________ charlielou@21cn.com |
citicrc 回复于:2005-04-20 15:45:11 |
呵呵,晕啊,良友大哥几年前的文章给贴这里来了 |
citicrc 回复于:2005-04-20 16:02:29 |
实际上用新的版本的CLIENT ACCESS,直接在可视化条件下,就可以做可更新视图,只要你的用户为可更新权限,是没有问题的.不过不建议使用视图方式,那个基于DBC,有坏表的可能,安全也不好,最好是用8和9版本后的Cursor adaptor来建立连接 |
戎马 回复于:2005-04-21 09:13:54 |
天啊,charlielou,江底的一条大鱼翻上来了。 |
michael9406 回复于:2005-04-21 10:04:59 |
那也只是引用。 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/