回 帖 发 新 帖 刷新版面

主题:VFP开发数据库软件中的几个小技巧

Visual FoxPro6.0开发数据库软件中的几个小技巧

利用Visual FoxPro6.0来进行小型数据库开发,是一种非常简便易行的方法。笔者前段时间完成了一个执照管理系统的开发工作,下面对开发过程中的几个技术要点进行一个总结。
一、ID编号的自动生成。一种办法是用数据表保存下一次的ID编号,新建数据时读取该编号,并对该编号进行加一操作,做为下一次的ID编号进行保存。本人采用程序生成的办法,来直接生成新的ID编号,程序代码如下:

LOCAL lnNew_ID
lnNew_ID = 0

SELECT Member
GO BOTTOM  && 读取最末位记录的ID编号加1做为新ID

lnNew_ID = person_id + 1
LOCATE FOR person_id = lnNew_ID
DO WHILE !EOF()  && 对新ID进行检测,若重复则加1后再检测
lnNew_ID = lnNew_ID + 1
GO TOP
CONTINUE
ENDDO

DODEFAULT()  && 执行默认的新建操作
REPLACE person_id WITH lnNew_ID && 用新ID替换新记录的ID
Thisform.Refresh  && 刷新屏幕,显示新ID

二、图片的处理。在VFP中,可以利用备注型字段来进行图片的存贮,这一功能可以用来保存人员的像片。首先,在数据表中加入备注型字段,假设字段名是photo。然后,在表单中加入Image控件,名为Image1,加入命令按钮控件,Caption设为“更换图片”。修改表单的Refresh方法程序,代码如下所示:

LOCAL lcFile

IF FILE(Member.Photo)  && 检测图片文件是否存在
lcFile = Member.Photo
ELSE
lcFile = ''
ENDIF

Thisform.Image1.picture = lcFile  && 在表单控件中显示图片

DODEFAULT()  && 执行默认的Refresh方法程序

“更改图片”命令按钮的Click事件程序如下所示:

LOCAL lcFileName

lcFileName = GETPICT("BMP,JPG,GIF", This.Caption, "选择")

IF !EMPTY(lcFileName)
Thisform.Image1.picture = lcFileName
REPLACE member.photo WITH lcFileName
Thisform.Refresh()
ENDIF

通过以上两段程序,已经可以在表单中显示图片了,并能提供更换图片的功能。将命令按钮可视属性(Visible)的设定与编辑、保存命令按钮结合起来,就能控制只有在编辑状态下,才能更换图片的操作。
报表输出图片时,在报表中添加OLE控件,数据源设为文件,填写内容即为备注字段的字段名,这样就可以输出带像片个人信息表了。

三、查询语句的生成。为了给用户提供尽可能多的查询选项,通常在查询表单中会设置许多控件,下面的程序段以人员ID、人员姓名、人员性别为例,将对应控件的值做为选择条件,通过变量lcQterm来汇总筛选条件表达示,最后通过宏代换的方法在SQL语句中实现筛选,其中ID、姓名为空时表示全选,性别用 Combo控件来显示。

SET EXACT ON
LOCAL lcQterm, s
lcQterm = ""  && 设定筛选条件的初始值

*人员ID
s = "ALLTRIM(thisform.textPerson_id.value)"
IF  &s <> ""    && 若用户有输入数据,则进行判定,若无输入则不检测该项目
lcQterm = "Member.Person_id = " + s
ENDIF

*人员姓名
s = "ALLTRIM(thisform.textName.value)"
IF  &s <> ""  && 若用户有输入,则加入到筛选条件表达式中
IF ALLTRIM( lcQterm ) <> ""  && 若表达式不为空,则新条件加入到末尾
lcQterm = lcQterm +" .AND. Member.name = " + s
ELSE
lcQterm = "Member.name = " + s && 若表达式为空,则直接赋予新条件
ENDIF
ENDIF

*人员性别   取值范围:男 女 全部
s = "ALLTRIM(thisform.comboSex.value)"  
IF &s <> "" .AND. &s <> "全部"
IF ALLTRIM( lcQterm ) <> ""
lcQterm = lcQterm +" .AND. Member.sex = " + s
ELSE
lcQterm = "Member.sex = " + s
ENDIF
ENDIF

IF ALLTRIM(lcQterm) = ""  && 对表达式进行判断,将查询结果输出到临时表中
SELECT *;              && 表达式为空表示全选
FROM Aiscenter!Member ;
ORDER BY Member.person_id  INTO CURSOR tempman
ELSE
SELECT *;              && 表达式不为空,则按筛选条件进行筛选
FROM Aiscenter!Member WHERE &lcQterm;
ORDER BY Member.person_id  INTO CURSOR tempman
ENDIF

四、在Windows程序组中加入程序项。在生成安装盘的第六步时,单击程序管理器的对应选项,将出现对话框,设定程序的文字标题、图标,在命令行中以%s开头,书写要执行的文件名称,例如%sSample.exe,%s用来指明执行文件的位置取决于用户的安装位置。经过这样的设定以后,在软件安装之后,会在Windows程序组中加入指定的程序项。
五、软件图标的制作。以微软的ImageEdit为例,一个ico文件中可以保存两种尺寸的图标,在制作时先做好大图标之后,可以进行全选,然后在Edit菜单中选New Image,系统出现新的空白区域,以等比压缩进行粘贴得到小图标,然后进行保存就可以备用了。VFP默认的程序图标是小狐狸标志,想要换掉这个图标,只需要在项目信息界面中设定EXE文件附加图标即可。如果程序图标只有一种尺寸,例如32x32,那么在资源管理器中以小图标显示文件时,程序文件仍旧会显示小狐狸标志,这是因为选择的图标中没有指定小尺寸图标的缘故。
六、主窗口界面的设置。程序主窗口界面的设置是通过设置_screen对象来进行的,可以在主程序中加入下面的程序段,可以为你的程序增色不少。
_Screen.Windowstate = 2  && 使窗口最大化
_Screen.Caption = "欢迎进入本系统" && 指定主窗口的标题
_Screen.Picture = "main.jpg" && 指定主窗口的背景图片
_Screen.Icon = "main.ico" && 指定主窗口的图标

以上是我在制作数据库管理系统中遇到的一些技术问题,以及解决办法,希望对数据库开发有兴趣的朋友有所帮助,并且希望与这些朋友进行交流共同进步。
我的Email是el_john598@sohu.com

回复列表 (共2个回复)

沙发

第一个:

     如果ID很多呢,那不是程序是一至加下去,如果中间删除一个呢?

何不把中间删除的也利用起来啊

你的第六个好象有点复杂啊,呵呵,

板凳

如果不考虑中间删除ID的问题
为什么不用select.....max()...

我来回复

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