VFP访问外部数据源的几种方法?

Visual FoxPro(以下简称VFP)是微软公司Visual系列开发工具中的一种。在VFP 6.0中,与外部数据源进行数据交换的方式有导入导出数据、远程视图、SQL Pass Through以及数据升迁等几种方式。其中,导入导出数据是完成对静态数据(或文本)的数据转换,而对动态数据源的访问则需要使用Windows中的ODBC技术。
本人想收集在设计客户/ 服务器体系结构的应用程序时,如何使用VFP来实现与外部数据源的数据交换?以及各种方法的优、缺点.有程序举例最好!(高分相送,希望大家支持,分不够还可以再加)
---------------------------------------------------------------

访问access,先建立数据源,
jb=sqlexec("数据源名")
然后就可以和sql server相连一样操作了。
sqlexec(jb,"select * from tablename","lsb")

sele lsb
brow

---------------------------------------------------------------

conn=createobject("adodb.connection")
conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source='d:\db1.mdb'"

conn.open
---------------------------------------------------------------

对C/S,数据操作用远程视图,复杂的查询或执行存储过程用SPT.
---------------------------------------------------------------

在VFP用ADO虽可连接数据库,但ADO与VFP的控件不兼容,最好不用。
---------------------------------------------------------------

MSDN中VPF程序员指南中有三章专门讲C/S程序设计,建议精读。
---------------------------------------------------------------

Visual FoxPro 6.0与大型数据库的无"数据源"连接!!(不可不看!!!)
http://www.yesky.com/20020225/218569.shtml
---------------------------------------------------------------

(转贴)

如何创建远程连接和远程视图.
CLOSE ALL
SET DEFAULT TO c:\temp

  • 没有数据库视图不能存在.因此创建一个用于包含视图的数据库.
    CREATE DATABASE zdb
  • 创建一个视图使用的连接.
    CREATE CONNECTION zconn DATASOURCE sqltest USERID sa PASSWORD ""
  • 用远程连接创建视图.
    CREATE SQL VIEW zview REMOTE CONNECTION zconn AS select * from pubs..sales
  • 打开视图并浏览结果集.
    USE zview
    BROWSE

设置 ODBC 数据源
DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING

lnWindowHandle=0
lcODBCDriver='SQL Server' && DRIVER 类型
lcODBCName='SharedData' && 数据源名字
lcODBCDesc='Shared Data Source' && 数据源描述
lcODBCServer='DEVSQL' && SQL SERVER名字
lcODBCDatabase='Shared' && 要连接的数据库名字

** 先试图修改已有的 ODBC,如果不存在,返回 0。
lreturn=SQLConfigDataSource(lnWindowHandle, 2, lcODBCDriver, ;
'DSN=' + lcODBCName + CHR(0) ;
+ 'Description=' + lcODBCDesc + CHR(0) ;
+ 'Server=' + lcODBCServer + CHR(0) ;
+ 'Database=' + lcODBCDatabase + CHR(0))
IF lreturn=0 && 不存在

** 添加新的 ODBC
lreturn=SQLConfigDataSource(lnWindowHandle, 1, lcODBCDriver, ;
'DSN=' + lcODBCName + CHR(0) ;
+ 'Description=' + lcODBCDesc + CHR(0) ;
+ 'Server=' + lcODBCServer + CHR(0) ;
+ 'Database=' + lcODBCDatabase + CHR(0))
IF lreturn=0 &&失败
MessageBox('添加ODBC数据源失败',16,'BUFFER')
ENDIF
ENDIF

删除ODBC数据源
DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING

lnWindowHandle=0
lcODBCDriver='SQL Server'
lcODBCName='SharedData'
lcODBCDesc='Shared Data Source'
lcODBCServer='DEVSQL'
lcODBCDatabase='Shared'

**先修改,或者其是否存在
lreturn=SQLConfigDataSource(lnWindowHandle, ;
2, lcODBCDriver, ;
'DSN=' + lcODBCName + CHR(0) ;
+ 'Description=' + lcODBCDesc + CHR(0) ;
+ 'Server=' + lcODBCServer + CHR(0) ;
+ 'Database=' + lcODBCDatabase + CHR(0))
IF lreturn=1 &&ODBC存在,删除它
lreturn=SQLConfigDataSource(lnWindowHandle, ;
3, lcODBCDriver, ;
'DSN=' + lcODBCName + CHR(0) ;
+ 'Description=' + lcODBCDesc + CHR(0) ;
+ 'Server=' + lcODBCServer + CHR(0) ;
+ 'Database=' + lcODBCDatabase + CHR(0))
IF lreturn=0
MessageBox('删除ODBC源失败,16,'BUFFER')
ENDIF
ENDIF

** 清除DLL
CLEAR DLLS

从VFP连接到SQL SERVER
lnHandle=SQLConnect("SharedData","用户名”,“密码”)
If lnHandle>0 &&连接成功
**从库里获得数据(比如从EMP表里得到部门号为‘01’的职工)
lnReturn=SQLExec(lnHandle,"Select * from Emp Where cDept='01'","CursorEmp")
If lnReturn>0 &&运行成功
Browse
Else &&失败
&&出错处理
EndIf
Else &&连接失败
MessageBox("连接 SQL SERVER 失败”,16,“BUFFER”)
EndIf

**用完连接后,最好马上关闭,连接是很宝贵的资源,微软是按连接数收费的,而且每个连接会增加SQL SERVER的管理负担
=SQLDisconnect(lnHandle)

---------------------------------------------------------------

Visual FoxPro 的客户/服务器开发

节选自《Visual FoxPro 3 编码手册》,Y.Alan Griver 著

1995 年 8 月 1 日

介绍

随着 Visual FoxPro 的发布,Microsoft 已经把 FoxPro 定位在客户/服务器结构的前端(客户端)。Visual FoxPro 包含了大量访问后端信息的途径,加上相当快的本地数据库引擎和数据字典,它提供了真正的客户/服务器开发所需的最好选择。本文将要研究 Visual FoxPro 中内置的各种远程数据访问功能,同时介绍在什么情况下使用这些功能。

客户/服务器基础

在讨论 Visual FoxPro 客户端功能之前,让我们研究一下为什么要使用远程服务器。

广域网 (WAN) 如果您使用WAN,平均来说,客户/服务器应用程序能够降低网络 I/O,提高吞吐量。

在大数据库中每次只需查询很少的结果 使用客户/服务器结构的一个根本动机是希望通过电缆的信息量最小;因此您通常要预先限定查询,使得服务器只将必须的信息发送到客户端。例如,若要了解一个客户的信息,可以在查询中只请求那个客户的数据,而不是浏览所有客户的信息。

服务器强制安全性检查和健壮的事务处理 服务器数据库产品能为您的数据提供安全性和健壮的事务处理机制。而非服务器数据库(比如 Visual FoxPro)只能提供一些简单的事务支持和数据完整性检查,这些特性同内置在各种服务器引擎之中的功能是无法相比的。

上面列出了使用客户/服务器结构的各种原因,现在我们看一下 FoxPro 所提供访问服务器数据的两种方法:SQL pass-through (SPT) 和视图。SQL pass-through 提供与 FoxPro2.6 Connectivity Kit 相同的基本能力,但它已内置在基本产品中,并具有更快的速度。视图支持允许您象处理本地 FoxPro 数据一样处理后端数据,但是必须注意结果集合的大小。这两种方法都要用到连接,即具有给定别名、预先定义的联系后端数据的途径。

您可以为连接设置多个属性:

Asynchronous 连接是同步的(在完成后端的查询之前您的应用程序不能继续)还是异步的

BatchMode(在我们重新得到控制权之前是否完成后端的多个 SQL 语句?)

Comment

ConnectString

ConnectTimeout

DataSource

DispLogin(何时需要显示一个注册对话框?)

DispWarnings(是否显示不可俘获错误)

IdleTimeout

PassWord

QueryTimeout

Transactions(自动或人工)

UserID

WaitTime

所有这些都是可读/写属性。

SQL pass-through 函数

SQL pass-through (SPT) 类似于低级文件函数:它使您可以直接访问开放数据库连接 (ODBC) 提供的功能和您的后端数据。SPT 需要您编写代码来打开连接、传递命令、检查错误等等。这些操作通过一组以“SQL”三个字母开头的函数来处理。

要建立连接,使用 SQLCONNETC() 或 SQLSTRINGCONNETC() 函数,它们均返回一个连接句柄,这个句柄是 Visual FoxPro 指定给该连接的编号。在后继 SPT 函数调用中都要使用这个句柄。这些函数只有可选参数,没有必须的参数。如果不带参数使用它们,函数自动调用“选择连接”或“数据源”对话框;如果传递参数,可以包括已定义的数据源名称、用户标识以及密码;或者是一个已存在的命名连接的名字。

SQLSETPROP() 和 SQLGETPROP() 允许您设置或查看特定 SPT 句柄的属性。它们的工作方式与连接属性一样,不同的是您不能设置 Comment,ConnatSrring,Data Source,Idle Timeat 和 UserID 属性。而且您还能查看(但不能设置)ODBChdbc 和 ODBChsmt,它们分别是 ODBC 内部的连接和语句句柄,外部库文件 (FLL) 需要使用它们直接调用 ODBC。

大量的 SPT 工作是用 SQLEXE() 函数完成的,它允许向后端传递一个可执行的 SQL 命令,它还具有一个可选的参数,指定一个可读写的临时表来存储结果集合。SQLMORERESULTS() 允许您在异步模式下检索更多的信息。

SQLTABLES() 函数检索远程数据源中表的名称并存入本地临时表中。SQLCOLS() 函数检索指定远程数据库表中列的名称与列的信息,然后把那些信息存储进本地临时表中。

如果一个 SPT 函数返回错误代号,它的值指示发生的错误是连接错误还是环境错误。SQLERROR() 用来返回有关错误的详细信息。SQLERROR() 将提供任何组件层次的信息。

正如您所看到的,SQL pass-through 函数提供了一

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus