手把手教你学vfp+sql2000的cs系统吧!

 

 

一、基本准备 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 ( 建立 ODBC 连接 ) 新建一程序,用来连接服务器,并将服务器上的数据下载到客户端 。(因为用到的表比较小,可以整个下载下来,如果表比较大,最好是有选择地下载需要用到的记录)
程序思路如下: 先定义一个连接串 nhandle ,并使用用户名密码连接相应的数据库,测试连接是否成功。如果成功,则下载表到本地临时表(好象是视图?弄不明白,先当它是表),命名为 gh ,如果不成功,则提示连接失败,并提示再次连接否。 连接成功并下载好表后,设置表与服务器表的相应更新。(此设置可以为另一种形式,等做好这种形式后可试试另一种)              

 

程序如下:   public nhandle  &&& 定义连接串名   nhandle=sqlstringconnect("driver=sql server;server=192.168.9.10;uid=sa;pwd=aa;database=cj")  &&& 我的连接类型是  SQL SERVER ,服务器是 192.168.9.10 ,用户名是 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.column1.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值