|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。 VFP因它复杂易学,可疾速创建使用软件而深受宽大程序员喜好,但其数据库体系不平安也令宽大用户十分头痛。跟着MSSQLServer数据库体系的推行使用,其壮大的平安功能广泛遭到好评。笔者在临时的编程理论中,发明使用VFP的SQLpass-through(SPT)手艺分离MSSQLServer数据库体系,也能像VB、Delphi、PowerBuilder一样轻松开辟出优异的客户/服务器(C/S)使用软件。现经由过程编写一个复杂的通讯录例子和宽大VFP喜好者配合切磋。
1、服务器端MSSQLServer数据库计划
1.在MSSQLServer中创建名为“SFXT”的数据库。
2.在SFXT数据库中创建名为“通讯录”的数据表,表布局以下:
列名(字段名) 数据范例 长度
姓名chr8
诞辰datetime8
德律风chr11
emailchr30
并将姓名设置为主键。
3.在“SFXT”数据库中创建查询出一切纪录的存储历程。SP_SearchAll
CREATEPROCEDURE[SP_SearchAll]
AS
select*from通讯录orderby姓名
return
4.在“SFXT”数据库中创建拔出新纪录的存储历程SP_InsertData。
CREATEPROCEDURE[SP_InsertData]
@name[char](10),
@birthday[datetime],
@telephone[char](11),
@email[char](30)
AS
insertinto通讯录(姓名,诞辰,德律风,email)values(@name,@birthday,@telephone,@email)
return
2、客户端VFP的SQLpass-through手艺计划
1.创建如(^15020603b^)的VFP表单界面。
2.创建名为“SFXT”的ODBC数据源毗连MSSQLServer中的SFXT数据库。
可经由过程实行下面VFP表单的按钮“创建OBDC数据源”来完成;大概经由过程运转Windows把持面板中的“OBDC数据源”来完成。次要设置包含选择SQLServer驱动程序,通讯协定,登录标识与暗码等。
“创建OBDC数据源”按钮.CLICK事务:
*函数申明SQLSTRINGCONNECT([cConnectString])
*省略毗连字符串cConnectString时显现""SQL数据源""对话框,可选择或新建数据源
sqlstringconnect()
3.两种毗连MSSQLServer数据源的体例。
利用现无数据源称号创建毗连,“创建毗连体例1”按钮.CLICK事务。
publicvodbc,vuser,vpwd,vconn
vodbc=sfxt &&毗连SQLSERVER数据库ODBC数据源称号
vuser=sa &&会见SQLSERVER数据库的登任命户名,sa为体系用户
vpwd=5213 &&用户登录暗码,为sa体系用户设置的暗码
vconn=SQLCONNECT(vodbc,vuser,vpwd)
ifvconn>0
messagebox(毗连乐成!,,ODBC数据源)
else
messagebox(毗连失利!,,ODBC数据源)
endif
利用毗连字符串创建数据源毗连,“创建毗连体例2”按钮.CLICK事务。
publicvconn
vconn=SQLSTRINGCONNECT(dsn=sfxt:uid=sa:pwd=5213)
ifvconn>0
messagebox(毗连乐成!,,ODBC数据源)
else
messagebox(毗连失利!,,ODBC数据源)
endif
4.数据源毗连的次要参数设置,“举动毗连属性设置”按钮.CLICK事务。
*注:用函数sqlgetprop()可前往设置的参数值
sqlsetprop(vconn,""asynchronous"",.f.)&&取假值时为了局集同步前往:取真值时为异步前往
sqlsetprop(vconn,""ConnectTimeOut"",15)&&毗连超时守候秒数设置,可取值0至600
sqlsetprop(vconn,""IdleTimeout"",0) &&余暇超工夫隔秒数,取值0为无穷期超时守候
sqlsetprop(vconn,""Transactions"",1) &&取值1时为主动处置远程事件:取值2时为手工处置
5.“实行存储历程查询数据”按钮.CLICK事务。
*函数申明SQLEXEC(nConnectionHandle,[cSQLCommand,[CursorName]])
*nConnectionHandle 以后数据源举动毗连句柄
*cSQLCommand 实行SQLSERVER存储历程的SQL语句表达式
*CursorName 前往实行了局一时表的称号
sqlexec(vconn,""executeSP_SearchAll"",""我的通讯录"")
browse
6.“实行SQL语句查询数据”按钮.CLICK事务。
*函数申明SQLEXEC(nConnectionHandle,[cSQLCommand,[CursorName]])
*nConnectionHandle 以后数据源举动毗连句柄
*cSQLCommand 需发送SQL语句表达式
*CursorName 前往实行了局一时表的称号
SQLEXEC(vconn,SELECT*FROM通讯录,我的通讯录)
browse
7.“向存储历程传替参数拔出新纪录”按钮.CLICK事务。
localvname,vbirthday,vtelephone,vemail,vsql
*随机发生新纪录举例
vname=姓名+sys(3) &&姓名
vbirthday=dtoc(date()-int(rand()*10000)) &&诞辰
vtelephone=sys(3) &&德律风
vemail=sys(3)+@hotmail.com &&电子邮箱
*将传送到存储历程的参数转换成字符串,并加引号构成SQL语句。
vsql=""executeSP_InsertData""+""""+vname+"",""+vbirthday+"",""+vtelephone+"",""+vemail+""""
ifsqlexec(vconn,vsql)>0 &&发送SQL语句
messagebox(拔出新纪录乐成!,,信息)
else
messagebox(拔出新纪录不乐成!,,信息)
endi
sqlexec(vconn,""executeSP_SearchAll"",""我的通讯录"")
browse
8.“设置以后表的属性修正数据”按钮.CLICK事务。
*注:用函数cursorgetprop()可前往设置的参数值
cursorsetprop(BatchUpdateCount,100) &&发送到缓冲表的远程数据源的更新指令的数量
cursorsetprop(Buffering,3) &&设置以后表为开放式行缓冲
cursorsetprop(FetchSize,-1) &&从远程表中提取全体查询纪录
cursorsetprop(KeyFieldList,姓名) &&指定远程表的主关头字段
cursorsetprop(SendUpdates,.t.) &&以后缓冲表变动内容时发送SQL语句更新远程表
cursorsetprop(Tables,通讯录) &&指定毗连的远程表名
*当地缓冲表与远程表字段对应干系
cursorsetprop(UpdateNameList,姓名通讯录.姓名,诞辰通讯录.诞辰,德律风通讯录.德律风,email通讯录.email)
*指定可更新字段列表
cursorsetprop(UpdatableFieldList,姓名,诞辰,德律风,email)
cursorsetprop(UpdateType,1) &&远程表更新体例,交换体例
cursorsetprop(WhereType,3) &&更新SQL语句中where子句包括主关头字与被修正过的字段
browse &&修正缓冲表数据,挪动纪录指针后,主动发送SQL语句更新远程表
9.“断开指向数据源的毗连”按钮.CLICK事务。
sqldisconnect(vconn)
10.“封闭”按钮.CLICK事务。
thisform.release
以上我们使用VFP的SQLpass-through手艺编写了一个复杂的通讯录办理程序,完成对SQLServer数据库中数据的拔出、查询、修正等基础功效,是一个典范的客户/服务器(C/S)布局的使用程序。但愿对读者从此开辟软件有所匡助。
如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。 |
|