VFP+SQLSERVER实例讲解4.doc_第1页
VFP+SQLSERVER实例讲解4.doc_第2页
VFP+SQLSERVER实例讲解4.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VFP+SQL SERVER实例讲解4日期:2007-06-21来源: 作者:字体:大 中 小 KeyField,.T.)DBSETPROP(VCustomers.CompanyName,Field,Updatable,.T.)DBSETPROP(VCustomers.Phone,Field,Updatable,.T.)DBSETPROP(VCustomers,View,SendUpdates,.T.) DBSETPROP(VCustomers,View,WhereType,3)*设定更新冲突解决方案为“关键字和已更新字段”DBSETPROP(VCustomers,View,UpdateType,1) *进程一USEVCustomersBROWSE*将指针停留在第一条记录上,即:CustomerID=ALFKIREPLACEPhonewith123456*离开Visualfoxpro,千万别移动记录指针进程二使用sqlServer的EnterpriseManager打开Customers表,把指针停在第一条记录上,修改Phone的值为00000,移动指针到下一条记录。回到VisualFoxPro,移动指针,您会看到图9:图9.更新冲突按“还原”按钮。试验结束。仔细想想,您就会明白什么是更新冲突了。上例中,如果我们设定“关键字”方式检测更新冲突:DBSETPROP(VCustomers,View,WhereType,1)其他均按原先步骤进行,您会发现没有更新冲突产生。因为VisualFoxPro仅检测关键字是否变化,这里进程一、二都没有修改关键字,当然不会有更新冲突。上例中,如果我们设定“关键字和可更新字段”方式检测更新冲突:DBSETPROP(VCustomers,View,WhereType,2)其他均按原先步骤进行,这时会有更新冲突产生。因为VisualFoxPro不仅检测关键字是否变化,还要检测所有的可更新字段字段(本例是所有字段)是否发生变化,这里进程二先进程一修改了可更新字段Phone,进程一当然会有更新冲突发生。如果使用SQLServer的Profiler程序您能更好的了解以上内容:图10。SQLServer的Profiler程序1.使用“关键字段”冲突检测方式,发送更新时,VisualFoxPro自动生成以下语句在SQLServer中执行:sp_executesqlNUPDATEdbo.CustomersSETPhone=P1WHERECustomerID=P2,NP1nvarchar(24),P2varchar(50),N123456,ALFKI可见,UPDATE的WHERE子句只包括关键字段:CustomerID。在VisualFoxPro缓冲中CustomerID=ALFKI,VisualFoxPro就以这个值作为数据源是否发生改变的依据。如果SQLServer执行这条UPDATE语句时找不到CustomerID=ALFKI的记录(我们认为是其它用户先期修改了CustomerID)SQLServer告诉VisualFoxPro更新冲突发生了。2.使用“关键字和可更新字段”冲突检测方式,发送更新时,VisualFoxPro自动生成以下语句在SQLServer中执行:sp_executesqlNUPDATEdbo.CustomersSETPhone=P1WHERECustomerID=P2ANDCompanyName=P3ANDPhone=P4,NP1nvarchar(24),P2varchar(50),P3nvarchar(40),P4nvarchar(24),N123456,ALFKI,NAlfredsFutterkiste,见,UPDATE的WHERE子句包括关键字段:CustomerID,和所有可更新字段:CompanyName、Phone。VisualFoxPro缓冲中CustomerID=ALFKI、CompanyName=AlfredsFutterkiste、Phone如果SQLServer执行这条UPDATE语句时找不到(CustomerID=ALFKIANDCompanyName=AlfredsFutterkisteANDPhone的记录(我们认为是其它用户先期修改了这三者中的任何一个多几个的值)SQLServer告诉VisualFoxPro更新冲突发生了。3.使用“关键字和已更新字段”冲突检测方式,发送更新时,VisualFoxPro自动生成以下语句在SQLServer中执行:sp_executesqlNUPDATEdbo.CustomersSETPhone=P1WHERECustomerID=P2ANDPhone=P3,NP1nvarchar(24),P2varchar(50),P3nvarchar(24),N123456,ALFKI,见,UPDATE的WHERE子句包括关键字段:CustomerID,和所有以经被VisualFoxPro更新的字段:Phone。VisualFoxPro缓冲中CustomerID=ALFKI、Phone如果SQLServer执行这条UPDATE语句时找不到(CustomerID=ALFKIANDPhone的记录(我们认为是其它用户先期修改了这两者中的任何一个多几个的值)SQLServer告诉VisualFoxPro更新冲突发生了。4.如果希望尝试“关键字和时间戳”冲突检测方式,请在SQLServer与VisualFoxPro的远程视图中加入TimeStamp字段。发送更新时,VisualFoxPro自动生成以下语句在SQLServer中执行:UPDATEdbo.CustomersSETPhone=N12345WHERECustomerID=ALFKIANDtimestamp=0x0000000000000199可见,UPDATE的WHERE子句包括关键字段:CustomerID,和时间戳字段。VisualFoxPro缓冲中CustomerID=ALFKI、时间戳是:0x0000000000000199,如果SQLServer执行这条UPDATE语句时找不到(CustomerID=ALFKIANDtimestamp=0x0000000000000199)的记录(我们认为是其它用户先期修改了数据源表中该行的数据,只要有任何变化,时间戳就会自动更改)SQLServer告诉VisualFoxPro更新冲突发生了。如果您还没有理解更新冲突这很正常,请往下看。缓冲(Buffering)VisualFoxPro中的缓冲技术当远端数据下载到客户端时,这些数据就被压入缓冲之中。在客户端用户对数据的各种移动并不反映到数据源,而是在用户确认对数据的变动后,才把各种变动以SQL描述的形式发送到后端。那么为什么不让VisualFoxPro直接一步一动的操控远程数据,就像在不使用缓冲技术控制VisualFoxPro本地数据那样。我想原因在于:在Client/Server构架的应用中,数据库服务器需要同时处理许多客户的请求,如果有一个客户“直接”控制(锁定)它,多用户的系统就无从谈起了。VisualFoxPro通过ODBC与远端数据库通讯,如果一步一动,两者之间的通讯肯定会成倍增加,这样既加重了网络负担又加重的数据库服务器的负担。基于上述原因,VisualFoxPro在远程数据处理时强制使用缓冲技术。我们知道,在VisualFoxPro中缓冲技术与锁结合有四种选择:保守式行缓冲。所谓“保守”,就是“编辑时锁定”的意思,“行缓冲”是指“只缓冲处理一笔使用者加以编辑的数据记录”。因此一旦使用这种模式,当编辑动作刚开始,数据源的对应数据记录便被锁定,而且在执行以下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论