免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2694 | 回复: 1
打印 上一主题 下一主题

[转贴]用VFP访问INFORMIX ONLINE数据库 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-26 16:45 |只看该作者 |倒序浏览
[文章原作者:唐军]

在论坛上,不记得在哪个朋友问过这个问题,今天找到了,就帖出来。

用VFP访问INFORMIX ONLINE数据库

  我们知道,Microsoft公司推出的基于WINDOWS平台的Visual FoxPro数据库是目前国内十分流行的数据库软件之一,它不仅具有强大的数据库管理能力,而且具有极其友好的图形界面和多媒体处理能力。它使用WINDOWS的DDE和OLE技术,可以对用户感兴趣的声音图片等多媒体信息字段进行存储和处理。声图并茂的图文界面,使操作人员不再对经常重复的操作感到枯燥和乏味。不仅如此,它还提供了大量可视化编程工具。使用真正的面向对象的编程技术,大大缩短了应用系统的开发周期和维护工序,深受开发人员的欢迎。但是,Visual FoxPro也有它的局限性。在多用户访问、大量的数据存储、内置安全性、可靠的事务处理等方面,Visual FoxPro无法与INFORMIX那样的世界著名数据库相比。

INFORMIX是典型的关系数据库。它使用RDSQL标准结构查询语言,不仅支持多用户操作。而且具有非常强大的大型数据处理能力和安全容错机制,目前,国内绝大多数金融机构都采用了多用户环境下的INFORMIX进行大量的业务数据处理。

然而,与Visual FoxPro相比,多用户环境下INFORMIX的用户界面又显得不是那么美观。我们在开发大型的数据库应用系统的时候,用户往往要求既要有丰富多彩的人机对话界面,又要实现多用户同时对数据库进行操作,而且数据处理必须具有高度的可靠性和安全性。这时候,我们自然要想到将Visual FoxPro的多媒体功能与INFORMIX的多用户和大型数据库处理能力结合起来。本文正是基于这种思想,介绍在客户/服务器模式下利用Visual FoxPro5?0的ODBC(开放式数据库互连)功能访问INFORMIX ONLINE5?0数据库的方法。

  客户/服务器模式(Client/Server,简称C/S)是目前世界上广泛采用的一种存取信息和共享资源的方式。在降低成本提高效率方面,它是一种十分优秀的体系。这种C/S模式以网络技术为基础,将应用系统分布在两个实体——客户机和服务器上。客户机提供用户界面,并直接以SQL语言向数据库服务器发出数据请求,数据库服务器响应客户机的请求,执行这些SQL语句,并将处理结果返回给客户机,ODBC(Open DataBase Connectivity)是异种数据库互相访问的一种协议,通过创建ODBC连接,Visual FoxPro可以方便地访问本地主机或远程服务器上的其他非FoxPro数据库。Visual FoxPro支持很多ODBC驱动程序,如FoxPro2.0数据库、SQL SERVER数据库、Microsoft Access数据库、Microsoft EXCEL电子表格、ORACLE数据库等。虽然Visual FoxPro没有直接提供INFORMIX数据库的ODBC驱动程序,但INFORMIX数据库厂商提供了其服务器与客户端的中间件,客户端的中间件就是其ODBC的驱动程序。INFORMIX ONLINE5?0数据库服务器端的中间件叫INFORMIX STAR(7?0以上版本的中间件包裹在ONLINE产品中,不再单独提供),客户端的中间件叫INFORMIXNET,将其加入ODBC数据源中,客户端就可以访问服务器上的INFORMIX数据库了。为了清楚地说明Visual FoxPro访问INFORMIX ONLINE数据库的方法,举如下图例。

图例中,服务器端安装SCO UNIX操作系统,在用户informix的主目录/home/informix下安装了INFORMIX ONLINE 5.0和INFORMIX STAR产品,并由informix用户创建了数据库mydatabase和表Mytable。服务器主机名为MYSERVER,IP地址为8?8?8?1。客户机1上安装WINDOWS95操作系统,并安装Visual FoxPro5.0(包括ODBC)及INFORMIX_NET CLI2?5,主机名为CLIHOST1,IP地址为8?8?8?2。客户机2除主机名(CLIHOST2)和IP地址(8?8?8?3)与客户机1不同外,其余配置均与客户机1相同。

  下面具体介绍前面图例中,客户端的Visual FoxPro访问服务器端INFORMIX数据库的实现过程和步骤:
  一、配置网络,使服务器与各客户机在同一网段。
  (本例中使用TCP/IP协议,具体配置,请查阅相关资料)
  二、配置INFORMIX服务器端。
  1?修改文件/etc/hosts内容如下:
  8.8.8.1  MYSERVER
  8.8.8.2  CLIHOST1
  8.8.8.3  CLIHOST2

  2?在/etc/services中增加INFORMIX STAR服务名及该服务所占用的端口号和使用的协议,其中端口名可自己确定,端口号必须在该文件中是唯一的,协议采用tcp,如:
  sqlexec  8888/tcp
  3?在/home/informix/etc目录下创建sqlhosts文件,其格式如下:
  dbservername nettype hostname servicename
  其中:
  dbservername:数据库服务器名(在安装ONLINE时,由tbmonitor配置共享内存指定,如果配置时采用默认设置,则为ONLINE)。
  nettype:网络类型,定议格式如下:
       ddiippp
  dd:数据库服务器类型,如on表示数据库服务器采用Online
  iii:网络接口,tli/soc表示网络通讯接口为sockets(套接字),
  如果选用INFORMIX ONLINE5?0则为′tli′
  ppp:网络协议,如tcp
  hostname:服务器主机名
  servicesname:服务名,前一步在/etc/services文件中已定义
  本文图例中,服务器的$INFORMIXDIR/etc/sqihosts中应加入如下内容:
  ONLINE ontlitcp MYSERVER sqlexec
  4?在服务器上以informix用户注册,执行tbinit,启动ONLINE数据库。
  5?启动服务进程INFORMIX STAR以超级用户注册,执行如下程序:
  #/home/infromix/lib/sqlexecd
  如果执行成功,则作下一步,否则根据错误提示,检查前面服务器端的设置是否正确。
  (以后每次重启服务器,都必须启动一次ONLINE数据库和STAR服务进程,客户机才能访问服务器上的数据库)。
  三、配置客户端(各客户机配置均相同)
  1?安装客户端中间件(INFORMIX_NET CLI2.5)到informix目录
  2?在文件\windows\ hosts中增加服务器定义:
         8.8.8.1 MYSERVER
  3?在文件\windows\services中增加INFORMIX STAR的服务端口及协议信息,与服务器    /etc/services文件中添加的内容一致:
  sqlexec  8888/tcp
  4?在\informix\etc目录下创建sqlhosts文件,内容如下:
  ONLINE onsoctcp MYSERVER sqlexec
  5?设置INFORMIX_CLI环境参数。
  进入WINDOWS‘程序’菜单,运行Informix_CLI32菜单中的Informix SetNet32作如下设置:
  (1)设置Enviromnent:
  INFORMIXDIR=c:\informix   (INFORMIX_NET所在目录)
  INFORMIXSERVER=ONLINE (数据库服务器名,与服务器上设置一致)
  INFORMIXSQLHOSTS=c:\informix\etc\sqlhosts(指定sqlhosts文件路径)
  (2)设置Server Information:
  Informix Server:ONLINE   (数据库服务器名,与服务器上设置一致)
  HostName:MYSERVER   (服务器主机名)
  Protocolnamensoctcp    (网络协议)
  Service Name:sqlexec    (\windows\services中定义的服务端口)
  (3)设置Host Information
  Current Host MYSERVER  (服务器主机名)
  User Name:informix   (访问服务器上的用户名)
  Password Option:   (有无口令)
  Password******   (informix用户口令,输入时屏幕以*号回显)
  6?测试数据库客户/服务器模式是否连通,具体步骤如下:
  执行’开始’’程序’’Informix-CLI32'菜单中的’Ilogin 32 Dermo',选择FILE菜单下的RUN,根据屏幕输入如下内容进行客户/服务器连接测试;
  Server:ONLINE   (数据库服务器名,与服务器上设置一致)
  Hostname:MYSERVER   (服务器主机名)
  Servicesname:sqlexec    (INFORMIX STAR服务端口名)
  Protocolnamensoctcp   (协议类型)
  Username:informix   (用户名)
  Password******  (口令)
  Stores Database:mydatabase  (要连接的数据库)
  输入正确后,选中‘OK’,INFORMIX_CLI根据你的设置开始进行连接测试,如果测试成功,屏幕会显示一个‘OK’信息框,你就可以做下面的步骤,否则,屏幕提示出错,并给出错误号,你可以执行‘开始’’程序’’Informix-CLI32'菜单的 'Informix Find Error',查找错误号对应的错误信息和解决办法,根据这些信息作出相应的处理,直到测试成功为止。
  7?配置客户端ODBC数据源,将INFORMIX的ODBC驱动程序添加到系统中:
  连接测试成功后,打开控制面板中的32bit ODBC,添加系统DSN,选择INFORMIXICLII2?5,并根据屏幕进行如下设置:
  DATA SOURSE NAME:VFP_mydata
  (自定义一个数据源名字,以便FoxPro建立远程连接时引用)
  DESCRIPION:  (描述,可不填内容)
  DATABASE NAME:mydatabase  (要连接的远程服务器上的数据库名)
  四、远程ODBC数据源配置好后,客户端就可以在Visual FoxPro中对远程服务器数据库进行访问了,Visual FoxPro访问远程数据库有两种方法,一种是通过创建远程视图的方式访问远程数据库,另一种是使用SQL Path_throuth函数直接对远程数据进行操作。
  (一)通过创建远程视图的方式访问远程数据库。其步骤如下:
  1?建立ODBC连接,指定数据源
  格式:OPEN DATABASE〈本地数据库〉
  CREATE CONNECTION〈连接名〉DATASOURCE
  〈ODBC数据源〉USERID;
  〈远程用户名〉PASSWORD〈口令〉
  例如:OPEN DATABASE MYDATABASE
  CREATE CONNECTION Myconnect1 DATASOU
  RCE VFP_mydata;
  USERID informix PASSWORD kkkkkk
  该语句执行后,将在FoxPro 目录下建立一个名为‘Myconnect1'的连接文件,并长期保存,供远程视图时引用。
  2?创建远程视图:
  格式: CREATE SQL VIEW〈视图名〉CONNECTION〈已建的连接名〉AS;
  SELECT*FROM〈远程表〉
  例如:要建远程数据库mydatabase中的MyTable表上建立远程视图Myview。
  CREATE SQL VIEW Myview CONNECTION Myconnectl AS SELECT;
  *FROM MyTable
  该语句执行后,将在FoxPro目录下建立一个名为‘Myview'的视图文件,并长期保存,以后用户只在需要时用USE命令象访问本地表一样打开该视图,然后对视图进行添加、删除、修改、浏览等操作。如果要把在该视图上的修改提交给远程表,需要改变该视图的相关属性(具体请查阅Visual FoxPro相关资料),并在修改后加入TABLEUPDATE()命令,如:
  USE Myview
  APPEND
  TABLEUPDATE()
  前面讲到的连接和远程视图都是一次性创建,永久性保存。一旦创建,它们就象.DBF文件一样保存在硬盘上,使用时,只需用”USE〈视图〉”命令打开视图,FoxPro将根据视图中存放的连接信息打开连接文件,然后由连接控制访问ODBC数据源。连接和远程视图的创建还可以通过它们各自的设计器来完成,具体方法,请查阅相关资料。
  (二)利用SQL pass_throuth函数访问远程服务器上数据库中的表。
  使用SQL pass-through函数提供了更直接的服务器访问方式,可以直接执行服务器的SQL语句或程序,但它所创建的临时表只存在于当前的工作期中,缺乏象视图定义的永久性。每次使用SQL pass_throuth连接到一个远程ODBC数据源时,都必须首先调用FoxPro的SQLCONNECT()创建连接,以获得活动连接的句柄。应用程序可以对同一数据源请求多个连接,也可以通过对每一个数据源都请求一个连接,同时处理多个ODBC数据源,如果活动连接不再使用,可使用SQLDISCONNECT()切断与数据源的联系。调用SQL pass-through函数的步骤如下:
  1?调用SQLCONNECT()或SQLSTRINGCONNECT()创建一个与数据源的连接。
  例如:连接到INFORMIX数据源mydatabase上,以informix用户注册。口令为kkkkkk nConnectionHandle=SQLCONNECT('mydatabase','informix','kkkkkk')
  2?用SQL pass-through函数将数据检索到Visual Foxpro临时表中,然后用标准的FOXPRO语句和函数处理这些检索到的数据。
  例如:
  ?SQLEXEC(nConnectionHandle,"select*from MyTable"
  ,"mycurs"
  USE mycurs
  BROW
  3?使用SQLDISCONNECT()切断与数据源的连接
  在实际的应用过程中,无论采用哪一种方式访问服务器上的数据库,都需要考虑通讯状态测试、多用户冲突处理、远程访问速度、远程事务容错处理、资源分配等技术性问题,这些都需要进行大量的摸索和积累。由于篇幅有限,本文只提供基本的思路和方法,有兴趣的读者不妨一试。

论坛徽章:
0
2 [报告]
发表于 2006-02-22 11:34 |只看该作者
看了你的贴,我觉得有几个方面可能不易实现
一是foxpro 2.6本身不支持访问异构数据库
二是在foxpro 是如要实现此功能,只能通过C模块或调用外部命令(sybase bcp,informix unload或dbexport)才能实现,而此种方式下实现其的控制部分较为复杂
三是foxpro for unix 对中文支持较差,实现中界面部分较难设计
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP