首页 vf调用网络数据库

vf调用网络数据库

举报
开通vip

vf调用网络数据库*----------------------------------------------------------------------------------- * [级别] 通用代码 * [方法] ConnectMDF * [功能] 创建MDF数据库连接 * [入口] * lcDatabase - MDF数据库名称(必选)(例"UFDATA_2003") * lcServer - 运行SQL Server实例的服务器名(默认为本机机器名, 推荐必须指定) * lcUID - 登录用户名(默...

vf调用网络数据库
*----------------------------------------------------------------------------------- * [级别] 通用代码 * [方法] ConnectMDF * [功能] 创建MDF数据库连接 * [入口] * lcDatabase - MDF数据库名称(必选)(例"UFDATA_2003") * lcServer - 运行SQL Server实例的服务器名(默认为本机机器名, 推荐必须指定) * lcUID - 登录用户名(默认为"sa") * lcPWD - 密码(如果已指定用户密码, 则必选) * [返回] 正数 - 数据文件连接成功, 且为连接句柄 * 非正数- 数据文件连接不成功 * [作者] Foxer12345 *----------------------------------------------------------------------------------- #DEFINE MDF_DRIVER '{SQL Server}' #DEFINE MDF_NETWORK 'DBMSSOCN' #DEFINE SEMICOLON ';' LPARAMETERS lcDatabase, lcServer, lcUID, lcPWD LOCAL lcStr, lnRetuvar, lcComputerName lcComputerName = ALLTRIM(LEFT(SYS(0), AT('#', SYS(0)) - 1)) lcStr = 'Driver=' + MDF_DRIVER + SEMICOLON +; 'Server=' + IIF(EMPTY(lcServer), lcComputerName, lcServer) + SEMICOLON +; 'UID=' + IIF(EMPTY(lcUID), 'sa', lcUID) + SEMICOLON +; 'PWD=' + IIF(EMPTY(lcPWD), '', lcPWD) + SEMICOLON +; 'APP=Microsoft Visual FoxPro' + SEMICOLON +; 'WSID=' + lcComputerName + SEMICOLON +; 'DATABASE=' + lcDatabase + SEMICOLON lnRetuVar = SQLSTRINGCONNECT(lcStr) RETURN lnRetuVar #UNDEFINE MDF_DRIVER #UNDEFINE MDF_NETWORK #UNDEFINE SEMICOLON 一、基本准备 1、安装SQL个人版+SP4; 2、安装VFP9+SP1+汉化。(看自己中意汉化否) 3、会做一点单机版的项目。 二、准备实施 1、启动SQL企业管理器,选择当前服务器,新建一数据库,命名 cj,在该库下建一表,字段为 字段名类型宽度 编号 C 6 姓名 C 8 职务 C 10 股室 C 10 电话 C 11 将编号设为主键,保存,命名为人员表; 2、建一ODBC,指向人员表。 (ODBC所在位置:开始-设置-控制面板-管理工具-数据源ODBC) 添加。 选择SQL,完成。 输入想要的名称、描述,服务器要选对,下一步 输入用户ID和密码,下一下。 更改数据库,下一步。 完成。 测试一下数据源。 至此,准备工作已完成。 三、实施过程 1、新建一项目,名自己定。 2、新建一程序,用来连接服务器,并将服务器上的数据下载到客户端。(因为用到的表比较小,可以整个下载下来,如果表比较大,最好是有选择地下载需要用到的记录) 程序思路如下: 先定义一个连接串nhandle,并使用用户名密码连接相应的数据库,测试连接是否成功。如果成功,则下载表到本地临时表(好象是视图?弄不明白,先当它是表),命名为gh,如果不成功,则提示连接失败,并提示再次连接否。 连接成功并下载好表后,设置表与服务器表的相应更新。(此设置可以为另一种形式,等做好这种形式后可试试另一种) 程序如下: public nhandle &&&定义连接串名 nhandle=sqlstringconnect("driver=sql server;server=cjc1010;uid=sa;pwd=aa;database=cj") && &我的连接类型是 SQL SERVER,服务器是cjc1010,用户名是sa,密码是aa,数据库是cj if nhandle>0 MESSAGEBOX('连接成功!!!') sqlexec(nhandle,"select 编号,姓名,职务,股室,电话 from 人员表 order by 编号","gh") &&将服务器中的‘人员表’表中的数据读到 gh 表中 sele gh cursorsetprop("tables","人员表","gh") &&设置临时表的更新目标表 cursorsetprop("keyfieldlist",'编号',"gh") &&设置临时表的关键字 cursorsetprop("updatablefieldlist","编号,姓名,职务,股室,电话","gh")&&设置临时表的更新字段 cursorsetprop("updatenamelist","编号人员表.编号,姓名人员表.姓名,职务人员表.职务,股室人员表.股室,电话人员表.电话","gh") &&&用gh中的相应字段更新人员表 cursorsetprop("sendupdates",.t.,"gh")&&设置为可更新 cursorsetprop("wheretype",2) cursorsetprop("buffering",5)&&设置表缓冲 * do form 表单1 else if messagebox("数据库连接失败,是否继续连接?",48+4,"连接失败提示")=6 &&回答"是" return else quit endif endif 3、建一表单,用来操作下载到本地的临时表gh并更新服务器表。 A、在表单中放一表格grid1 B、在表单的init里写上 SELECT gh thisform.grid1.RecordSource='gh' &&&将表格的数据源设置为表gh **********如果想表格好看点,最好能定义一下表格各列的宽度 *thisform.grid1.colunm1.width=40 C、在表单中放新增,删除,保存到服务器,清空服务器数据四个按钮 新增按钮:反正是临时表,直接在表格里新增,以图快。你可以用文本框,这样可以控制是否有重复记录,输入是否符合要求等。至于如何才能达到你的要求,就看你自己的了。 新增按钮的click 过程代码: SELECT gh APPEND BLANK thisform.grid1.SetFocus 删除按钮:在C/S里,删除只能打上删除号,不能pack,否则,死得很难看的。Pack要写在表单的退出中。因为不能使用pack,就用了set filter to !dele().这个东东在临时表中好象要移动一下记录指针才生效的。 删除按钮click代码: sele gh bh=alltrim(编号) xm=alltrim(姓名) set filter to !dele() if messagebox(bh+xm+"的数据删除,将不能恢复,真的要删除吗?",48+4,"信息提示")=6 &&回答"是" sqlexec(nhandle,"delete from 人员表 where 编号=?bh")&&&删除服务器上相应的记录 DELETE &&&&删除临时表中的相应记录,注意不能在这使用pack ENDIF **************以下是移动指针 if delete() if !eof() skip else if recn()>1 skip -1 endif endif endif thisform.grid1.setfocus 保存按钮:因为临时表直接绑到了表格中,在录入时就保存了,这里主要是指将临时表中的数据更新到服务器的表中,代码很简单。 保存按钮的click代码: select gh TABLEUPDATE(.t.) 清空服务器相应数据表按钮:相当于本地表的zap Click代码如下: select gh if messagebox("你正在执行的操作是清空服务器的数据,真的要清空吗?",48+4,"信息提示")=6 &&回答"是" sqlexec(nhandle,"truncate table 人员表") &&清空服务器数据表 ENDIF 至此,已基本完工。在程序中加上一句 Do form 表单 运行程序试一试?应该早就试了,我至此已运行很多次试了的。 4、完善一些功能。 A、表格的afterrowcolchange:我是不想每增加一个记录都去按一次新增按钮,于是就采用allowaddnew。SELECT gh thisform.command2.Caption='删除 '+ALLTRIM(编号)+ALLTRIM(姓名) IF !EMPTY(ALLTRIM(编号)) thisform.grid1.allowaddnew= .T. ELSE thisform.grid1.allowaddnew=.f. ENDIF B、表单的init:为了让刚才的allowaddnew生效,我先判断gh是否有记录,如果没有就先加个空记录。然后定义一下表格各列的宽度。 SELECT gh if recc()=0 appe blan endif with thisform.grid1 .recordsource='gh' .columncount=5 .column1.controlsource='gh.编号' .column1.width=30 .column2.controlsource='gh.姓名' .column2.width=60 .column3.controlsource='gh.职务' .column3.width=60 .column4.controlsource='gh.股室' .column4.width=60 .column5.controlsource='gh.电话' .column5.width=90 ENDWITH 1 我要推荐 关于删除记录后通过移动记录指针的办法使表格控件中被作删除标志的记录隐去,有没有使过用: thisform.grid1.setfocus 因为,我用单机版时不使用按钮,而直接在表格控件的左侧窄框里做删除标志,然后手工移动记录使被删记录隐藏. 好帖,先顶一下! 我也在用VFP+SQL Server 做应用程序,但有一个问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 始终没找到 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 ! 就是如何共享的问题在VFP下当你占用某条记录的时候,可以用Rlock()函数把该记录锁定,不让别人修改,但在SQL Server下, 好象没找到类似锁定的函数哦。兄弟们共同探讨,看有什么高招!!!5楼除了.dbf 之外得数据库,好像没有Rlock(),你只能对集合进行操作,在集合中好像有一个游标,类似Rlock(),但却不是Rlock()。 不知道乌鸦的理解是否错误,因为乌鸦没有操作过sql数据库。 Visual FoxPro数据库函数 ADATABASES() 将所有打开数据库的名称和路径放到内存变量数组中ADBOBJECTS() 把当前数据库中的命名连接名、关系名、表名或sQL视图名放到一个内存变量数组中 AFIELDS() 把当前表的结构信息存放在一个数组中,并且返回表的字段数 ALIAS() 返回当前表或指定工作区衰的别名 ASESSIONS() 创建一个已存在的数据工作期ID数组 ATAGINFO() 创建一个包含索引和键表达式的名字、数量和类型信息的数组 AUSED() 将一个数据工作期中的表别名和工作区存入内存变量数组 BOF() 确定当前记录指针是否在表头 CANDIDATE() 判断索引是否为候选索引 CDX() 根据指定的索引位置编号,返回打开的复合索引(.CDX)文件名称 CPDBP() 返回一个打开表所使用的代码页 CREATEOFFLINE() 由已存在的视图创建一个游离视图 *CURSORGETPROP() 返回VisualFoxPro表或临时表的当前属性设置 *CURSORSETPROP() 指定VisualFoxPro表或临时表的属性设置 CURSORTOXML() 转换VisualFoxPro临时表为XML文本 CURVAL() 从磁盘上的表或远程数据源中直接返回字段值 DBC() 返回当前数据库的名称和路径 DBF() 返回指定工作区中打开的表名,或根据表别名返回表名 *DBSETPROP() 给当前数据库或当前数据库中的字段、命名连接、表或视图设置一个属性 DELETED() 返回一个表明当前记录是否标有删除标记的逻辑值 *DESCENDING() 是否用DESCENDING关键字创建了一个索引标识 *DROPOFFLINE() 放弃对游离视图的所有修改,并把游离视图放回到数据库中 EOF() 确定记录指针位置是否超出当前表或指定表中的最后一个记录 FCOUNT() 返回衰中的字段数目 FIELD() 根据编号返回表中的字段名 FILTER() 返回SETFILTER命令中指定的表筛选表达式 FLDLIST() 对于SETmELDS命令指定的字段列表,返回其中的字段和计算结果字段表 达式 FLOCK() 尝试锁定当前表或指定表 FOR() 返回一个己打开的单项索引文件或索引标识的索引筛选表达式 *FOUND() 如果CONTINUE、FIND、LOCATE或SEEK命令执行成功,函数的返回值为"真" FSIZE() 以字节为单位,返回指定字段或文件的大小 *GETFLDSTATE() 返回一个数值,标明表或临时表中的字段是否已被编辑,或是否有追加的记录,或者记录的删除状态是否已更改 *GETNEXTMODIFIED() 返回一个记录号,对应于缓冲表或临时表中下一个被修改的记录 HEADER() 返回当前或指定表文件的表头所占的字节数 IDXCOLLATE() 返回索引或索引标识的排序序列 INDBC() 如果指定的数据库对象在当前数据库中,则返回"真"(.T.) INDEXSEEK() 在一个索引表中搜索第一次出现的某个记录 ISEXCLUSIVE() 判断一个表或数据库是以独占方式打开的 ISFLOCKED() 返回表的锁定状态 ISREADONLY() 判断是否以只读方式打开表 ISRLOCKED() 返回记录的锁定状态 KEY() 返回索引标识或索引文件的索引关键字表达式 KEYMATCH() 在索引标识或索引文件中搜索一个索引关键字 LOOKUP() 在表中搜索字段值与指定表达式匹配的第一个记录 LUPDATE() 返回一个表最近一次更新的日期 MDX() 根据指定的索引编号返回打开的.CDX复合索引文件名 MEMLINES() 返回备注字段中的行数 MLINE() 以字符串形式返回备注字段中的指定行 NDX() 返回为当前表或指定表打开的某一索引(JDX)文件的名称 ORDER() 返回当前表或指定表的主控索引文件或标识 PRIMARY() 检查索引标识,如果为主索引标识,就返回"真"(.T.) RECCOUNT() 返回当前或指定表中的记录数目 RECNO() 返回当前表或指定表中的当前记录号 RECSIZE() 返回表中记录的大小(宽度) *REFRESH() 在可更新的SQL视图中刷新数据 RELATION() 返回为给定工作区中打开的表所指定的关系表达式 SEEK() 在一个已建立索引的表中搜索一个记录的第一次出现位置 *SELECT() 返回当前工作区编号或未使用工作区的最大编号 *SETFLDSTATE() 为表或临时表中的字段或记录指定字段状态值或删除状态值*SQLCANCEL() 请求取消一条正在执行的SQL语句 *SQLCOLUMNS() 把指定数据源表的列名和关于每列的信息存储到一个VisualFoxPro临时表中 *SQLCOMMIT() 提交一个事务 *SQLCONNECT() 建立一个指向数据源的连接 *SQLDISCONNECT() 终止与数据源的连接 *SQLEXEC() 将一条SQL语句送入数据源中处理 *SQLGETPROP() 返回一个活动连接的当前设置或默认设置 *SQLMORERESULTS() 如果存在多个结果集合,则将另一个结果集合复制到VisualFoxPro临时表中 *SQLPREPARE() 在使用SQLEXEC()执行远程数据操作前,可使用本函数使远程数据为将要执行的命令做好准备 *SQLROLLBACK() 取消当前事务处理期间所做的任何更改 *SQLSETPROP() 指定一个活动连接的设置 *SQLSTRINGCONNECT() 使用一个连接字符串建立和数据源的连接 *SQLTABLES() 把数据源中的表名存储到VisualFoxPro临时表中 SYS(14) 索引表达式 SYS(21) 控制索引编号 SYS(22) 控制标识名或索引名 SYS(2011) 返回当前工作区中记录锁定或表锁定的状态 SYS(2012) 返回表的备注字段块大小 SYS(2021) 筛选索引表达式 SYS(2029) 返回与表类型对应的值 SYS(3054) Rushmore优化等级· *TAG() 返回打开的.CDX多项复合索引文件的标识名,或者返回打开的.IDX单项索引文件的文件名 *TAGCOUNT() 返回复合索引文件(.CDX)标识以及打开的单项索引文件(.IDX)的数目 *TAGNO() 返回复合索引文件(.CDX)标识以及打开的单项索引(.IDX)文件的索引位置 *TARGET() 返回一个表的别名,该表是SETRELATION命令的INTO子句所指定关系的目标 *UNIQUE() 用于测试索引是否以惟一性方式建立 *UPDATED() 用于测试在最近的READ命令中,数据是否已被修改 USED() 确定是否在指定工作区中打开了一个表 XMLTOCURSOR() 转换XML文本到VisualFoxPro游标或表
本文档为【vf调用网络数据库】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_421808
暂无简介~
格式:doc
大小:37KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-18
浏览量:15