4.3、数据库设计
数据库名称:KQXT
编码式命名
a.人事数据表 KQ_BMAN
字段名称 中文名称 类型 长度 小数 初值 说明
BNENO 员工编号 VARCHAR 10 NOT NULL 主键
BNCODE 编代码 VARCHAR 10 NOT NULL
BNNAM 中文姓名 VARCHAR 20 NOT NULL
BDNO 科室编号 VARCHAR 10 NOT NULL 外键BDEV
BZWNO 职务编号 VARCHAR 10 NOT NULL 外键BZW
BNLAST 上级标志 VARCHAR 1 T or F
BNNEXT 下级标志 VARCHAR 1 T or F
BNWORK 参加工作时间 DATETIME
BNVAL 有效标志 VARCHAR 1 T T or F删除
b.密码表 KQ_BPWD
字段名称 中文名称 类型 长度 小数 初值 说明
BNENO 员工编号 VARCHAR 10 NOT NULL 主键
BNPWD 登录密码 VARCHAR 10 NOT NULL
BNDS 数字签名 VARCHAR 10 NOT NULL
c.权限设置表 KQ_SYSPMS
字段名称 中文名称 类型 长度 小数 初值 说明
BNENO 员工编号 VARCHAR 10 NOT NULL 主键
PMSFUN 功能项目 VARCHAR 10 NOT NULL 主键
PMSNAM 功能名称 VARCHAR 40 NOT NULL
PMS 权限 VARCHAR 1 NOT NULL T or F
5.1、与数据库的链接
由于各工作站客户程序频繁地与数据库打交道,如何与数据库链接就显得十分重要。本系统用到一个数据库,名为KQXT_DATA.MDF,所有用户登陆时就要进行数据库操作,为实现客户端和数据库链接,首先在WinSERVER 的控制面板/管理工具/数据源(ODBC)选项中添加一个kqxt_sql的用户数据源。再在Pb8创建的“KQXT”开发工程的“KQXT”系统应用对象的OPEN事件中建立与SQL2000 KQXT_DATA.MDF数据库的链接,即加入以下语句:
// Profile KQXT_SQL
SQLCA.DBMS= profilestring("HTJS_ODBC.ini","DataBase","DBMS","")
SQLCA.DBParm= profilestring("HTJS_ODBC.ini","DataBase","DBParm","")
SQLCA.AutoCommit= true
connect using sqlca;
if sqlca.sqlcode <> 0 then
messagebox("错误","初始SQL数据库失败!",stopsign!)
halt close
end if
open(w_logo)
ls_user = trim(sle_user.text)
if ls_user = "" then
messagebox("提示","用户名不能为空!",exclamation!)
return
end if
///系统时间
datetime ldt_date
select getdate() into :ldt_date from htjs.kq_bpwd;
gs_today = string(ldt_date,"YYYY-MM-DD")
gd_today = date(ldt_date)
gs_id = sle_user.text
///////////////
if ls_user = "admin" then
gs_id = "admin"
SELECT htjs.kq_bpwd.bnpwd
INTO :ls_bnpwd
FROM htjs.kq_bpwd
WHERE htjs.kq_bpwd.bneno = :gs_id;
if ls_bnpwd <> trim(sle_pwd.text) then
messagebox("错误","登录密码不正确!",stopsign!)
sle_pwd.setfocus()
return
else
gs_bnnam = "系统管理员" //姓名
gs_bdnam = "系统管理员" //科室名称
open(w_main)
close(parent)
end if
else
//比对密码
SELECT HTJS.KQ_BPWD.BNPWD,HTJS.KQ_BPWD.BNENO
INTO :ls_pwd,:ls_bneno
FROM HTJS.KQ_BPWD
where htjs.kq_BPWD.BNENO = :ls_user ;
if isnull(ls_bneno) or len(ls_bneno)<= 0 then
messagebox("错误","用户编号不存在!",stopsign!)
sle_user.setfocus()
return
end if
if ls_pwd <> trim(sle_pwd.text) then
messagebox("错误","登录密码不正确!",stopsign!)
sle_pwd.setfocus()
return
else
////////////////////初始数据//////////////////////
string ls_bnnam,ls_bdno
//用户中文姓名、科室no
SELECT HTJS.KQ_BMAN.BNNAM , HTJS.KQ_BMAN.BDNO
INTO :ls_bnnam,:ls_bdno
FROM HTJS.KQ_BMAN
WHERE HTJS.KQ_BMAN.BNENO = :gs_id;
string ls_bdnam
//科室名称
select htjs.kq_bdev.bdnam
into :ls_bdnam
from htjs.kq_bdev
where htjs.kq_bdev.bdno = :ls_bdno;
gs_bnnam = ls_bnnam //姓名
gs_bdno = ls_bdno //科室编号
gs_bdnam = ls_bdnam //科室名称
open(w_main)
close(parent)
end if
end if