51CTO技术论坛_中国领先的IT技术社区's Archiver

qitutujia 发表于 2006-8-29 11:40

利用PB实现动态系统用户登录

在多用户的大型数据库系统,用户对数据库操作权限会有区别,因此,我们需要设计系统用户登录窗口,来完成用户的确认与权限控制。通常我们都是在数据库中添加一张人员表,保存人员信息、登录用户名以及口令,但这种方法安全性并不是很高。其它,我们可以使用该方法登录窗口时,需要采用动态生成数据库连接代码,然后连接数据库,如果用户存在,并且录入的口令正确,则数据库连接成功,这样便可以打开系统主窗口了,登录窗口设计如图1 。
  设计“确定”按钮Clicked事件的代码如下:
  w_login.visible = false
  //暂时隐藏登录窗口
  Open(w_welcome)
  //打开欢迎或者数据库连接等待窗口
  SetPointer(HOURGLASS!)
  //将光标变成沙漏型
  string ls_user,ls_pass
  //读取用户录入的用户名与口令
  ls_user = sle_username.text
  ls_pass = sle_password.text
  //从注册表中读取所有数据库信息并存储在“sqlca”中,其中gs_key是你的软件注册位置
  RegistryGet(gs_hkey, "DBMS", RegString!, sqlca.DBMS)
  RegistryGet(gs_hkey, "Database", RegString!, sqlca.Database)
  //生成数据库连接参数,除了用户名与口令外,其他由系统的需要而定。
  SQLCA.DBParm += ";UID="+ls_user+";PWD="+ls_pass+&&"',PBUseProcOwner='Yes',
  ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT'"
  CONNECT using sqlca;
  //连接数据库
  if sqlca.sqlcode0 then
  //数据库连接失败,说明用户录入口令不正确,或者不存在该用户
  close(w_welcome)
  //关闭等待窗口
  messagebox("登录","数据库连接失败!")
  sle_password.text=""
  sle_password.setfocus()
  success=false
  w_login.visible=true
  else
  //数据库连接成功!用户验证正确
  success=true
  open(w_main)//进入主窗口
  close(w_parent)
  end if
  使用本方法时,对系统的维护(添加、删除、权限设置等),必须到Sybase Central中进行,对系统维护人员有一定要求。

lcsgaogd 发表于 2008-3-19 19:20

谢谢楼主

cysky 发表于 2008-3-21 14:43

不错的,下载来看看,感谢提供了

Ding117 发表于 2008-4-19 15:57

学习了

想法不错,以前还真不是这样做的呀

ribut9225 发表于 2008-4-20 09:17

好像有一个缺点

数据库连接不了,就说用户名密码错误

但是数据库连接失败有很多原因的

还有,这样的操作,数据库需要增加N个用户名,该用户不仅可以用你程序登录,还可以用数据库客户端,不通过你的程序直接登录数据库进行操作
比如SQL SERVER,不用的你程序,不安装客户端,在ODBC里直接可以新建一个SQL的ODBC数据源(WINDOWS是默认安装了SQL的客户端),通过该ODBC,用户可以直接操作你的数据库而不留任何痕迹
所以,偶不认同楼主的做法

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.