MYSQL网站制作之VFP顶用SPT会见SQL Server数据库
索引用来快速地寻找那些具有特定值的记录,所有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
AS
select*from通讯录orderby姓名
return
4.在“SFXT”数据库中创建拔出新纪录的存储历程SP_InsertData。
CREATEPROCEDURE
@name(10),
@birthday,
@telephone(11),
@email(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时显现""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,])
*nConnectionHandle 以后数据源举动毗连句柄
*cSQLCommand 实行SQLSERVER存储历程的SQL语句表达式
*CursorName 前往实行了局一时表的称号
sqlexec(vconn,""executeSP_SearchAll"",""我的通讯录"")
browse
6.“实行SQL语句查询数据”按钮.CLICK事务。
*函数申明SQLEXEC(nConnectionHandle,])
*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倍。 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。 我个人认为就是孜孜不懈的学习 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
页:
[1]