近期在CSDN各位大侠的帮助下做了个程序,运行基本正常,但是一直有2点困惑我的问题1、我在每个需要访问数据库的窗口都调用到了ADO连接,如
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={sql server};server=10.8.61.11;uid=sa;pwd=sa;database=feng"
conn.Open
这样的连接语句,我想这样太不方便了,又浪费代码,虽然运行起来速度感觉不到很慢,如何把这个连接移到cls模块使每个窗体都在这里调用呢?2、权限问题!我设置了SQL表login 里面有字段: 用户 | 姓名 | 权限 三个字段,权限我直接就分为管理员,录入员,查询员三个角色。怎么让这三个相应的角色进入后看到相应的菜单呢?  搜索了一些类似的贴,对我的帮助也不是很大,所以没办法就发贴咯! 呵呵。

解决方案 »

  1.   

    说错了第一点,我想把代码写入到.bas模块
      

  2.   

    1、在模块中写连接过程,定义为public,每次只需要用set rs = new adodb.recordset就应该可以了。2、 关注中。。
      

  3.   

    http://community.csdn.net/Expert/topic/4583/4583334.xml?temp=.5775568
      

  4.   

    1. 为了提高数据库效率,应该尽量在一个应用程序中只保留一个活动连接,方法:
       建立一个class,在初始化时,建立conn并打开连接。
       程序启动时,创立class的实例,并使用其对像conn
       以后需使用时,Set myCn=实例化后的conn引用。
    2.每个角色登录后,都有一个权限check过程,同时DISABLE掉不需要的菜单、按钮:
       sub verify(role)
           select case role
                  case "管理员"
                      Call DisableMenu
                  ....
           end select
       end sub
      

  5.   

    在公共模块中加入OpenRecordset、UpdateRecordset、ExecuteSQL等过程,记录集采用断开连接方式。
      

  6.   

    楼上大哥我知道你是高手,我可是菜鸟,我理论性很弱的,可否详细点,根据我的实际情况来点代码呢?我不怕代码多,就怕玩理论。辛苦您写个样本出来,老师~哦哦哦!
    还有登陆时应该要程序记住登陆用户ID吧?要记住ID的话这样行不,在bas中 
    设置一行语句public username as string
    再在登陆窗中设置如果登陆成功 则username=trim(txtusername.text) '这样是否就记忆了用户在MDI窗中呢? 迷茫!请不啬赐教! 
      

  7.   

    (1)如果只做成一个大大的EXE,那么就如楼上几位说的做就OK了,放入BAS中,并且PUBLIC……
    如果把EXE做成若干个DLL,比如ACT.DLL、CO.DLL、IM.DLL等等,你就必须在每个DLL中分别处理了。
    (2)在数据库中放一张表,分为定义不同USER的权限以决定是否在界面对某些敏感信息进行DISABLE。其实在实际运用中,是没有这么麻烦的。以用友、金蝶、天心等大型ERP软件来看,也只不过是对价格、金额字段进行权限定义罢了。
      

  8.   

    1、解决步骤:
    A.在bas文件里定义如下变量
    public conn as New ADODB.Connection
    B.在登陆时使用如下语句打开
    conn.ConnectionString = "Driver={sql server};server=10.8.61.11;uid=sa;pwd=sa;database=feng"
    conn.Open
    C.这样你就不用在每个窗体里都写上连接代码了
    2、这个可能很难说明白,中心思想就是建一个表来存储权限信息,
    一个用户能访问那些菜单都把它存到表里,像这样的表就行
    用户名    菜单名
    ----------------
    admin    菜单1
    admin    菜单2
    admin    菜单3
    admin    菜单4
    admin    菜单5
    ........
    然后你就可以在程序中得到这些信息,再根据登陆的用户名来确定要显示那些菜单
      

  9.   

    楼上第一点讲得非常好~ 虽然我不知道是不是最好的解决办法,但起码比我现在的好对于第二点:如果我建好了
    用户名    菜单名
    ----------------
    admin    菜单1
    admin    菜单2
    admin    菜单3
    admin    菜单4
    admin    菜单5表是有了,但能否给个样版的代码呢?
      

  10.   

    第一点楼上的说的很具体,在登录软件时打开就可以了.只要设为全局变量就行
    对于第二点则建立一个表USERPER 里面的字段为USERID,模块ID,INSERTFLAG,DELETEFLAG,UPDATEFLAG,SELECTFLAG
    ADMIN  001 1,1,1,1
    ADMIN  002 0,0,0,0
    ......
    另一个表为MODULETABLE 字段为:模块ID,模块名称 
    001  菜单1
    002  菜单2
    ....在软件的使用过程中,调用它就可以完成所需要的操作,而且可以做到通用性.
      

  11.   

    其实权限方面的解决方法有很多~~建议两种简单的~~
        在主窗体添加一个隐藏的TEXT控件或LABEL控件~~登陆时把登陆的用户名写进控件里~~
    设定每个用户可以用什么功能(比如管理员可以用所有功能,录入员只可以用录入功能,查询员只可以用查询功能)~~
        方法一:
        点击一个功能时判断当前TEXT控件或LABEL控件中的用户名是否有使用这项功能的权利~~如果有就运行没有就提示错误并返加~~
        方法二:
        在主窗体FORM_LOAD里判断登陆的用户可以用什么功能~~不能用的功能就隐藏或设为不可用就可以了~~以上两种方法可能并不是最好的~但却是最简单易明的~~适合新手用~~
    这么简单明了的方法相信不用我贴出代码吧? ^_^
      

  12.   

    此贴可能是CSDN里的VB版块中近半年来最具价值的一贴了

    论坛还是当年的论坛
    会员已不是当年的会员了
      

  13.   


    TO monica888(北京人纽约)老兄 ,你有指桑骂槐之嫌啊? 唉,俺们菜是菜了点,非常渴望大家能多帮帮忙,如果解决了这权限问题.一辈子都记得你们哦.呵呵....TO jackcaixia(风):我就是希望你能贴出代码哦.谢谢先.TO  shmily519() 你的思路完全理解.只是代码构造上面我还存在问题....主要问题在于我登陆后MID主窗体如何能记忆住登陆的用户名...谢谢!