VFP与远程数据库的连接
用VFP编写C/S软件,首先要能够对远程数据控制。
VFP有远程视图、ADO和 SPT(SQL Pass Through) 技术控制远程数据库。
就我个人而言,我喜欢用SPT。因为用SPT,程序的每一步我都能清楚地知道。
STP的运用,主要分为以下几个方面:管理连接,执行SQL语句,事务处理。
1.连接到服务器
――用字符串与远程数据连接SQLSTRINGCONNECT()
这个函数只需一个以分号分隔的,用来描述远程数据源和可用连接设置的字符串参数。在机器上不要再设置ODBC,SQL Server与Access的连接是不相同的。连接成功后返回的是一个正整数的连接句柄,连接失败会返回一个负数,可用AERROR()函数来判断。
连接SQL Server数据库
*假定 SQL Server服务器名为gxscwk, 用户 ID 是sa, 口令是空串,数据库是ac990zw
nHandle=SQLSTRINGCONNECT(“Driver=SQL Server;server=gxscwk;database=ac990zw;uid=sa;pwd=”)
也可以将服务器、数据库、ID、口令使用变量及宏替换的方法
连接Access数据库
*假定Access数据库文件是AC0001.mdb,用户 ID、口令是空串
nHandle=SQLSTRINGCONNECT("Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\ac990\database\AC0001.mdb;Uid=;Pwd=")
这里数据库文件前用的是Dbq,与数据库文件也可以用函数getfile()来取得
如:dataname=getfile()
在VFP中可使用下面语句进行连接操作:
=SQLSETPROP(0,'displogin',3) &&不显示提示
nHandle=SQLSTRINGCONNECT(“Driver=SQL server;server=gxscwk;database=ac990zw;uid=sa;pw
d=”)
IF nHandle<0
LOCAL array laError[1]
AERROR(laError)
=MESSAGEBOX(laerror[2],0+16,"错误:"+transform(laError[1]))
Return &&出错返回
ELSE
=MESSAGEBOX("连接正确",0+64,"正确") &&不出错,就可以提交SQL查询。
ENDIF
断开连接
SQLDISCONNECT(nHandle) 断开一个连接
或用SQLDISCONNECT(0) 断开所有连接
当应用程序不需要连接时,应及时释放连接,因为连接会消耗服务器上的宝贵资源,并且连接数是受许可证约束条件限制的。因此尽是不要将连接句柄nHandle作为公共变量。
2.访问元数据
有二个函数SQLTABLES(),SQLCOLUMNS()
SQLTABLES()检索数据库中表和视图的信息
=SQLTABLES(nHandle,”’TABLE’,’VIEW’”,”MyCursor”)
SQLCOLUMNS()返回指定表中列信息的结果集合
=SQLCOLUMNS(nHandle,”表名”,“FOXPRO”)
或
=SQLCOLUMNS(nHandle,”表名”,“NATIVE”)
第三个参数不同,返回格式不同。这一段好象有点问题。
3.提交SQL查询
与远程数据库交互,用SQLEXEC()函数。使用该函数可以提交SELECT,INSERT,DELETE,UPDATE;还可以调用存储过程。函
数执行成功,返回一个大于0的值,表示通过服务器返回的结果集合的数目。如果返回一个负数,表示发生了错误,可以使用AERROR()函数来检索错误信息。在进行异步查询时,函数可能返回0值。
SQL查询语句的主要用法:
插入数据
INSERT INTO table_name (column_list) VALUES (expression)
INSERT INTO table_name
SELECT column_list
FROM table_list
WHERE search_conditions
更新数据
UPDATA table_name
SET column_name=expression,…
WHERE search_condition
删除数据
DELETE FROM table_name
WHERE search_condition
查询数据
Select 字段列表
from 数据库.表名 表连接
where 查询条件
group by 分组条件
having
union (select命令)
order by 排序条件
=SQLEXEC(nHwl,SQL,SQL语句[,本地临时表名])
如:
=SQLEXEC(nHwl,"select * from 操作员","curb1")
SQL语句中Where子句时注意:
变量可用宏替换,
远程表字段是:
sql连接不上服务器字符型的要用单引号,
数值型的不用引号,
日期型的要前后用#分隔,如#2006/3/13#,而且Access中要用钭杠”/”作为日期分隔符,
有多个不确定的条件时,每个开头用and ,最后用subst(where子句,5)去掉前4个字符,
现在发现变量最好用参数,即?加变量名,好处是不用管字段类型等,查询、输入等都可以。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论