| 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.*** _________________ [email protected] |
| 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 |
| 那也只是引用。 |