手把手教你学
vfp+sql2000 的 c/s 系统 一、基本准备 1、安装 SQL 个人版+SP4; 2、安装 VFP9+SP1+汉化。(看自己中意汉化否) 3、会做一点单机版的项目。 二、准备实施 1、启动 SQL 企业管理器,选择当前服务器,新建一数据库,命名 cj,在该库下建 一表,字段为 字段名 类型 宽度 编号 C 6 C 8 职务 C 10 股室 C 10 电话 C 11 将编号设为主键,保存,命名为 人员表; 三、实施过程 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 &;&;