手把手教你学vfp+sql的cs系统.docx

上传人:b****5 文档编号:26439746 上传时间:2023-06-19 格式:DOCX 页数:12 大小:19.17KB
下载 相关 举报
手把手教你学vfp+sql的cs系统.docx_第1页
第1页 / 共12页
手把手教你学vfp+sql的cs系统.docx_第2页
第2页 / 共12页
手把手教你学vfp+sql的cs系统.docx_第3页
第3页 / 共12页
手把手教你学vfp+sql的cs系统.docx_第4页
第4页 / 共12页
手把手教你学vfp+sql的cs系统.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

手把手教你学vfp+sql的cs系统.docx

《手把手教你学vfp+sql的cs系统.docx》由会员分享,可在线阅读,更多相关《手把手教你学vfp+sql的cs系统.docx(12页珍藏版)》请在冰豆网上搜索。

手把手教你学vfp+sql的cs系统.docx

手把手教你学vfp+sql的cs系统

手把手教你学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 &&&&删除临时表中的相应记录,注意不能在这使用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

mand2.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

五、用VFP创建SQL表

**********************************************

* Copyright (c) 2003,成都晓进软件工作室

* All rights reserved.

* 文件名称:

CreateSQLTable

* 摘    要:

创建后端SQL Server 用户数据表

* 当前版本:

1.0

********************************************** 

gcDSN='192.168.0.80'

gcUID='sa'

gcPWD=''

gcSQLDatabase='资料管理'

=SQLSETPROP(0,"DispLogin",3)

gnHandle =SQLSTRINGCONNECT("DSN=&gcDSN;UID=&gcUID;PWD=&gcPWD;DATABASE=&gcSQLDatabase")

IF NOT USED("cfg")

USE c:

\\资料管理\\tmp\\cfg.dbf

ENDIF

SELECT cfg

IF cfg.codetable=.t. && 代码表

SQLEXEC(gnHandle,"CREATE TABLE 代码表 (ID int not null IDENTITY (1,1) PRIMARY KEY)")

SQLEXEC(gnHandle,"ALTER TABLE 代码表 ADD 类型 char (10)  null")

SQLEXEC(gnHandle,"ALTER TABLE 代码表 ADD 代码 char (20) null")

SQLEXEC(gnHandle,"ALTER TABLE 代码表 ADD 名称 char (40) null")

ENDIF

IF cfg.colldata=.T. && 资料收集

SQLEXEC(gnHandle,"CREATE TABLE 资料收集 (ID int not null IDENTITY (1,1) PRIMARY KEY)")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 接收日期 datetime null") && 默认值:

系统日期

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 序号 Int null")   && 自动

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 接收人 char (8) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 送交人 char (8)  null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文件号 char (30) null") && 原为“文件编号”

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 标准代号 char (30) null")     && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 标准名称 varchar (200) null") && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 译名 varchar (200) null")     && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 实施日期 smalldate null")     && 新增 标准的“实施日期”

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 编制单位 varchar (60) null")  && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文件编制 varchar (100) null")      && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文种 char (10) null")        && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 机构代号 varchar (30) null")  && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 标准年份 int null")     && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 内部编号 char (30) null") && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文件编码 char (30) null")   && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文件名 char (200) null")    && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文件状态 char (6) null")   && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 载体 char (6) null")    && 新增

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 工程代号 char (30) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 工程名称 varchar (80) null") &&

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 原文号 text null")  &&

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 总帐号 Int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 设计阶段 char (20) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 版次 char 

(2) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 题目 varchar (200) null") &&

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 关键词 char (30) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 密级 char (4) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档份数 Int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 页数 Int null") && 原为每册页数

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 底图张数 Int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 保管期限 char (4) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 责任者 varchar (80) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 形成时间 char (22) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 入库时间 smalldatetime null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 手稿 Int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 获奖等级 char (4) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 备注 text null")  &&原为 char(60)

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 资料库别 char (10) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 电子文件名 char (20) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 全息浏览级别 char (8) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 校对 char (20) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 审查 char (14) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 审定 char (14) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档单位 varchar (100) null") &&

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 修改 char 

(1) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 借阅标识 char (20) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 文件剩余份数 Smallint 

(2) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档标志 int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档申请人 char (8) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档申请时间 smalldatetime null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档接收人 char (8) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 归档接收时间 smalldatetime null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 入库标志 char 

(1) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 入库申请人 char (8) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 入库申请时间 smalldatetime null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 入库接收人 char (8) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 入库接收时间 smalldatetime null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 专业系统 char (44) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 底图张数 Int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 分册数 Int null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 批准人 char (8) null")

* 增加的字段 

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 资料类型 char (20) null")

SQLEXEC(gnHandle,"ALTER TABLE 资料收集 ADD 时间戳 timestamp)")

ENDIF

六、说明

1、为什么要用多条命令建立一个表呢?

这是因为创建后端SQL的表的命令是包含在SQLEXEC()函数中的,如果你要建立的表的字段数多,你的命令长度很容易超过255个字符的限制,另外,程序可读也很差。

 

2、为什么要建立ID字段呢?

这是因为ID字段是一个特殊整型字段,它作为关键字,用来解决更新冲突的。

它的值自动增1,便不会重复,例如,某行的ID=100,如果删除这行,便永远不会出现ID=100的值了。

3、为什么要建立“时间戳” 类型是 timestamp的字段,同样也是用来解决数据更新的,当一个表的字段较多时,如果增加这个字段,更新速度较快,因为SQL Server 只看这个字段的内容变没有,如果变了,说明你更改了数据。

反之没有更改。

这个两个字段都不需要你来管理和维护。

你只管在表中加入这两个字段就行了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

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

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