vfp远程视图与spt应用详解.doc
《vfp远程视图与spt应用详解.doc》由会员分享,可在线阅读,更多相关《vfp远程视图与spt应用详解.doc(70页珍藏版)》请在咨信网上搜索。
1、vfp远程视图与spt应用详解-远程视图(Remote Views)与SPT(SQL pass through)是vfp为开发Client/Server程序提供的两个内置的解决方案,如果您更深入的应用vfp,这两部分的内容是必须掌握的。由于内容比较多,文章分成若干篇几次发完。但个人认为,远程视图与spt又是不可分割的整体,虽然spt应用得比较多,但若对远程视图没有比较深入的了解,我想你也不见得能用好spt。因此做了这个目录,希望您能从远程视图开始,逐步了解这两个伟大的开发工具的使用。一、SPT详解1二、用vfp与sql server构建Client/Server应用程序(SPT)(1)7三、用
2、vfp与sql server构建Client/Server应用程序(SPT)(2)22四、用vfp与sql server构建Client/Server应用程序(远程视图)(1)25五、用vfp与sql server构建Client/Server应用程序(远程视图)(2)30六、用vfp与sql server构建Client/Server应用程序(远程视图)(3)34七、用vfp与sql server构建Client/Server应用程序(远程视图)(4)39八、用vfp与sql server构建Client/Server应用程序(远程视图)(5)48foxpro for graph对象全接触(
3、1)52foxpro for graph对象全接触(2)55用vfp动态生成数据网页(一)60用vfp动态生成数据网页(二)64一、SPT详解 -说在前面熟悉 Fox 的朋友都知道,在 VFP 里我们可以使用远程视图 (Remote View) 和 SPT(SQL Pass Through) 技术控制远程异构数据库。这些技术其实是 VFP 对 ODBC 的 API 的封装,所以对于用户来说访问远程数据库就像操作传统的DBF一样简单。关于这两种技术的使用,完全可以洋洋洒洒地写下一本书,鉴于本文主题及篇幅,这里仅枚举 SPT 技术访问远程数据的应用。SPT与远程视图很多人搞不懂有了远程视图这样直观
4、、简单的工具,为什么还需要 SPT 呢?确实 SPT 较远程视图难以掌握,但细细体会你会发现:远程视图其实是对 SPT 的可视化工具!SPT 较远程视图更具威力,远程视图提供的功能只是 SPT 的一个子集。仔细探索两者优劣,我们发现:SPT 的优势:1. 一次得到多个Cursor2. 执行除 Select 以外的其他 SQL 语句,如 Insert、Update、Delete等3. 执行远程数据库的存储过程 4. 执行远程数据库的特殊函数、命令 5. 事务管理SPT 的劣势:1. 没有图形用户界面 2. 必须人工维护连接3. 得到的Cursor默认是可读写Cursor,要使它成为可更新Curs
5、or必须经过设定下面就顺着我们对 SPT 的认识,来浏览一下这种伟大的工具吧!(注意:本文所有例程均使用 SQL Server的NorthWind 数据库演示)管理连接:建立连接:(注意:本文所有示例代码若用到连接的,默认采用建立连接代码中产生的连接句柄con)WAIT 连接到 SQL Server 上去 NOWAIT NOCLEAR WINDOW SQLSETPROP(0,DispLogin ,3) & 设置环境为:从不显示 ODBC 登陆对话框 con=SQLSTRINGCONNECT(driver=SQL Server;Server=BOE;Uid=sa;pwd=;database=no
6、rthwind) *假定 SQL Server 服务器名为 BOE, 用户 ID 是sa, 口令是空串*如果你的 SQL Server 的服务器名, 用户 ID, 口令与上不同,请修改以上代码中的相关部分以符合你系统中的设置WAIT clear IF con=0 MESSAGEBOX( 连接失败 ,64, 连接到 SQL Server 上去 ) ELSE MESSAGEBOX( 连接成功 ,64, 连接到 SQL Server 上去 ) ENDIF断开连接: SQLDISCONNECT(con) 一次得到多个Cursor我们可以用一次 SPT 传回多个Cursor,如下: cSQL=SELEC
7、T * FROM EMPLOYEES+CHR(10)+SELECT * FROM CUSTOMERS+CHR(10)+SELECT * FROM PRODUCTS ?SQLEXEC(con,cSQL,TEMP) SQLEXEC( ) 的返回值表示Cursor的数量,这里返回 3 。这三个Cursor分别以: TEMP,TEMP1,TEMP2 命名。执行除 SQL-Select 以外的 SQL 语句 cSQL=IF EXISTS(SELECT * FROM CUSTOMERS WHERE CUSTOMERID=TEST) cSQL=cSQL+ DELETE FROM CUSTOMERS WHER
8、E CUSTOMERID=TEST cSQL=cSQL+ ELSE INSERT CUSTOMERS(CUSTOMERID,COMPANYNAME) VALUES(TEST, 这是一个测试! ) IF SQLEXEC(CON,cSQL)0+chr(10) cSQL=cSQL+ SELECT Desc= 找到了 +CAST(ROW AS VARCHAR(4) + 位下属 +chr(10) cSQL=cSQL+ ELSE SELECT Desc= 这是一位普通员工 ?SQLEXEC(con,cSQL) 使用 T-SQL 的写法: EMPID=2 DESCRIPTION= ?SQLEXEC(CON,
9、EXEC MY_PROC ?EMPID,?DESCRIPTION,TEMP1) ?DESCRIPTION 使用 ODBC 的写法: EMPID=2 DESCRIPTION= ?SQLEXEC(CON,CALL MY_PROC(?EMPID,?DESCRIPTION),TEMP2) ?DESCRIPTION 执行远程数据库的特殊函数、命令如果在 SQL Server 中你有足够的权限,通过 SPT 你可以完全控制 SQL Server ,这里我们演示怎样取得数据库服务器的时间:?SQLEXEC(con,select getdate() as serverdatetime,temp1) ?temp
10、1.serverdatetime USE IN (temp1) 事务管理 在一些复杂的应用中,往往会有一项操作影响好几个表的情况。就客户端来说,发送到远程数据库的数据变动可能来源很多:表缓冲的多行记录的变动,行缓冲的单行记录变化,以及前文我们演示的直接用 SQL 语句传递的数据维护,林林总总怎样把这些更新行为控制在一个事务中要么-一起成功,要么一起回滚。cSQL=DELETE FROM CUSTOMERS WHERE CUSTOMERID=BLAUS+CHR(10) cSQL=cSQL+INSERT CUSTOMERS(CUSTOMERID,COMPANYNAME) VALUES(TEST1,
11、 这是一个测试! ) SQLSETPROP(CON,Transactions ,2)& 开始一个事务 IRETURN=SQLEXEC(CON,cSQL) IF IRETURN=1 SQLCOMMIT(CON)& 事务交付 ELSE SQLROLLBACK(CON)& 事务回滚 ENDIF SQLSETPROP(CON,Transactions ,1)& 重新回到自动事务处理状态 &就本例而言,DELETE FROM CUSTOMERS WHERE CUSTOMERID=BLAUS总是不能执行的,SQL Server会返回错误:&DELETE statement conflicted with
12、COLUMN REFERENCE constraint FK_Orders_Customers. &The conflict occurred in database Northwind, table Orders, column CustomerID.&所以这笔事务总是被回滚的!从例程中我们看到,我们开启的事务其实是针对连接的,也就是说通过该连接的所有数据更新都包含于事务中,直到事务被回滚或交付。 SQLSETPROP(CON,Transactions ,2 ), 其实是开启了人工事务处理,也就是说必须由用户明确的给出交付或者回滚指令,事务才会结束。所以笔者以为:完成一笔事务以后,应执行 S
13、QLSETPROP(CON,Transactions ,1 ) 将连接的事务模式设为默认的自动,这样可以防止用户陷入未知的事务中去。 设为可更新到目前为止,我们已经演示了 6 个 SPT 专题了,除了第一个连接管理在远程视图中能够实现之外,其余的远程视图都无法实现。下面我们要讨论一下怎样把 SPT 传回的结果集合设为可更新,总的来说远程视图提供的就是这个功能。 在默认状况下, SPT 从远程数据库得到的Cursor是可读写的,即:可以对它进行 Select 、 Update 、 Insert 、 Delete 的操作,但数据的变化不会反映到数据源。可更新Cursor的特色就是可以直接将客户端的
14、数据变动,自动生成一系列 SQL 描述更新远程数据库。 实现可读写Cursor到可更新Cursor必须经历以下五步的设置: 1. CURSORSETPROP(TABLES, 数据源表名 , 可更新Cursor名 ) 此步骤设定的是数据源里(SQL Server)待更新的表名,如果涉及多个表就这样写: CURSORSETPROP(TABLES,T1,T2,MyCursor) 。2. CURSORSETPROP(KEYFIELDLIST, 关键字段 , 可更新Cursor名 )此步骤是设定关键字段的,这个关键字段是可更新Cursor的字段,而不是数据源里的字段。 3. CURSORSETPROP(
15、UPDATABLEFIELDLIST, 可更新字段列表 , 可更新Cursor名 ) 此步骤设定的是在可更新Cursor里哪些字段的变动要被反映到数据源,即哪些字段时可更新的。 4. CURSORSETPROP(UPDATENAMELIST, 前后段字段对应关系列表 , 可更新Cursor名 ) 此步骤设定数据源字段与可更新Cursor字段的对应关系。 5. CURSORSETPROP(SENDUPDATES,.T., 可更新Cursor名 ) 这个步骤是打开 SQL 发送开关,最关键的一步。 为便于大家理解,现将以上五步实例化:例一:SQLEXEC(con,select categoryid
16、 as id ,categoryname,description from categories,mycursor) SELECT mycursor CURSORSETPROP(Tables,categories,mycursor) CURSORSETPROP(KeyFieldList,id,mycursor) CURSORSETPROP(UpdatableFieldList ,id,categoryname,description,mycursor) CURSORSETPROP(UpdateNameList,id categories.categoryid,categoryname cate
17、gories.categoryname,+; description categories.description,mycursor) CURSORSETPROP(SendUpdates ,.t.,mycursor) 例二:SQLEXEC(con,select a.productid,a.productname,a.unitprice,b.categoryid,b.categoryname,c.supplierid,+; panyname as suppliername,c.contactname+; from (products a inner join categories b on a.
18、categoryid=b.categoryid)+; inner join suppliers c on a.supplierid=c.supplierid,mycursor) SELECT mycursor CURSORSETPROP(Tables,products,categories,suppliers,mycursor) CURSORSETPROP(KeyFieldList,productid,categoryid,supplierid,mycursor) CURSORSETPROP(UpdatableFieldList,+; productid,productname,unitpri
19、ce,categoryid,categoryname,supplierid,suppliername,contactname,mycursor) CURSORSETPROP(UpdateNameList,productid products.productid,productname +; products.productname,unitprice products.unitprice,+; categoryid categories.categoryid,categoryname categories.categoryname,+; supplierid suppliers.supplie
20、rid,suppliername panyname,contactname suppliers.contactname,mycursor) CURSORSETPROP(SendUpdates ,.t.,mycursor)行笔匆匆,终于把我认识的 SPT 基本操作写完了,掌握这些,已能编写不错的 C/S 程序。虽然,本文是用 SQL Server 作为远程数据库,但是如果你使用 DB2 、 Oracle ,在 VFP 中也是一样处理。本文来自编程入门网:二、用vfp与sql server构建Client/Server应用程序(SPT)(1) -一些题外话 最近有一种好的现象越来越多的Visual
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vfp 远程 视图 spt 应用 详解
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。