Visual FoxPro 6.0与大型数据库的无“数据源”连接
敬业的IT人
互联网
佚名
2008-1-8 14:44:26
Fox系列数据库产品作为一种开发信息管理系统的微机常用工具,而深受开发人员以及广大用户的喜爱,但由于微电子技术的飞速发展,CPU处理速度的快速提升,硬盘的容量、速度及其它性能的显著提高,使得原来运行于小、中型机等高档次计算机上的SQL Server、Oracle、Sybase等大型数据库得以在微机上推广应用,使得较为流行的Fox系列微机数据库暗然失色,但随着Visual FoxPro3.0以及5.0、6.0版本的推出,引入了许多新的特性,因其融入可视化编程,面向对象程序设计以及ODBC技术,它们的发布给其带来新的生机。
一.Visual FoxPro 6.0作为客户端开发工具的技术特点:
Visual FoxPro 6.0提供了支持客户机/服务器所需要的各种特征,包括SQL传递技术、事务处理、远程视图、数据字典、NULL类型、数据库升迁、及对ODBC资源的仪程;通过ODBC,可以访问几乎任何类型的数据库,如Oracle、SQL Server、Sybase等主流数据库,不失为客户机/服务器结构应用系统的客户端优秀开发工具,具有如下的特点:
1.开发应用系统快捷、方便,可以减轻开发人员的劳动强度,节省大量的开发时间:面向对象特性,如对象、类及其继承性、封闭性、多态性属性等,作为XBASE语言的扩展集而实现,提供了对面向对象程序设计的全面支持,使开发者更多把精力放在系统前期分析和程序设计上,而不是编码上。遵循所见即所得的原则,提供了向导、代码范围分析器、项目管理器、设计器和生成器等图形化风格的交互开发工具,使设计工作在富有情趣的环境中进行。多姿多彩的工具栏,给用户带来诸多的便利。
2.方便实现数据共享、转换:Visual Foxpro与其他Windows应用程序紧密结合,支持所有Windows的数据共享机制,包括动态连接库(DLL,Dynamic Link Library)、动态数据交换(DDE,Dynamic Data Exchange)及对象连接和嵌入(OLE,Object Linking and Embedding)等,可以与Microsoft其他应用软件,如Word、Excel等,共享数据资源,快转换成各种格式文档资料;可以利用OLE自动化命令调用其他软件中的数据。
3.丰富多媒体数据处理功能:Visual Foxpro 6.0不但能进行文本格式文件、数据库文件的处理,还提供对GIF(Graphics Interchange Format)和JPEG(Joint Photographic Electronic Group)图形文件的支持,它提供了一个多媒体控制接口。通过多媒体控制接口(MCI,Multimedia Control Interface),无须介入实际设备的复杂编程就可以操纵所有的多媒体设备,例如,对MMControl控件的简单编程就可以实现视频文件、音频文件的播放等操作。
4.方便的应用编程接口(API,Application Programming Interface)调用:Visual Foxpro 6.0提供了应用编程接口(API),把其与Visual Studio套件中的其他开发工具融为一体,紧密结合,可以满足较复杂的应用系统编程需求。
5.开发应用系统体积小、运行速度快:Visual Foxpro大量应用动态连接库(DLL,Dynamic Link Library)机制,DLL具有一次调入内存可被多各程序、线程调用,大大减小了内存空间占用,缩小所编译程序的长度。 二.数据库连接及操作函数:
Visual FoxPrp 6.0数据库与其它数据库的连接有两种方法:一种使用控件连接;另一种使用函数连接。
1.用控件连接数据库方法:在表单中加入ADO控件,具体实现过程如下:
①.建表单Visual FoxPro→“新建”→“表单”→“新建文件”;
②.选择控件“工具”→“选择”→“控件”→选中“控件”→选择“MicrosoftADO Data Control,Version 6.0(OLEDB)”控件→“确定”;
③.添加控件“查看类”→选择“ActiveX控件”→在显示控件中选择“Microsoft ADO Data Control,Version 6.0(OLEDB)”控件→在表单中加入“ADO”控件;
④.设置ADO对象属性,如ConnectionString、UserName、PassWord、CommandType、RecordSource等。
2.用函数连接数据库方法:这是本文重介绍的方法。下面让我们来认识下列一组函数,它们是SQLCONNECT()、SQLSTRINGCONNECT()、SQLDISCONNECT()、SQLGETPROP()、SQLSETPROP()、SQLPREPARE()、SQLEXEC()、SQLCANCEL()、SQLMORERESULTS()、SQLCOLUMNS()、SQLTABLES()、SQLCOMMIT()和SQLROLLBACK(),它们可以全面完成数据库的连接、处理与提交处理,见下表。
类别
函数名称
运行方式
函数功能
连接
处理
SQLCONNECT([DataSourceName,
cUserID,cPassword|
cConnectionName])
异步
建立与数据源的连接。SQLSTRINGCONNECT
([cConnectString])
异步
通过连接字符串建立与数据源的连接。SQLDISCONNECT(nConnectHandle)
异步
断开数据源连接。连接
设置
处理
SQLGETPROP(nConnectionHandle,
cSetting)
异步
返回活动连接的当前设置或缺省设置参数值。SQLSETPROP(nConnectionHandle,
cSetting[,eExpression])
异步
设置活动连接的属性参数值。SQL
语句
执行
处理
SQLPREPARE(nConnectionHandle,
cSQLCommand[,CursorName])
异步
准备SQLEXEC()远程执行的SQL语句。SQLEXEC(nConnectionHandle
[,cSQLCommand[,CursorName]])
同步,异步
将SQL语句发送到数据源进行处理。SQLCANCEL(nConnectionHandle)
异步
请求取消正在执行的SQL语句。数据
处理
SQLMORERESULTS(nConnectHandle)
同步,异步
如果有多个结果集,将另一个结果集复制到游标中。SQLCOLUMNS(nConnectionHandl,
Tablename[,"FOXPRO"|"NATIVE"]
[,CursorName])
同步,异步
将数据源指定表的列信息存放到Visual FoxPro游标中。SQLTABLES(nConnectionHandle
[,cTableTypes][,cCursorName])
同步,异步
将数据源中表的信息存放到Visual FoxPro游标中。事务
处理
SQLCOMMIT(nConnectionHandle)
异步
提交一项事务。SQLROLLBACK(nConnectionHandle)
异步
取消当前事务处理过程中所做全部处理。
续上表
函数名称
参数注释
数值类型
函数功能
SQLCONNECT
([DataSourceName,cUserID,
cPassword|cConnectionName])
DataSourceName指定ODBC.ini文件中定义的数据源的名称;
cUserID注册到数据源的用户名称;
cPassword数据源用户口令;
cConnectionName由CREATE CONNECTION创建的命名连接.
数值型
正整数执行成功;
-1出现连接层错误;
-2出现环境层错误.
SQLSTRINGCONNECT
([cConnectString])
cConnectStringODBC驱动器所要求的数据源连接串,Visual FoxPro将连接串传递给ODBC驱动器.
数值型
正整数执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLDISCONNECT
(nConnectHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLGETPROP
(nConnectionHandle,cSetting)
nConnectionHandle连接句柄;
cSetting连接属性名称.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLSETPROP
(nConnectionHandle,
cSetting[,eExpression])
nConnectionHandle连接句柄;
cSetting连接属性名称;
eExpression连接属性参数值.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLPREPARE
(nConnectionHandle,
cSQLCommand[,CursorName])
nConnectionHandle连接句柄;
cSQLCommand传递到数据源的SQL语句;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.
SQLEXEC
(nConnectionHandle
[,cSQLCommand[,CursorName]])
nConnectionHandle连接句柄;
cSQLCommand传递到数据源的SQL语句;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLCANCEL
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLMORERESULTS
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
2已经没有数据;
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLCOLUMNS
(nConnectionHandl,
Tablename[,"FOXPRO"|"NATIVE"]
[,CursorName])
nConnectionHandle连接句柄;
TableName返回其列名的表的名称;
FOXPRO|NATIVE列信息的格式;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLTABLES
(nConnectionHandle
[,cTableTypes][,cCursorName])
nConnectionHandle连接句柄;
cTableTypes指定一个或几个表类型,类型有'TABLE','VIEW','SYS TEM TABLE'或者数据源特定的合法的表类型标识符,必须大写, 若多个类型,各类型间以逗号分隔;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLCOMMIT
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLROLLBACK
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.
属性名称
数值类型
缺省值
注释
Asynchronous
逻辑型
可读写
.F.
.F.同步返回结果集;
.T.同步返回结果集.BatchMode
逻辑型
可读写
.T.
.F.由SQLMORERESULTS()逐个返回结果集;
.T.由SQLEXEC()一次返回所有结果集.ConnectBusy
逻辑型
只读
不定
.F.共享连接不忙;
.T.共享连接繁忙.ConnectString
字符型
只读
不定
注册连接串.ConnectTimeOut
数值型
可读写
15
设置返回连接超时错误之前等待的时间(秒);
0无限期等待,并且不返回连接超时错误;
可以是0~600.DataSource
字符型
可读写
不定
ODBC.INI文件中定义的数据源名称.DispLogin
数值型
可读写
1
1或DB_PROMPTCOMPLETE(源于FOXPRO.H),仅当缺少必要信息时才显示ODBC注册对话框;
2或DB_PROMPTALWAYS(源于FOXPRO.H),总显示ODBC注册对话框,允许在连接前更改设置;
3或DB_PROMPTNEVER(源于FOXPRO.H),从不显示ODBC注册对话框,如果缺少必要信息,会产生错误.DispWarnings
逻辑型
可读写
.F.
.F.不显示错误信息;
.T.显示错误信息.IdleTimeOut
数值型
可读写
0
空闲超时间隔(秒),时间问隔过后,废止活动连接;0无限期等待.ODBChdbc
数值型
只读
不定
外部库文件(FLL文件)调用ODBC可使用的内部ODBC连接句柄.ODBChstmt
数值型
只读
不定
外部库文件(FLL文件)调用ODBC可使用的内部ODBC语句句柄.PacketSize
数值型
可读写
4096
连接所使用的网络包大小,调整该值可以改善性能.PassWord
字符型
只读
不定
连接口令.QueryTimeOut
数值型
可读写
0
返回一般超时错误之前的等待时间(秒);
0无限期等待,不返回超时错误;
可以是0~600.Transactions
数值型
可读写
1
1或DB_TRANSAUTO(源于FOXPRO.H),自动进行远程表事务处理;
2或者DB_TRANSMANUAL(源于FOXPRO.H),事务处理通过SQLCOMMIT()和SQLROLLBACK()函数人工进行.UserId
数值型
只读
不定
用户标识.WaitTime
数值型
可读写
100
检查SQL命令执行情况之前经过的时间(毫秒). 三.细说连接字符串(或ConnectionString):
在SQLSTRINGCONNECT([cConnectString])函数中变量cConnectString与ADO控件对象的ConnectionString属性具有相同一致的内容,为可读写String类型,提供数据提供者或服务提供者打开到数据源连接所需要的特定信息,就MicrosoftOLE DB Provider for ODBC
提供者来讲包括Provider、driver、Server、database、DSN、UID、PWD等,在以前发表的文章中已经谈过,这里再赘述一下。
1.Provider:字符串表达式,指定OLE DB数据或服务提供者的名称。
三种提供者:数据提供者、服务提供者和服务组件,分为两类,提供数据的提供者和提供服务的提供者。数据提供者拥有其自己的数据并将数据以表的格式显露给应用程序。服务提供者通过产生和消费数据将服务封装,使ADO应用程序中的功能得以扩大。服务提供者也可以进一步定义为服务组件,服务组件必须连同其他服务提供者或组件一起工作。
①.数据提供者:
由于每个提供者都是唯一的,所以应用程序与ADO交互作用的方式在不同的提供者之间略有差别,应用时需要注意它们之间的差别。不同数据提供者(Provider)其值归结于以下:
内容
主题
字符串值
ODBC数据库
Microsoft OLE DB Provider for ODBC
Microsoft OLE DB Provider for Microsoft Index Server
Microsoft OLE DB Provider for Microsoft Active Directory ServiceADSDSOObjectMicrosoft? Jet数据库
OLE DB Provider for Microsoft Jet
Microsoft.Jet.OLEDB.4.0Microsoft? SQL Server
Microsoft OLE DB Provider for SQL Server
Microsoft OLE DB Provider for Oracle
②.服务提供者:
要使用服务提供者,必须提供关键字。同时,也应当知道与每个服务提供者相关联的、特定提供者的动态属性。当前可从Microsoft获得的每个服务提供者的特定提供者(Provider)其值资料如下:
主题
字符串值
Microsoft Data Shaping Service for OLE DB
2.DRIVER:字符串表达式,表示ODBC驱动程序的名称。它并不是ODBC驱动程序动态连接库(DLL)文件名。对于其中的定义必须用{}括起来,名称的选择可以通过以下途径:
对于Windows9x和Windows NT:
"开始"→"设置" →"控制面板" →"数据源(ODBC)" →"ODBC数据源管理器" →"驱动程序"中
对于Windows 2000:
"开始"→"设置" →"控制面板"→"管理工具" →"数据源(ODBC)" →"ODBC数据源管理器" →"驱动程序"中
可以看到下列驱动程序名称:
Driver da Microsoft para arquivos texto (*.txt;*.csv)
Driver do Microsoft Access(*.mdb)
Driver do Microsoft dBase (*.dbf)
Driver do Microsoft Excel(*.xls)
Driver do Microsoft Paradox (*.db )
Driver para o Microsoft Visual FoxPro
Microsoft Access Driver (*.mdb)
Microsoft Access-Treiber (*.mdb)
Microsoft dBase Driver (*.dbf)
Microsoft dBase VFP Driver (*.dbf)
Microsoft dBase-Treiber (*.dbf)
Microsoft Excel Driver (*.xls)
Microsoft Excel-Treiber (*.xls)
Microsoft FoxPro Driver (*.dbf)
Microsoft FoxPro VFP Driver (*.dbf)
Microsoft ODBC for Oracle
Microsoft Paradox Driver (*.db )
Microsoft Paradox-Treiber (*.db )
Microsoft Text Driver (*.txt;*.csv)
Microsoft Text-Treiber (*.txt;*.csv)
Microsoft Visual FoxPro Driver
Microsoft Visual FoxPro-Treiber
SQL Server
Sybase System 11
从其中选择自己所需要的驱动程序名称,值得指出的是有些驱动程序是微软公司的产品在安装操作系统时就安装了,而有些数据库产品的驱动程序由开发数据库产品的软件公司随数据库产品一起提供,需在安装数据库时选择安装上,才可以使用。否则在此找不到驱动程序。例如:Sybase数据库驱动程序。
3.SERVER(SRVR):字符串表达式,一些资料介绍为服务器名称,经笔者实践认为确切地应为数据库服务名称,由于象SQL Server、Sybase等数据库在安装时自动把服务器名称缺省设置为数据库服务名称,但如果只在“我的电脑” →“属性” →“网络标识” →“属性”中更改计算机名,而不改变数据库服务名称,使之不相同,在程序中应以数据库服务名称为准。
4.DATABASE(DB):字符串表达式,指定要与其建立连接的数据库名称。需要特别指出的是即使DSN定义已经指定了数据库,也可以在DSN之外指定DATABASE参数以便连接到不同的数据库。这同时更改了DSN定义以包括指定的数据库。使用DSN时始终包括DATABASE参数是一种好办法。这样将保证能连接到正确的数据库,因为其他用户可能会在上一次检查DSN定义后更改默认的数据库参数。
5.DSN(Data Source):字符串表达式,在此为空,无须指定连接的ODBC数据源的名称
6.UID(User ID):字符串表达式,为ODBC数据源指定用户标识(用户帐号名),指定用户必须有足够的权限。
7.PWD(Password):字符串表达式,为ODBC数据源指定用户口令,必须有足够的权限。
除了ADO所定义的参数外,提供者不支持任何特定连接参数。但是,提供者将把任何非ADO连接参数传递给ODBC驱动程序管理器。
由于可以省略Provider参数,因此使用与撰写ODBC连接字符串时用的相同参数名(DRIVER=、DATABASE=、DSN= 等等)、值和语法,可以撰写与同一数据源的ODBC连接字符串相同的ADO连接字符串。
1.对于SQL Server数据库:
[Provider=MSDASQL;]
DRIVER={Driver Name};
SERVER=server;
DATABASE=database;
UID=user;
PWD=password"
例如:
cnna.ConnectionString = "Provider=MSDASQL;"_
+ "driver={SQL Server};"_
+ "server=servera; "_
+ "database=pubs; "_
+ "uid=sa; "_
+ "pwd=yyuui"
2. 对于Sybase数据库:
[PROVIDER=MSDASQL;]
DRIVER={Driver Name};
SRVR=server; 注:必须是SRVR,而不能是SERVER。
DB=database; 注:可以是DB,也可以DATABASE。
DSN=; 注:该项可以省略。
UID=user;
PWD=passwod
例如:
cnnb.ConnectionString = "Provider=MSDASQL;"_
+ "DRIVER={Sybase System 11};"_
+ "SRVR=serveru; "_
+ "DSN=;"_
+ "DB=dataa; "_
+ "UID=sa; "_
+ "PWD=dqwe"_
3. 对于Oracle数据库:
[PROVIDER=MSDASQL;]
DRIVER={Driver Name};
SERVER=server;
databasename=database;
databasefile=path;
DSN=;
UID=user;
PWD=password;
例如:
cnnc.ConnectionString = "Provider=MSDASQL;"_
+ "DRIVER={Microsoft ODBC for Oracle};"_
+ "SERVER=Webserver; "_
+ "DSN=;"_
+ "databasename=dataall; "_
+ "databasefile=d:\data\;"_
+ "UID=dba; "_
+ "PWD=zxcv"
4. 对于Informix数据库:
[Provider=MSDASQL;]
Driver={Driver Name};
Host=IP Adress;
Database=database;
UID=user;
PWD=password;
FetchBufferSize=integer;
NoLoginBox=Yes;
Options=;
Protocol=TCP/IP;
ReadOnly=No;
ServerOptions=;
ServerType=Informix Version
例如:
cnnd.ConnectionString = "Provider=MSDASQL;" _
+ "Driver={OpenLink Generic 32 Bit Driver};" _
+ "Host=11.66.17.151;" _
+ "Database=pubs;" _
+ "UID=sa;" _
+ "PWD=asdf;" _
+ "FetchBufferSize=30;" _
+ "NoLoginBox=Yes;" _
+ "Options=;" _
+ "Protocol=TCP/IP;" _
+ "ReadOnly=No;" _
+ "ServerOptions=;" _
+ "ServerType=Informix 7.2"
注:[]中的内容可以省略。
服务器安装windows2000 Server操作系统,以Sybase11.9.2数据库作为服务器端数据库管理数据;客户端安装Windows 98,Sybase客户端程序Open Client,以Visual FoxPro 6.0数据库作为客户端开发工具。扬长避短,相得益彰,充分发挥Sybase数据库安全性、可靠性高,管理数据量大;Visual FoxPrp 6.0数据库开发人员熟悉,开发速度快,程序体积小,运行速度快,占用资源少的特点。
以Sybase 11.9.2为例,编制一个实用的学籍管理程序,以期达到抛砖引玉的效果;数据库名称为Studentdb,只包括一个表(Student),其结构如下:
字段名称宽度注释code nchar(22)代号name char(8)姓名birthday nchar(8)生日grade int 年级class int 班tuition numeric(7,2)学费maths numeric(5,2)数学chinese numeric(5,2)语文physicsnumeric(5,2)物理chemistrynumeric(5,2)化学history numeric(5,2)历史geobiology numeric(5,2)地理biology numeric(5,2)生物gym numeric(5,2)体育
调试程序时需要注意以下问题:
①.服务器端Sybase数据库服务必须处于启动状态;
②.客户端安装必须选中“√”ODBC Driver组件;
③.客户端通过Open Client程序组中的Dsedit组件配置连接,具体连接操作过程如下:“Dsedit”→“Add Server Object”→输入服务名称(Server Name)→“OK” →“单击”选择所输入服务名称→“单击”“Server Address” →“右键”→“Modify Attributes”→“Add”→选择“TCP”协议→“Network Address”在此输入IP地址和端口号,例:10.23.12.120,5000→“Ping Server”测试是否连通,否则检查机器连接或重复上述过程。
④.注意两种数据库数据类型的对应关系如下表:
Visual FoxPro 6.0数据库数据类型
Sybase数据库数据类型字符型(C)
Charncharnvarcharvarchar货币型(Y)
moneysmallmoney数值型(N)
decimalnumeric浮动型(F)
无日期型(D)
无日期时间型(T)
datetimeSmalldatetime双精度型(B)
floatReal整型(I)
Intsmallinttinyint逻辑型(L)
Bit备注型(M)
Text通用型(G)
image字符型(二进制)(C)
无备注型(二进制)(M)
binaryvarbinary
关键程序段:
*连接远程数据源
PROCEDURE Activate
wait window at 12,20 nowait "请稍后!正在连接远程数据源 ......"
VarDriver=THISFORM.Text1.Value
VarServer=THISFORM.Text2.Value
VarDatabase=THISFORM.Text3.Value
VarUser=THISFORM.Text4.Value
VarPassword=THISFORM.Text5.Value
Store sqlstringconnect("Provider=MSDASQL;DRIVER={"+alltrim(VarDriver)+"};
DSN=;SRVR="+alltrim(VarServer)+";DB="+alltrim(VarDatabase)+";UID="+alltrim(VarUser)+";
PWD="+alltrim(VarPassword)) to ConnHandle &&ConnHandle为连接句柄
if ConnHandle<0
=messagebox(space(4)+" 连接远程数据源失败!原因如下:"+chr(10);
+"1.“SYBASE信息”参数配置不正确;"+chr(10);
+"2.SYBASE服务("+alltrim(upper(VarServer))+")未启动。",16,"错误提示:")
wait clear
close all
return
else
wait clear
……
=sqldisconnect(ConnHandle)
endif
ENDPROC
……
PROCEDURE Release
=sqldisconnect(ConnHandle)
close all
ENDPROC
*查询
&&结果存入自定义游标MathsCursor
=sqlsetprop(ConnHandle,'batchmode',.T.) &&设置一次返回所有结果集
=sqlprepare(ConnHandle,"select code,name,grade,class,maths from student where grade='"+Vargrade+"' and class='"+Varclass+"'","mathscursor")
=sqlexec(ConnHandle)
……
*表单中加入页框控件,表格控件
THISFORM.Pageframe1.Page1.Grid1.RecordSource="mathscursor"
THISFORM.Pageframe1.Page1.Grid1.RecordSourceType=1 &&别名
THISFORM.Pageframe1.Page1.Grid1.Column1.ControlSource="mathscursor.code"
THISFORM.Pageframe1.Page1.Grid1.Column2.ControlSource="mathscursor.name"
THISFORM.Pageframe1.Page1.Grid1.Column3.ControlSource="mathscursor.grade"
THISFORM.Pageframe1.Page1.Grid1.Column4.ControlSource="mathscursor.class"
THISFORM.Pageframe1.Page1.Grid1.Column5.ControlSource="mathscursor.maths"
……
*修改
=sqlsetprop(ConnHandle,'transactions',2) &&设置人工事务处理
=sqlprepare(ConnHandle, "update student set grade=grade+1") &&新年升级处理
=sqlexec(ConnHandle)
if messagebox("确定修改所输入数据信息吗?",4+32,"运行提示:")=6
=sqlcommit(ConnHandle)
else
=sqlrollback(ConnHandle)
THISFORM.text1.setfocus
endif
……
*删除
Vargrade=THISFORM.Text1.Value
=sqlsetprop(ConnHandle,'transactions',2) &&设置人工事务处理
=sqlprepare(ConnHandle,"delete from student where grade='"+Vargrade+"'")
=sqlexec(ConnHandle)
if messagebox("确定删除所输入数据信息吗?",4+32,"运行提示:")=6
=sqlcommit(ConnHandle)
else
=sqlrollback(ConnHandle)
THISFORM.text1.setfocus
endif
……
*增加
Varcode=THISFORM.Text1.Value
Varname=THISFORM.Text1.Value
……
=sqlsetprop(ConnHandle,'transactions',2) &&设置人工事务处理
一.Visual FoxPro 6.0作为客户端开发工具的技术特点:
Visual FoxPro 6.0提供了支持客户机/服务器所需要的各种特征,包括SQL传递技术、事务处理、远程视图、数据字典、NULL类型、数据库升迁、及对ODBC资源的仪程;通过ODBC,可以访问几乎任何类型的数据库,如Oracle、SQL Server、Sybase等主流数据库,不失为客户机/服务器结构应用系统的客户端优秀开发工具,具有如下的特点:
1.开发应用系统快捷、方便,可以减轻开发人员的劳动强度,节省大量的开发时间:面向对象特性,如对象、类及其继承性、封闭性、多态性属性等,作为XBASE语言的扩展集而实现,提供了对面向对象程序设计的全面支持,使开发者更多把精力放在系统前期分析和程序设计上,而不是编码上。遵循所见即所得的原则,提供了向导、代码范围分析器、项目管理器、设计器和生成器等图形化风格的交互开发工具,使设计工作在富有情趣的环境中进行。多姿多彩的工具栏,给用户带来诸多的便利。
2.方便实现数据共享、转换:Visual Foxpro与其他Windows应用程序紧密结合,支持所有Windows的数据共享机制,包括动态连接库(DLL,Dynamic Link Library)、动态数据交换(DDE,Dynamic Data Exchange)及对象连接和嵌入(OLE,Object Linking and Embedding)等,可以与Microsoft其他应用软件,如Word、Excel等,共享数据资源,快转换成各种格式文档资料;可以利用OLE自动化命令调用其他软件中的数据。
3.丰富多媒体数据处理功能:Visual Foxpro 6.0不但能进行文本格式文件、数据库文件的处理,还提供对GIF(Graphics Interchange Format)和JPEG(Joint Photographic Electronic Group)图形文件的支持,它提供了一个多媒体控制接口。通过多媒体控制接口(MCI,Multimedia Control Interface),无须介入实际设备的复杂编程就可以操纵所有的多媒体设备,例如,对MMControl控件的简单编程就可以实现视频文件、音频文件的播放等操作。
4.方便的应用编程接口(API,Application Programming Interface)调用:Visual Foxpro 6.0提供了应用编程接口(API),把其与Visual Studio套件中的其他开发工具融为一体,紧密结合,可以满足较复杂的应用系统编程需求。
5.开发应用系统体积小、运行速度快:Visual Foxpro大量应用动态连接库(DLL,Dynamic Link Library)机制,DLL具有一次调入内存可被多各程序、线程调用,大大减小了内存空间占用,缩小所编译程序的长度。 二.数据库连接及操作函数:
Visual FoxPrp 6.0数据库与其它数据库的连接有两种方法:一种使用控件连接;另一种使用函数连接。
1.用控件连接数据库方法:在表单中加入ADO控件,具体实现过程如下:
①.建表单Visual FoxPro→“新建”→“表单”→“新建文件”;
②.选择控件“工具”→“选择”→“控件”→选中“控件”→选择“MicrosoftADO Data Control,Version 6.0(OLEDB)”控件→“确定”;
③.添加控件“查看类”→选择“ActiveX控件”→在显示控件中选择“Microsoft ADO Data Control,Version 6.0(OLEDB)”控件→在表单中加入“ADO”控件;
④.设置ADO对象属性,如ConnectionString、UserName、PassWord、CommandType、RecordSource等。
2.用函数连接数据库方法:这是本文重介绍的方法。下面让我们来认识下列一组函数,它们是SQLCONNECT()、SQLSTRINGCONNECT()、SQLDISCONNECT()、SQLGETPROP()、SQLSETPROP()、SQLPREPARE()、SQLEXEC()、SQLCANCEL()、SQLMORERESULTS()、SQLCOLUMNS()、SQLTABLES()、SQLCOMMIT()和SQLROLLBACK(),它们可以全面完成数据库的连接、处理与提交处理,见下表。
类别
函数名称
运行方式
函数功能
连接
处理
SQLCONNECT([DataSourceName,
cUserID,cPassword|
cConnectionName])
异步
建立与数据源的连接。SQLSTRINGCONNECT
([cConnectString])
异步
通过连接字符串建立与数据源的连接。SQLDISCONNECT(nConnectHandle)
异步
断开数据源连接。连接
设置
处理
SQLGETPROP(nConnectionHandle,
cSetting)
异步
返回活动连接的当前设置或缺省设置参数值。SQLSETPROP(nConnectionHandle,
cSetting[,eExpression])
异步
设置活动连接的属性参数值。SQL
语句
执行
处理
SQLPREPARE(nConnectionHandle,
cSQLCommand[,CursorName])
异步
准备SQLEXEC()远程执行的SQL语句。SQLEXEC(nConnectionHandle
[,cSQLCommand[,CursorName]])
同步,异步
将SQL语句发送到数据源进行处理。SQLCANCEL(nConnectionHandle)
异步
请求取消正在执行的SQL语句。数据
处理
SQLMORERESULTS(nConnectHandle)
同步,异步
如果有多个结果集,将另一个结果集复制到游标中。SQLCOLUMNS(nConnectionHandl,
Tablename[,"FOXPRO"|"NATIVE"]
[,CursorName])
同步,异步
将数据源指定表的列信息存放到Visual FoxPro游标中。SQLTABLES(nConnectionHandle
[,cTableTypes][,cCursorName])
同步,异步
将数据源中表的信息存放到Visual FoxPro游标中。事务
处理
SQLCOMMIT(nConnectionHandle)
异步
提交一项事务。SQLROLLBACK(nConnectionHandle)
异步
取消当前事务处理过程中所做全部处理。
- ·认识VF--Visual FoxPro 漫谈
·Visual Foxpro通用报表打印程序
·Visual Foxpro生成任意打印字段报表的
·为Visual FoxPro应用程序增加文件压缩
·Visual FoxPro 9.0更强大了
·Visual FoxPro9.0中扩展报表系统功能
·使用 Visual FoxPro 的TreeView 控件
·Visual Foxpro 的一个BUG
·Microsoft Visual FoxPro的性能调整技
·怎样在Visual FoxPro 中增加与去除网
续上表
函数名称
参数注释
数值类型
函数功能
SQLCONNECT
([DataSourceName,cUserID,
cPassword|cConnectionName])
DataSourceName指定ODBC.ini文件中定义的数据源的名称;
cUserID注册到数据源的用户名称;
cPassword数据源用户口令;
cConnectionName由CREATE CONNECTION创建的命名连接.
数值型
正整数执行成功;
-1出现连接层错误;
-2出现环境层错误.
SQLSTRINGCONNECT
([cConnectString])
cConnectStringODBC驱动器所要求的数据源连接串,Visual FoxPro将连接串传递给ODBC驱动器.
数值型
正整数执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLDISCONNECT
(nConnectHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLGETPROP
(nConnectionHandle,cSetting)
nConnectionHandle连接句柄;
cSetting连接属性名称.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLSETPROP
(nConnectionHandle,
cSetting[,eExpression])
nConnectionHandle连接句柄;
cSetting连接属性名称;
eExpression连接属性参数值.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLPREPARE
(nConnectionHandle,
cSQLCommand[,CursorName])
nConnectionHandle连接句柄;
cSQLCommand传递到数据源的SQL语句;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.
SQLEXEC
(nConnectionHandle
[,cSQLCommand[,CursorName]])
nConnectionHandle连接句柄;
cSQLCommand传递到数据源的SQL语句;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLCANCEL
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLMORERESULTS
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
2已经没有数据;
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLCOLUMNS
(nConnectionHandl,
Tablename[,"FOXPRO"|"NATIVE"]
[,CursorName])
nConnectionHandle连接句柄;
TableName返回其列名的表的名称;
FOXPRO|NATIVE列信息的格式;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLTABLES
(nConnectionHandle
[,cTableTypes][,cCursorName])
nConnectionHandle连接句柄;
cTableTypes指定一个或几个表类型,类型有'TABLE','VIEW','SYS TEM TABLE'或者数据源特定的合法的表类型标识符,必须大写, 若多个类型,各类型间以逗号分隔;
CursorName存放结果集的游标名称,缺省游标名SQLRESULT.
数值型1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLCOMMIT
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.SQLROLLBACK
(nConnectionHandle)
nConnectionHandle连接句柄.
数值型
1执行成功;
-1出现连接层错误;
-2出现环境层错误.
- ·认识VF--Visual FoxPro 漫谈
·Visual Foxpro通用报表打印程序
·Visual Foxpro生成任意打印字段报表的
·为Visual FoxPro应用程序增加文件压缩
·Visual FoxPro 9.0更强大了
·Visual FoxPro9.0中扩展报表系统功能
·使用 Visual FoxPro 的TreeView 控件
·Visual Foxpro 的一个BUG
·Microsoft Visual FoxPro的性能调整技
·怎样在Visual FoxPro 中增加与去除网
属性名称
数值类型
缺省值
注释
Asynchronous
逻辑型
可读写
.F.
.F.同步返回结果集;
.T.同步返回结果集.BatchMode
逻辑型
可读写
.T.
.F.由SQLMORERESULTS()逐个返回结果集;
.T.由SQLEXEC()一次返回所有结果集.ConnectBusy
逻辑型
只读
不定
.F.共享连接不忙;
.T.共享连接繁忙.ConnectString
字符型
只读
不定
注册连接串.ConnectTimeOut
数值型
可读写
15
设置返回连接超时错误之前等待的时间(秒);
0无限期等待,并且不返回连接超时错误;
可以是0~600.DataSource
字符型
可读写
不定
ODBC.INI文件中定义的数据源名称.DispLogin
数值型
可读写
1
1或DB_PROMPTCOMPLETE(源于FOXPRO.H),仅当缺少必要信息时才显示ODBC注册对话框;
2或DB_PROMPTALWAYS(源于FOXPRO.H),总显示ODBC注册对话框,允许在连接前更改设置;
3或DB_PROMPTNEVER(源于FOXPRO.H),从不显示ODBC注册对话框,如果缺少必要信息,会产生错误.DispWarnings
逻辑型
可读写
.F.
.F.不显示错误信息;
.T.显示错误信息.IdleTimeOut
数值型
可读写
0
空闲超时间隔(秒),时间问隔过后,废止活动连接;0无限期等待.ODBChdbc
数值型
只读
不定
外部库文件(FLL文件)调用ODBC可使用的内部ODBC连接句柄.ODBChstmt
数值型
只读
不定
外部库文件(FLL文件)调用ODBC可使用的内部ODBC语句句柄.PacketSize
数值型
可读写
4096
连接所使用的网络包大小,调整该值可以改善性能.PassWord
字符型
只读
不定
连接口令.QueryTimeOut
数值型
可读写
0
返回一般超时错误之前的等待时间(秒);
0无限期等待,不返回超时错误;
可以是0~600.Transactions
数值型
可读写
1
1或DB_TRANSAUTO(源于FOXPRO.H),自动进行远程表事务处理;
2或者DB_TRANSMANUAL(源于FOXPRO.H),事务处理通过SQLCOMMIT()和SQLROLLBACK()函数人工进行.UserId
数值型
只读
不定
用户标识.WaitTime
数值型
可读写
100
检查SQL命令执行情况之前经过的时间(毫秒). 三.细说连接字符串(或ConnectionString):
在SQLSTRINGCONNECT([cConnectString])函数中变量cConnectString与ADO控件对象的ConnectionString属性具有相同一致的内容,为可读写String类型,提供数据提供者或服务提供者打开到数据源连接所需要的特定信息,就MicrosoftOLE DB Provider for ODBC
提供者来讲包括Provider、driver、Server、database、DSN、UID、PWD等,在以前发表的文章中已经谈过,这里再赘述一下。
1.Provider:字符串表达式,指定OLE DB数据或服务提供者的名称。
三种提供者:数据提供者、服务提供者和服务组件,分为两类,提供数据的提供者和提供服务的提供者。数据提供者拥有其自己的数据并将数据以表的格式显露给应用程序。服务提供者通过产生和消费数据将服务封装,使ADO应用程序中的功能得以扩大。服务提供者也可以进一步定义为服务组件,服务组件必须连同其他服务提供者或组件一起工作。
①.数据提供者:
由于每个提供者都是唯一的,所以应用程序与ADO交互作用的方式在不同的提供者之间略有差别,应用时需要注意它们之间的差别。不同数据提供者(Provider)其值归结于以下:
内容
主题
字符串值
ODBC数据库
Microsoft OLE DB Provider for ODBC
MSDASQL
Microsoft? Index ServerMicrosoft OLE DB Provider for Microsoft Index Server
MSIDXS
Microsoft? Active Directory ServiceMicrosoft OLE DB Provider for Microsoft Active Directory ServiceADSDSOObjectMicrosoft? Jet数据库
OLE DB Provider for Microsoft Jet
Microsoft.Jet.OLEDB.4.0Microsoft? SQL Server
Microsoft OLE DB Provider for SQL Server
SQLOLEDB
Oracle数据库Microsoft OLE DB Provider for Oracle
MSDAORA
②.服务提供者:
要使用服务提供者,必须提供关键字。同时,也应当知道与每个服务提供者相关联的、特定提供者的动态属性。当前可从Microsoft获得的每个服务提供者的特定提供者(Provider)其值资料如下:
主题
字符串值
Microsoft Data Shaping Service for OLE DB
MSDataShape
MicrosoftOLE DB Persistence ProviderMSPersist
Microsoft OLE DB Remoting ProviderMS Remote
2.DRIVER:字符串表达式,表示ODBC驱动程序的名称。它并不是ODBC驱动程序动态连接库(DLL)文件名。对于其中的定义必须用{}括起来,名称的选择可以通过以下途径:
对于Windows9x和Windows NT:
"开始"→"设置" →"控制面板" →"数据源(ODBC)" →"ODBC数据源管理器" →"驱动程序"中
对于Windows 2000:
"开始"→"设置" →"控制面板"→"管理工具" →"数据源(ODBC)" →"ODBC数据源管理器" →"驱动程序"中
可以看到下列驱动程序名称:
Driver da Microsoft para arquivos texto (*.txt;*.csv)
Driver do Microsoft Access(*.mdb)
Driver do Microsoft dBase (*.dbf)
Driver do Microsoft Excel(*.xls)
Driver do Microsoft Paradox (*.db )
Driver para o Microsoft Visual FoxPro
Microsoft Access Driver (*.mdb)
Microsoft Access-Treiber (*.mdb)
Microsoft dBase Driver (*.dbf)
Microsoft dBase VFP Driver (*.dbf)
Microsoft dBase-Treiber (*.dbf)
Microsoft Excel Driver (*.xls)
Microsoft Excel-Treiber (*.xls)
Microsoft FoxPro Driver (*.dbf)
Microsoft FoxPro VFP Driver (*.dbf)
Microsoft ODBC for Oracle
Microsoft Paradox Driver (*.db )
Microsoft Paradox-Treiber (*.db )
Microsoft Text Driver (*.txt;*.csv)
Microsoft Text-Treiber (*.txt;*.csv)
Microsoft Visual FoxPro Driver
Microsoft Visual FoxPro-Treiber
SQL Server
Sybase System 11
从其中选择自己所需要的驱动程序名称,值得指出的是有些驱动程序是微软公司的产品在安装操作系统时就安装了,而有些数据库产品的驱动程序由开发数据库产品的软件公司随数据库产品一起提供,需在安装数据库时选择安装上,才可以使用。否则在此找不到驱动程序。例如:Sybase数据库驱动程序。
3.SERVER(SRVR):字符串表达式,一些资料介绍为服务器名称,经笔者实践认为确切地应为数据库服务名称,由于象SQL Server、Sybase等数据库在安装时自动把服务器名称缺省设置为数据库服务名称,但如果只在“我的电脑” →“属性” →“网络标识” →“属性”中更改计算机名,而不改变数据库服务名称,使之不相同,在程序中应以数据库服务名称为准。
4.DATABASE(DB):字符串表达式,指定要与其建立连接的数据库名称。需要特别指出的是即使DSN定义已经指定了数据库,也可以在DSN之外指定DATABASE参数以便连接到不同的数据库。这同时更改了DSN定义以包括指定的数据库。使用DSN时始终包括DATABASE参数是一种好办法。这样将保证能连接到正确的数据库,因为其他用户可能会在上一次检查DSN定义后更改默认的数据库参数。
5.DSN(Data Source):字符串表达式,在此为空,无须指定连接的ODBC数据源的名称
6.UID(User ID):字符串表达式,为ODBC数据源指定用户标识(用户帐号名),指定用户必须有足够的权限。
7.PWD(Password):字符串表达式,为ODBC数据源指定用户口令,必须有足够的权限。
- ·认识VF--Visual FoxPro 漫谈
·Visual Foxpro通用报表打印程序
·Visual Foxpro生成任意打印字段报表的
·为Visual FoxPro应用程序增加文件压缩
·Visual FoxPro 9.0更强大了
·Visual FoxPro9.0中扩展报表系统功能
·使用 Visual FoxPro 的TreeView 控件
·Visual Foxpro 的一个BUG
·Microsoft Visual FoxPro的性能调整技
·怎样在Visual FoxPro 中增加与去除网
除了ADO所定义的参数外,提供者不支持任何特定连接参数。但是,提供者将把任何非ADO连接参数传递给ODBC驱动程序管理器。
由于可以省略Provider参数,因此使用与撰写ODBC连接字符串时用的相同参数名(DRIVER=、DATABASE=、DSN= 等等)、值和语法,可以撰写与同一数据源的ODBC连接字符串相同的ADO连接字符串。
1.对于SQL Server数据库:
[Provider=MSDASQL;]
DRIVER={Driver Name};
SERVER=server;
DATABASE=database;
UID=user;
PWD=password"
例如:
cnna.ConnectionString = "Provider=MSDASQL;"_
+ "driver={SQL Server};"_
+ "server=servera; "_
+ "database=pubs; "_
+ "uid=sa; "_
+ "pwd=yyuui"
2. 对于Sybase数据库:
[PROVIDER=MSDASQL;]
DRIVER={Driver Name};
SRVR=server; 注:必须是SRVR,而不能是SERVER。
DB=database; 注:可以是DB,也可以DATABASE。
DSN=; 注:该项可以省略。
UID=user;
PWD=passwod
例如:
cnnb.ConnectionString = "Provider=MSDASQL;"_
+ "DRIVER={Sybase System 11};"_
+ "SRVR=serveru; "_
+ "DSN=;"_
+ "DB=dataa; "_
+ "UID=sa; "_
+ "PWD=dqwe"_
3. 对于Oracle数据库:
[PROVIDER=MSDASQL;]
DRIVER={Driver Name};
SERVER=server;
databasename=database;
databasefile=path;
DSN=;
UID=user;
PWD=password;
例如:
cnnc.ConnectionString = "Provider=MSDASQL;"_
+ "DRIVER={Microsoft ODBC for Oracle};"_
+ "SERVER=Webserver; "_
+ "DSN=;"_
+ "databasename=dataall; "_
+ "databasefile=d:\data\;"_
+ "UID=dba; "_
+ "PWD=zxcv"
4. 对于Informix数据库:
[Provider=MSDASQL;]
Driver={Driver Name};
Host=IP Adress;
Database=database;
UID=user;
PWD=password;
FetchBufferSize=integer;
NoLoginBox=Yes;
Options=;
Protocol=TCP/IP;
ReadOnly=No;
ServerOptions=;
ServerType=Informix Version
例如:
cnnd.ConnectionString = "Provider=MSDASQL;" _
+ "Driver={OpenLink Generic 32 Bit Driver};" _
+ "Host=11.66.17.151;" _
+ "Database=pubs;" _
+ "UID=sa;" _
+ "PWD=asdf;" _
+ "FetchBufferSize=30;" _
+ "NoLoginBox=Yes;" _
+ "Options=;" _
+ "Protocol=TCP/IP;" _
+ "ReadOnly=No;" _
+ "ServerOptions=;" _
+ "ServerType=Informix 7.2"
注:[]中的内容可以省略。
- ·认识VF--Visual FoxPro 漫谈
·Visual Foxpro通用报表打印程序
·Visual Foxpro生成任意打印字段报表的
·为Visual FoxPro应用程序增加文件压缩
·Visual FoxPro 9.0更强大了
·Visual FoxPro9.0中扩展报表系统功能
·使用 Visual FoxPro 的TreeView 控件
·Visual Foxpro 的一个BUG
·Microsoft Visual FoxPro的性能调整技
·怎样在Visual FoxPro 中增加与去除网
服务器安装windows2000 Server操作系统,以Sybase11.9.2数据库作为服务器端数据库管理数据;客户端安装Windows 98,Sybase客户端程序Open Client,以Visual FoxPro 6.0数据库作为客户端开发工具。扬长避短,相得益彰,充分发挥Sybase数据库安全性、可靠性高,管理数据量大;Visual FoxPrp 6.0数据库开发人员熟悉,开发速度快,程序体积小,运行速度快,占用资源少的特点。
以Sybase 11.9.2为例,编制一个实用的学籍管理程序,以期达到抛砖引玉的效果;数据库名称为Studentdb,只包括一个表(Student),其结构如下:
字段名称宽度注释code nchar(22)代号name char(8)姓名birthday nchar(8)生日grade int 年级class int 班tuition numeric(7,2)学费maths numeric(5,2)数学chinese numeric(5,2)语文physicsnumeric(5,2)物理chemistrynumeric(5,2)化学history numeric(5,2)历史geobiology numeric(5,2)地理biology numeric(5,2)生物gym numeric(5,2)体育
调试程序时需要注意以下问题:
①.服务器端Sybase数据库服务必须处于启动状态;
②.客户端安装必须选中“√”ODBC Driver组件;
③.客户端通过Open Client程序组中的Dsedit组件配置连接,具体连接操作过程如下:“Dsedit”→“Add Server Object”→输入服务名称(Server Name)→“OK” →“单击”选择所输入服务名称→“单击”“Server Address” →“右键”→“Modify Attributes”→“Add”→选择“TCP”协议→“Network Address”在此输入IP地址和端口号,例:10.23.12.120,5000→“Ping Server”测试是否连通,否则检查机器连接或重复上述过程。
④.注意两种数据库数据类型的对应关系如下表:
Visual FoxPro 6.0数据库数据类型
Sybase数据库数据类型字符型(C)
Charncharnvarcharvarchar货币型(Y)
moneysmallmoney数值型(N)
decimalnumeric浮动型(F)
无日期型(D)
无日期时间型(T)
datetimeSmalldatetime双精度型(B)
floatReal整型(I)
Intsmallinttinyint逻辑型(L)
Bit备注型(M)
Text通用型(G)
image字符型(二进制)(C)
无备注型(二进制)(M)
binaryvarbinary
关键程序段:
*连接远程数据源
PROCEDURE Activate
wait window at 12,20 nowait "请稍后!正在连接远程数据源 ......"
VarDriver=THISFORM.Text1.Value
VarServer=THISFORM.Text2.Value
VarDatabase=THISFORM.Text3.Value
VarUser=THISFORM.Text4.Value
VarPassword=THISFORM.Text5.Value
Store sqlstringconnect("Provider=MSDASQL;DRIVER={"+alltrim(VarDriver)+"};
DSN=;SRVR="+alltrim(VarServer)+";DB="+alltrim(VarDatabase)+";UID="+alltrim(VarUser)+";
PWD="+alltrim(VarPassword)) to ConnHandle &&ConnHandle为连接句柄
if ConnHandle<0
=messagebox(space(4)+" 连接远程数据源失败!原因如下:"+chr(10);
+"1.“SYBASE信息”参数配置不正确;"+chr(10);
+"2.SYBASE服务("+alltrim(upper(VarServer))+")未启动。",16,"错误提示:")
wait clear
close all
return
else
wait clear
……
=sqldisconnect(ConnHandle)
endif
ENDPROC
……
PROCEDURE Release
=sqldisconnect(ConnHandle)
close all
ENDPROC
*查询
&&结果存入自定义游标MathsCursor
=sqlsetprop(ConnHandle,'batchmode',.T.) &&设置一次返回所有结果集
=sqlprepare(ConnHandle,"select code,name,grade,class,maths from student where grade='"+Vargrade+"' and class='"+Varclass+"'","mathscursor")
=sqlexec(ConnHandle)
……
*表单中加入页框控件,表格控件
THISFORM.Pageframe1.Page1.Grid1.RecordSource="mathscursor"
THISFORM.Pageframe1.Page1.Grid1.RecordSourceType=1 &&别名
THISFORM.Pageframe1.Page1.Grid1.Column1.ControlSource="mathscursor.code"
THISFORM.Pageframe1.Page1.Grid1.Column2.ControlSource="mathscursor.name"
THISFORM.Pageframe1.Page1.Grid1.Column3.ControlSource="mathscursor.grade"
THISFORM.Pageframe1.Page1.Grid1.Column4.ControlSource="mathscursor.class"
THISFORM.Pageframe1.Page1.Grid1.Column5.ControlSource="mathscursor.maths"
……
*修改
=sqlsetprop(ConnHandle,'transactions',2) &&设置人工事务处理
=sqlprepare(ConnHandle, "update student set grade=grade+1") &&新年升级处理
=sqlexec(ConnHandle)
if messagebox("确定修改所输入数据信息吗?",4+32,"运行提示:")=6
=sqlcommit(ConnHandle)
else
=sqlrollback(ConnHandle)
THISFORM.text1.setfocus
endif
……
*删除
Vargrade=THISFORM.Text1.Value
=sqlsetprop(ConnHandle,'transactions',2) &&设置人工事务处理
=sqlprepare(ConnHandle,"delete from student where grade='"+Vargrade+"'")
=sqlexec(ConnHandle)
if messagebox("确定删除所输入数据信息吗?",4+32,"运行提示:")=6
=sqlcommit(ConnHandle)
else
=sqlrollback(ConnHandle)
THISFORM.text1.setfocus
endif
……
*增加
Varcode=THISFORM.Text1.Value
Varname=THISFORM.Text1.Value
……
=sqlsetprop(ConnHandle,'transactions',2) &&设置人工事务处理
=sqlprepare(ConnHandle,"INSERT INTO student(code,name,birthday,grade,class,tuition,maths,chinese,physics,
chemistry,history,geobiology,biology,gym);
VALUES('"+Varcode+"','"+Varname+"','"+Varbirthday+"',"+Vargrade+","+Varclass+",
"+Vartuition+","+Varmaths+","+Varchinese+","+Varphysics+","+Varchemistry+",
"+Varhistory+","+Vargeobiology+","+Varbiology+","+Vargym+")")
=sqlexec(ConnHandle)
if messagebox("确定增加所输入数据信息吗?",4+32,"运行提示:")=6
=sqlcommit(ConnHandle)
else
=sqlrollback(ConnHandle)
THISFORM.text1.setfocus
endif
……
- 最新文章
- TreeView 控件应用详解[01-08]
- 数据库应用程序需注意的问题[01-08]
- Visual FoxPro 9中新的数据处理方式[01-08]
- VFP表跟踪日志的实现方法[01-08]
- 修改VisualFoxPro类库实现按标[01-08]
- VFP5.0中的一个错误[01-08]
- 相关文章
- 数据库应用程序需注意的问题[01-08]
- VFP的数据库加密算法[01-08]
- 数据库规范化三个范式应用实例[01-08]
- 访问Foxpro数据库----用MicrosoftJet访问..[01-08]
- 快速发布VFP数据库[01-08]
- 合理使用VFP的向导设计数据库和表单[01-08]
