ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:158.07KB ,
资源ID:27981646      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27981646.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在VFP上使用DM数据库.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

在VFP上使用DM数据库.docx

1、在VFP上使用DM数据库在VFP上使用DM数据库VFP是一种直接面向数据的快速开发工具,在信息系统中有着广泛的应用。由于VFP命令本身就是为操纵数据设计的语言,所以在操作数据方面显得非常高效和轻松。但是VFP缺点和它的优点一样明显,VFP本身安全性不高,且不支持其他远程的VFP数据库。所以现在越来越多的VFP开发者开始使用SPT接口,通过SPT接口,可以利用其他数据库的安全和性能优势,再结合VFP自身的操纵数据的优势,来快速进行C/S应用程序的开发。SPT是SQL Pass Through的简写,是VFP访问远程数据库的主要方法。在Visual FoxPro 中内置了13个 SPT函数。连接建

2、立函数:SqlConnect(),SqlStringConnect()连接的断开函数:SqlDisconnect()SQL语句传输及执行函数:SqlExec(),SqlPrapare()批次模式下更多数据集的取得函数:SqlMoreResults()异步模式下撤销正在执行的SPT的函数:SqlCancel()事务处理函数:SqlCommit(),SqlRollBack()连接通道属性函数:SqlGetProp(),SqlSetProp()数据源的信息截取函数:SqlTables(),SqlColumns()这些函数名是不是看上去很眼熟?如果你熟悉ODBC接口,那么我相信你花5分钟看完本文,你就

3、会用SPT开发VFP程序了。下面将用一个简单的实例来说明,如何在VFP通过SPT接口使用DM数据库1连接到DM数据库连接数据库有两种方式1)使用SqlConnect() 函数。使用这个函数,你需要首先在创建一个ODBC数据源。打开控制面板-管理工具,打开 可以看到如果你已经正确安装了DM数据库,那么点击添加按钮可以看到,DM 的ODBC驱动,选择该驱动点击完成按钮,可以看到DSN取名为VFP2DM,密码为默认SYSDBA。保证DM服务器运行的情况下,点击测试-测试数据源测试成功,那么OK,点击确定,这个DSN就建立成功了。下面要做的事情就很简单了。使用函数SQLCONNECT(VFP2DM,S

4、YSDBA,SYSDBA)就可以连接到DM数据库了 第一个参数是 DNS 名字,第二个参数是 用户名,第三个参数是 密码。2)使用SqlStringConnect()函数实际上,使用SQLCONNECT()函数,需要手动创建DSN,这是一件非常麻烦的事情,而且使用起来也不够灵活。所以SPT提供了另一个函数,SqlStringConnect(),使用它可以直接连接到DM数据库,省去了很多的麻烦。SqlStringConnect()函数的用法SQLSTRINGCONNECT(“Driver=DM ODBC Driver;SERVER=localhost;TCP_PORT=12345;DATABAS

5、E=SYSTEM;UID=SYSDBA;PWD=SYSDBA”)SqlStringConnect()函数,使用连接字符串参数直接连接到DM数据库。我们解释一下参数字符串的意义,driver指明了使用哪一个ODBC驱动程序,这里是DM ODBC Driver;Server是指DM Server的服务器名称,我们使用本地服务器就是localhost;TCP_PORTS是DM Server的监听端口,UID是在DM Server的用户名,这里使用默认的SYSDBA;PWD是用户密码,这里使用默认值SYSDBA;调用SqlConnect()或是SqlStringConnect()的返回值得如果是正整数

6、,就表示连接成功,得到的正整数很重要就是连接句柄!2访问数据库我们首先创建连接Local hdl_connhdl_conn = SQLSTRINGCONNECT(“Driver=DM ODBC Driver;SERVER=localhost;TCP_PORT=12345;DATABASE=SYSTEM;UID=SYSDBA;PWD=SYSDBA”)得到连接句柄hdl_conn1)使用SQLEXEC()函数函数原型SQLEXEC(nConnectionHandle, cSQLCommand, cCursorName)先来解释一下SQLEXEC()函数:参数nConnectionHandle表示连

7、接句柄;参数cSQLCommand表示要传送的语句,注意此语句一定是DM数据库定义的SQL语法,而不是Visual FoxPro的SQL语法。回想一下SQL Pass Though这个名字,顾名思义,Visual FoxPro只不过是是将别人的语言传送给别人,这一点现在完全体现在SQLEXEC()函数上。参数cCursorName表示得到的结果集的名字,如果省略,返回的结果集将以Sqlresult命名。如果返回1表示,执行成功;如果返回0表示正在执行;如果返回负数表示执行失败。这里最重要的就是cSQLCommand参数,它就是一个DM数据库可以识别的SQL字符串。正如你所想,你可以直接传送SQ

8、L字符串,或者你也可以用拼接字符串的方法,构造动态SQL语句,来使用DM数据库。例如:1SQLEXEC(hdl_conn,CREATE TABLE TBL_VFP_DM (C1 INTEGER,C2VARCHAR(10),C3 VARCHAR(50)2SQLEXEC(hdl_conn,INSERT INTO TBL_VFP_DM VALUES(1,ANDY,ANDY IS NO1)3Local id,name,info,sqlstrId=idName=”ROCK”Info=”ROCK is test”Sqlstr=”insert into TBL_VFP_DM VALUES(”+val(id)

9、+”,”+name+”,”+info+”)SQLEXEC(hdl_conn, Sqlstr) 4 SQLEXEC(hdl_conn,SELECT C1 AS ID,C2 AS NAME,C3 AS CONTENT FROM TBL_VFP_DM, mycursor)2)使用VFP的SQL访问DM数据库使用上述方法已经可以访问,并且使用DM数据库了,但是,这样的话并没有体现出VFP的强项-操纵数据,实际上,我们可以有更好的方法,来让VFP使用DM。再看一下SQLEXEC()函数原型SQLEXEC(nConnectionHandle, cSQLCommand, cCursorName)在cSQLC

10、ommand参数为SELECT语句的时候DM数据库会返回给用户一个结果集,我们可以使用函数的第三个参数 cCursorName,给这个结果集命名,它在VFP中被称为游标,其实就是相当于DM数据库的表映射为VFP里的一张虚拟表。有了它,我们就可以直接使用VFP的语法对这张虚拟表进行操作,就像操作VFP自己的表一样,而且以上进行的操作都会如实的反映到真实的DM数据库中。所以我们可以这样获得游标SQLEXEC(hdl_conn,SELECT C1 AS ID,C2 AS NAME,C3 AS CONTENT FROM TBL_VFP_DM, mycursor)这里为了更好的标明字段的意思,我们对C1

11、,C2,C3字段分别使用了别名ID,NAME,CONTENTVisual FoxPro的游标有三种:只读游标、可读写游标、可更新游标。1只读游标是那种不能被修改的游标。2可读写游标是那种可以进行读写操作,但游标上的数据变更不被反映到数据源。3可更新游标是那种可以进行读写操作,并且任何数据变动都会反映到数据源。也就是说,我们想要通过游标在VFP更新DM数据库中的表,需要的是一个可更新游标。很遗憾,上述通过SQLEXEC()函数直接取得的游标,是一个可读写游标,也就是说如果我们修改mycursor中的值,VFP不会将修改同时更新到DM上。这样可达不到我们使用DM的目的,所以在使用mycursor之

12、前,我们还需要将游标mycursor设置为可更新游标。VFP提供了设置游标属性的函数,使用方法如下:设置可更新游标共有5步A.CURSORSETPROP(TABLES,数据源表名,可更新光标名)此步骤设定的是数据源里(SQL Server)待更新的表名,如果涉及多个表就这样写:CURSORSETPROP(TABLES,T1,T2,MyCursor)。B.CURSORSETPROP(KEYFIELDLIST,关键字段,可更新光标名)此步骤是设定关键字段的,这个关键字段是这可更新光标的字段,而不是数据源里字段。C.CURSORSETPROP(UPDATABLEFIELDLIST,可更新字段列表,可

13、更新光标名)此步骤设定的是在可更新光标里哪些字段的变动要被反映到数据源,即哪些字段时可更新的。D.CURSORSETPROP(UPDATENAMELIST,前后段字段对应关系列表,可更新光标名)此步骤设定前后端字段的对应关系。E.CURSORSETPROP(SENDUPDATES,.T.,可更新光标名)按上述步骤,设置游标为可更新游标:CURSORSETPROP(Tables,TBL_VFP_DM,mycursor) CURSORSETPROP(KeyFieldList,ID,NAME,CONTENT,mycursor) CURSORSETPROP(UpdatableFieldList,ID,

14、NAME,CONTENT,mycursor) CURSORSETPROP(UpdateNameList,ID TBL_VFP_DM.C1,NAME TBL_VFP_DM.C2,CONTENT TBL_VFP_DM.C3,mycursor) CURSORSETPROP(SendUpdates ,.t.,mycursor)3断开与DM数据库的连接使用完数据库,需要端开连接释放资源。这时可使用SqlDisConnect()函数。这个函数的使用非常简单。SQLDISCONNECT(hdl_conn) &返回1表示连接断开成功如果想一下子断开所有的连接,您可以使用这样的方法:SQLDISCONNECT(

15、0)4一点说明利用上面所讲的方法,你已经可以在DM上完成绝大部分的工作了,还有其他一些SPT函数的使用,请参考VFP的帮助文档。上面的例子中为了简便和说明问题,并没有对函数的返回值做异常处理,如果你是在做应用程序开发,请一定要注意处理函数返回的错误。5一个实例一个使用SPT完成DM数据库增、删、改、查操作的实例。编程环境 VFP8.0DM数据库版本 5.61)用户界面2)代码1Connect 按钮PUBLIC ip &数据库服务器IPip = thisform.txt_ip.Value &从控件取得服务器IP*生成连接字符串conn_str = Driver=DM ODBC Driver;SE

16、RVER= + ip +;TCP_PORT=12345;DATABASE=SYSTEM;UID=SYSDBA;PWD=SYSDBA*设置连接属性为连接失败时不弹出ODBC连接对话框SQLSETPROP(0,DispLogin ,3)*使用连接字符串连接数据库hdl_conn = SQLSTRINGCONNECT(conn_str)*创建测试用表SQLEXEC(hdl_conn,DROP TABLE TBL_VFP_DM)SQLEXEC(hdl_conn,CREATE TABLE TBL_VFP_DM (C1 INTEGER,C2 VARCHAR(10),C3 VARCHAR(50)*添加测试数

17、据SQLEXEC(hdl_conn,INSERT INTO TBL_VFP_DM VALUES(1,ANDY,ANDY IS NO1)SQLEXEC(hdl_conn,INSERT INTO TBL_VFP_DM VALUES(2,KYO,KYO IS NO2)SQLEXEC(hdl_conn,INSERT INTO TBL_VFP_DM VALUES(3,RALPH,RALPH IS NO3)*生成SPT游标SQLEXEC(hdl_conn,SELECT C1 AS ID,C2 AS NAME,C3 AS CONTENT FROM TBL_VFP_DM, mycursor)SELECT my

18、cursor *设置SPT游标为可更新游标CURSORSETPROP(Tables,TBL_VFP_DM,mycursor) CURSORSETPROP(KeyFieldList,ID,NAME,CONTENT,mycursor) CURSORSETPROP(UpdatableFieldList ,ID,NAME,CONTENT,mycursor) CURSORSETPROP(UpdateNameList,ID TBL_VFP_DM.C1,NAME TBL_VFP_DM.C2,CONTENT TBL_VFP_DM.C3,mycursor) CURSORSETPROP(SendUpdates ,

19、.t.,mycursor) *显示游标内容SELECT mycursorBrowse2ADD按钮LOCAL sql_insertLOCAL id_addLOCAL name_addLOCAL cont_addid_add=VAL(TRIM(thisform.txt_id.Text)name_add=TRANSFORM(TRIM(thisform.txt_name.Text)cont_add=TRANSFORM(TRIM(thisform.txt_cont.Text)insert INTO mycursor (ID,NAME,CONTENT) VALUES(id_add, name_add, c

20、ont_add)browse3DEL按纽LOCAL id_del &取得文本框输入的IDLOCAL name_del &取得文本框输入的NAMELOCAL cont_del &取得文本框输入的CONTENTid_del=CEILING(VAL(TRIM(thisform.txt_id.Text)name_del=TRANSFORM(TRIM(thisform.txt_name.Text)cont_del=TRANSFORM(TRIM(thisform.txt_cont.Text)*设置删除有效SET DELETED ON*根据输入ID为条件进行删除DELETE FROM mycursor WH

21、ERE ID=id_del*显示删除结果Browse4UPDATE按纽LOCAL id_updLOCAL name_updLOCAL cont_updid_upd=CEILING(VAL(TRIM(thisform.txt_id.Text)name_upd=TRANSFORM(TRIM(thisform.txt_name.Text)cont_upd=TRANSFORM(TRIM(thisform.txt_cont.Text)*根据输入的参数更新表UPDATE mycursor SET NAME=name_upd,CONTENT=cont_upd WHERE id=id_updBrowse5SELECT按纽LOCAL id_slcLOCAL name_slcLOCAL cont_slcid_slc=VAL(TRIM(thisform.txt_id.Text)name_slc=TRANSFORM(TRIM(thisform.txt_name.Text)cont_slc=TRANSFORM(TRIM(thisform.txt_cont.Text)*以ID为条件对表做查询IF id_slc0 select * from mycursor WHERE ID = id_slcendifbrowse

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1