若天明 发表于 2015-1-16 22:19:12

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倍。

第二个灵魂 发表于 2015-1-19 08:34:59

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

蒙在股里 发表于 2015-1-25 14:02:15

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

变相怪杰 发表于 2015-2-2 22:21:10

我个人认为就是孜孜不懈的学习

仓酷云 发表于 2015-2-8 14:51:22

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

小妖女 发表于 2015-3-8 02:04:20

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。

乐观 发表于 2015-3-22 04:10:13

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

金色的骷髅 发表于 2015-3-22 04:10:14

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
页: [1]
查看完整版本: MYSQL网站制作之VFP顶用SPT会见SQL Server数据库