MYSQL编程:VFP与SQL远程异构数据库
DBaaS向客户提供了许多与其他云服务相类似的优势:一个灵活的、可扩展的MySQL学习教程、按需服务的平台,它以自助服务和便捷管理为导向,可以对环境中的资源进行调配。数据|数据库<P></P>熟习VFP的伴侣都晓得,在VFP里我们可使用远程视图(RemoteView)和SPT(SQLPassThrough)手艺把持远程异构数据库。这些手艺实际上是VFP对ODBC的API的封装,以是关于用户来讲会见远程数据库就像操纵传统的DBF一样复杂。关于这两种手艺的利用,完整能够味同嚼蜡地写下一本书,鉴于本文主题及篇幅,这里仅列举SPT手艺会见远程数据的使用。<P> 良多人以为有了远程视图如许直不雅、复杂的工具,为何还必要SPT呢?的确SPT较远程视图难以把握,但细细体味你会发明:远程视图实际上是对SPT的可视化工具!SPT较远程视图更具能力,远程视图供应的功效只是SPT的一个子集。其上风和优势次要表现在以下几个方面:l、SPT的上风
1)一次失掉多个Cursor;
2)实行除Select之外的其他SQL语句,如Insert、Update、Delete等;
3)实行远程数据库的存储历程;
4)实行远程数据库的特别函数、命令等;
5)事件办理。
2、SPT的优势
1)没有图形用户界面;
2)必需野生保护毗连;
3)失掉的Cursor默许是“可读写”Cursor,要使它成为“可更新”Cursor必需经由设置才行。
上面就顺着我们对SPT的熟悉,来扫瞄一下这个巨大的工具吧!(注重:本文一切例程均利用SQLServer的NorthWind数据库演示)。
办理毗连
l、创建毗连
注重:本文一切示例的代码若用到毗连的,默许接纳“创建毗连”代码中发生的毗连句柄“CON”。
WAIT毗连到SQLServer上往NOWAITNOCLEARWINDOW
SQLSETPROP(0,"DispLogin",3)&&&&设置情况为“从不显现ODBC登录对话框”。
CON=SQLSTRINGCONNECT("driver=SQLServer;Server=BOE;Uid=sa;pwd=;database=northwind")
*假定SQLServer服务器名为BOE,用户ID是sa,口令是空串
*假如你的SQLServer的服务器名,用户ID,口令与上分歧,请修正以上代码中的相干部分以切合你体系中的设置
WAITclear
IFcon<=0
MESSAGEBOX(毗连失利,64,毗连到SQLServer上往)
ELSE
MESSAGEBOX(毗连乐成,64,毗连到SQLServer上往)
ENDIF
2、断开毗连
SQLDISCONNECT(CON)
一次失掉多个Cursor
我们能够用一次SPT传回多个Cursor,以下:
cSQL="SELECT*FROMEMPLOYEES"+CHR(10)+"SELECT*FROMCUSTOMERS"+CHR(10)+"SELECT*FROMPRODUCTS"
?SQLEXEC(con,cSQL,"TEMP")
SQLEXEC()的前往值暗示Cursor的数目,这里前往3。这三个Cursor分离以TEMP、TEMP1和TEMP2定名。
实行其他SQL语句
上面我们实验实行SQLServer之外的SQL语句:
cSQL="IFEXISTS(SELECT*FROMCUSTOMERSswheresCUSTOMERID=TEST)"
cSQL=cSQL+"DELETEFROMCUSTOMERSswheresCUSTOMERID=TEST"cSQL=cSQL+"ELSEINSERTCUSTOMERS(CUSTOMERID,COMPANYNAME)VALUES(TEST,这是一个测试!)"
IFSQLEXEC(CON,cSQL)<=0
MESSAGEBOX(实行失利,64,发送语句到SQLServer上往)
ELSE
MESSAGEBOX(实行乐成,64,发送语句到SQLServer上往)
ENDIF
行文至此,大概有伴侣会问:假如SQL语句中CUSTOMERID是一个变量怎样办呢?实在我们能够经由过程两个经常使用的办理计划来办理:
1、拼接字符串
CUSTID=TEST
cSQL="IFEXISTS(SELECT*FROMCUSTOMERSswheresCUSTOMERID="+CUSTID+")"
cSQL=cSQL+"DELETEFROMCUSTOMERSswheresCUSTOMERID="+CUSTID+""
cSQL=cSQL+"ELSEINSERTCUSTOMERS(CUSTOMERID,COMPANYNAME)VALUES("+CUSTID+",这是一个测试!)"
?SQLEXEC(CON,cSQL)
2、SPT尺度变量传送法
CUSTID=TEST
cSQL="IFEXISTS(SELECT*FROMCUSTOMERSswheresCUSTOMERID=?CUSTID)"
cSQL=cSQL+"DELETEFROMCUSTOMERSswheresCUSTOMERID=?CUSTID"
cSQL=cSQL+"ELSEINSERTCUSTOMERS(CUSTOMERID,COMPANYNAME)VALUES(?CUSTID,这是一个测试!)"
?SQLEXEC(CON,cSQL)
特别函数和命令
假如在SQLServer中你有充足的权限,经由过程SPT利用远程数据库的特别函数和命令,你能够完整把持SQLServer,这里我们就演示“如何获得数据库服务器的工夫”:
?SQLEXEC(con,"selectgetdate()asserverdatetime","temp1")
?temp1.serverdatetime
USEIN("temp1")
事件办理
在一些庞大的使用中,常常会有一项操纵影响几个表的情形。就客户端来讲,发送到远程数据库的数据变化大概来历良多:表缓冲的多行纪录的变化,行缓冲的单行纪录变更,和前文我们演示的间接用SQL语句传送的数据保护,各式各样……如何把这些更新举动把持在一个事件中呢!要末一同乐成,要末一同回滚。
cSQL="DELETEFROMCUSTOMERSswheresCUSTOMERID=BLAUS"+CHR(10)
cSQL=cSQL+"INSERTCUSTOMERS(CUSTOMERID,COMPANYNAME)VALUES(TEST1,这是一个测试!)"
SQLSETPROP(CON,"Transactions",2)&&&&入手下手一个事件
IRETURN=SQLEXEC(CON,cSQL)
IFIRETURN=1
SQLCOMMIT(CON)&&&&事件托付
ELSE
SQLROLLBACK(CON)&&&&事件回滚
ENDIF
SQLSETPROP(CON,"Transactions",1)&&&&从头回到主动事件处置形态
&&&&就本例而言,“DELETEFROMCUSTOMERSswheresCUSTOMERID=BLAUS”老是不克不及实行的,SQLServer会前往堕落展现:
&&&&DELETEstatementconflictedwithCOLUMNREFERENCEconstraintFK_Orders_Customers.
&&&&TheconflictoccurredindatabaseNorthwind,tableOrders,columnCustomerID.
&&&&以是这笔事件老是被回滚的!!
从例程中能够看到,我们开启的事件实际上是针对“毗连”的,也就是说经由过程该“毗连”的一切数据更新都包括于事件中,直到事件被回滚或托付。
SQLSETPROP(CON,"Transactions",2),实际上是开启了野生事件处置,也就是说必需由用户明白地给出托付大概回滚指令,事件才会停止。以是笔者觉得:完成一笔事件今后,应实行SQLSETPROP(CON,"Transactions",1)将“毗连”的事件形式设为默许的“主动”,如许能够避免用户堕入未知的事件中往。
SPT的基础操纵还不止这些,今后我们还会为读者伴侣先容其他一些基础操纵。假如伴侣们能把握这些基础操纵,就可以编写不错的C/S程序了。固然本文是用SQLServer作为远程数据库,可是假如你利用DB2和Oracle等,在VFP中也能够举行一样的处置。
本文入手下手已提到VFP在这方面的内容很普遍,寥寥千言固然不克不及尽言,有乐趣的伴侣能够往会见www.boeworks.com,以便查阅更多的内容。OK,但愿无机会与人人一同会商这方面的成绩。
你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); 一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
页:
[1]