回 帖 发 新 帖 刷新版面

主题:手把手教你学vfp+sql2000的c/s系统吧!

一、基本准备
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

回复列表 (共67个回复)

61 楼


谢谢楼主!通过学习可做到新增,删除,保存到服务器,清空服务器数据几个功能。现请教:有一个VFP 的DBF表A,一个服务器上表B 字段都一样,如何将表 A 的记录添加到 表 B 中去?

62 楼

[quote]按照yangjie008朋友的方法,我已经成功完成了并编译成.EXE文件,但是在运行该文件时遇到些问题,请朋友给予指点:
一、我在运行时出现如下提示信息(因为我不会插入图片,只能按信息的内容手工输入)。“连接失败:
      SQLSTATE:'28000'
      SQL SERVER错误:18452
      [Microsoft][ODBC sql server Driver][sql server]用户'sa'登录失败.原因:未与信任sql server 连接相关联.
二、当我取消信息时在接下来弹出的对话框中我选择了"使用信任连接"复选框后就可以进入表单界面进行输入了.
三、如何实现在客户(远程)机上运行本程序?
四、客户机和装有SQL SERVER的本地机都在同一个网段上的局域网,我将编译成.EXE文件复制到客户机上运行该文件时也同样提示:
"连接失败:
      SQLSTATE:'28000'
      SQL SERVER错误:18452
      [Microsoft][ODBC sql server Driver][sql server]用户'sa'登录失败.原因:未与信任sql server 连接相关联."
五、我在客户机上安装已发布的.EXE文件时,安装到第三步时系统提示"如果您正处于进程当中,信息可能丢失......"等相关信息。安装进行不下去了,
恳请师傅们帮忙,谢谢!



[/quote]
你的SQL SERVER2000 采用的是WINDOWS 身份验证方式,进入企业管理器,点击服务器组,可以看到服务器名称,右击服务器名称,打开属性,点击“安全性”选项卡,选择sql server 和 windows,最后点击确认,重启服务器。确保你的ID和密码正确,即可链接。

63 楼

鼓掌

64 楼

学习了,谢谢分享1

65 楼

这种方法是临时表的方法.但一般用spt方法最接近于实际.
大家可以去看一下sql2000编程指南.再用上面提到的连接方法进行编程(纯数据库操作语言).那么在vfp中编出的程序基本上不用修改就可以转到其它语言了.

66 楼


很好的帖子  我没用过SQL 一直想用 这次可以试一试了

67 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

您尚未登录,请登录后再回复。点此登录或注册