注册 登录
编程论坛 VB6论坛

关于登录后显示使用者姓名和权限的问题

ictest 发布于 2016-10-11 08:16, 2591 次点击
Access数据库
格式为:
user    password    name    class
1        1          AAA      SYS
2        2          BBB      OPE
.        .            .        .
.        .            .        .
.        .            .        .

程序源码为:
Private conn As New ADODB.Connection
Private Sub adminlogin()
    Static j As Integer
    Dim rs As New ADODB.Recordset
    SQL = "select username,password from admin Where username='" & text1.Text & "' and password='" & text2.Text & "'"
    Set rs = conn.Execute(SQL)
    If rs.EOF And rs.BOF Then
        j = j + 1
        rs.Close
        Set rs = Nothing
        MsgBox "密码错误"
        If j > 2 Then
            MsgBox "连续错误3次!程序将退出"
            End
        End If
    Else
        rs.Close
        Set rs = Nothing
        Form2.Show
'在这里增加语句
        Unload Me
    End If

End Sub
Private Sub Form_Load()
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Data.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
End Sub

Private Sub cmd_Click()
    Call adminlogin
End Sub

Private Sub Form_Unload(Cancel As Integer)
        Set conn = Nothing
End Sub

Private Sub text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then Call adminlogin
End Sub


问题:
想在正确登录后,如用户名为1,密码为1,登录后在Form2.Label1.Caption中显示AAA,Form2.Label2.Caption中显示SYS,语句该怎么写?
14 回复
#2
yujianding2016-10-11 08:19
SQL = "select username,password,name,class from admin Where username='" & text1.Text & "' and password='" & text2.Text & "'"
在这里将名称和权限加进去
然后再设两个全局变量
在登录成功后,变量1=name,变量2=class,然后将Form2.Label1.Caption=变量1,Form2.Label2.Caption=变量2
就可以了
你这个登录代码跟我写的那个好像啊。。。
#3
风吹过b2016-10-11 08:44
    SQL = "select username,password from admin Where username='" & text1.Text & "' and password='" & text2.Text & "'"
    Set rs = conn.Execute(SQL)

这种方法会导致 SQL注入漏洞。

#4
pengzhanggui2016-10-11 08:44
回复 2楼 yujianding
最好分开两个table管控;

一个是user的明细;

一个是权限的明细;
#5
xiangyue05102016-10-11 08:52
你对数据库代码有两个问题,
1. Select语句,你并未选择class 等字段,又要使用其内容。这是不可能的。
2. 你写的增加语句的位置明显有问题,rs被关闭之前没有将其class字段信息赋值给变量。关闭之后想要用也是不可能的。
至于在Form2中显示,正如楼上所言。直接赋值或者通过变量都可以。
目测你VB的基础知识还是不够扎实,多做练习,不要着急做实际的项目

SQL = "select * from admin Where username='" & text1.Text & "' and password='" & text2.Text & "'"  '如楼上所言,数据集需要包含class
……
Else
Form2.show
Form2.Label1.Caption=rs.field("class")  '这里只有class, 你SYS这项对应的字段名怎么没有? 另外必须在rs.Close之前
rs.Close     
Set rs = Nothing
#6
pengzhanggui2016-10-11 10:01
回复 5楼 xiangyue0510
最近好多这样的问题,要不做一份基本的资料,分享一下经验之谈?
#7
风吹过b2016-10-11 10:06
支持这个做法。

#8
ictest2016-10-11 10:58
多谢各位的指点,特别是xiangyue0510版主的那句“目测你VB的基础知识还是不够扎实,多做练习,不要着急做实际的项目”真正是一针见血,肺腑之言,对初学者充满了浓浓关切之意。

的确如此,近五十岁的我从来没能系统的认真的学习过编程,虽然喜欢,但也是常常会被一些简单的问题所桎梏,所幸知道了“编程论坛”,在这里各种各样的编程高手不遗余力、无私的帮助所有的初学者,我一下子就找到了“家”的感觉。

再次感谢各位。
#9
yujianding2016-10-11 11:26
楼主,不用着急,我也没有系统的学过编程,我学编程只是为了工作的事偷懒罢了。。。我在公司负责报价的,开始都是用excel报价,我来了后,我将excel做成带函数,带VBA的类型的自动化的表格,还把excel用VBA做了登录窗口的,结果发现excel有个致命的缺陷,随即放弃了用excel的想法,然后看到了VB,就陷入了VB里面,还在网上买了学习资料,天天上网查各种代码,看书学习各种类型的编程,现在可能还没入门。。。我将我在各个论坛下载的资料上传一份大家一起学习吧
只有本站会员才能查看附件,请 登录
我们大家一起努力,加油!

[此贴子已经被作者于2016-10-11 11:31编辑过]

#10
xiangyue05102016-10-11 13:32
回复 6楼 pengzhanggui
谈什么呢?
感觉最近新手太多,很多都是提的一些很基础、很浅显的问题,也不一定是什么类型。
#11
ZHRXJR2016-10-11 13:58
你的编程基础还不够扎实,随便写了一个,应该是你需要的,你看看,希望对你有点帮助。
我认为如果是多窗体的数据库编程,使用模块比较合理,这样省去了在各个窗体都需要编写数据库连接的代码,另外各窗体间需要的数据可以在模块中定义,在窗体直接调用即可。
添加一个模块Module1,模块中编写数据库连接代码,定义窗体间调用的数据变量:
程序代码:
Public conn As New ADODB.Connection, RS As New ADODB.Recordset
Public Uname As String, Pclass As String

Sub KKK(conn)
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Data.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
End Sub

FORM1窗体的程序:
程序代码:
Dim J As Integer

Private Sub Command1_Click()
Dim ZFC As String    '过程级变量
If Text1.Text = "" Then    '检测用户是否输入用户名
    MsgBox "你没有输入用户名,请输入!"
    Exit Sub    '如果没有输入,退出当前过程,等待用户输入
End If
If Text2.Text = "" Then    '检测用户是否输入用户密码
    MsgBox "你没有输入用户密码,请输入!"
    Exit Sub    '如果没有输入,退出当前过程,等待用户输入
End If
    Call KKK(conn)    '调用模块中的数据库连接
    RS.Open "Select * From admin Where username='" & Text1.Text & "'", conn, 2, 2
    If Not RS.EOF Then   '首先检测用户名是否正确
        If RS!password = Text2.Text Then   '再检测用户密码是否正确
        Uname = RS!Name    '取出用户名称存储在模块级变量Uname中
        Pclass = RS!Class    '取出用户权限存储在模块级变量Pclass中
        ZFC = "登录成功"
        Else    '如果用户密码不正确
        ZFC = "密码不正确"
        J = J + 1
        End If
    Else    '如果用户名不正确
        ZFC = "用户名不正确"
        J = J + 1
    End If
    RS.Close
    Set RS = Nothing
    conn.Close
    Set conn = Nothing
    If J >= 3 Then
    MsgBox "你已经连续三次登录不成功,不能继续登录了!"
    End
    End If
    If ZFC = "登录成功" Then
        Unload Me
        Form2.Show
    ElseIf ZFC = "密码不正确" Then
        MsgBox "你输入的用户密码不正确,请重新输入!"
        Text2.Text = ""   '清除Text2内容
        Text2.SetFocus    '光标到Text2,以便重新输入
    ElseIf ZFC = "用户名不正确" Then
        MsgBox "你输入的用户名不存在,请重新输入!"
        Text1.Text = ""   '清除Text1内容
        Text2.Text = ""   '清除Text2内容
        Text1.SetFocus    '光标到Text1,以便重新输入
    End If
End Sub

Private Sub Form_Load()
        Text1.Text = ""
        Text2.Text = ""
End Sub

Form2窗体的代码:
程序代码:
Private Sub Form_Load()
Label1.Caption = "": Label2.Caption = ""
'方法一:直接显示用户名称与权限
Label1.Caption = Uname
Label2.Caption = Pclass
' Uname变量与 Pclass变量是模块级变量,这里直接调用即可
'
-------------------------------------
'
方法二:使用数据库显示用户名称与权限
Call KKK(conn)    '调用模块中的数据库连接
RS.Open "Select * From admin Where name='" & Uname & "' And Class='" & Pclass & "'", conn, 2, 2
Label1.Caption = RS!Name
Label2.Caption = RS!Class
RS.Close
Set RS = Nothing
conn.Close
Set conn = Nothing
End Sub


由于你的数据库结构不清楚,没有调试,估计应该问题不大。

[此贴子已经被作者于2016-10-11 14:01编辑过]

#12
ictest2016-10-11 14:23
多谢各位!
#13
pengzhanggui2016-10-11 14:36
回复 10楼 xiangyue0510
确实好多新手问问题,我现在较少搞VB了,主要在搞C#去了
#14
xiangyue05102016-10-11 14:43
回复 8楼 ictest
这个是有切身体会的。刚开始学VB的时候,做一个计算器的程序当成练习,功能确实实现了,代码洋洋洒洒好几页。 过了一年,给别人讲VB,也用计算器作为练习。自己重新做了一遍,只用了原来1/4的代码。
另外大概也是刚开始学VB不久的事情,做一个项目用的程序,本来做了一个月左右就完工。但是老板一句话,做了一个很简单的变动。 就是这个简单的变动,我用了大概一周多的时间才把代码修改好。

对于新手不建议着急做实际项目,是因为新手的代码往往存在这些问题:
1、 简洁性:代码多而且乱,一旦修改工作量巨大。  
2、 易读性:很容易出现刚写的代码,过两天再来看,发现有点看不明白了。  
3、 易改性:当程序某一个地方需要改变的时候,代码中需要修改的内容可能会很多。 这样的代码改动的时候,很容易出错,可能因为出错调试耗费大量的精力。
4、 潜在错误:这个对于数据类别的程序尤其重要,如果测试数据考虑不全面,实际使用中很可能报错或者结果不对。
如果带着这样的问题去做项目。业主和老板可以把你玩吐血了。

解决这些问题,程序员必须具备的的素质和能力
1. 扎实的基础知识:这个是最基本的,至少写出实现功能的代码,当出现问题的可以找到问题的源头。
2. 很好的设计思路:这个包括最基本的实现功能的方式方法、功能模块的拆分等等。 这需要不断在实践中去磨练和积累经验才行,对于新手就是多做练习。 个人觉得不要限于书本上的练习,尤其反对照抄一遍代码运行之后没问题,然后就完事了的学习方法。 可以对这个代码按照自己的想法进行修改,我以前就是这样干的,有时候能改到效果完全两样的程度。 也可以根据自己凭空的想法设计一个练习,比如上面说的计算器的例子其实就是我拿着casio的计算器自己弄的,没有书本或者示例代码。
3. 很好的书写习惯:这里指的是写代码时候的习惯,比如变量命名、缩进等等。 没有说什么样的才是好的,也可以形成自己的风格。但是至少自己写的代码,要找某一局代码可以很快找到,而且即使过了一年半载也看的明白,不至于懵了。
4. 一定的前瞻性:能够预见到未来可能需要进行的修改,在代码上提前预留好准备,这更需要经验积累了。
#15
xiangyue05102016-10-11 14:47
回复 13楼 pengzhanggui

C++学了一段时间,年纪大了学不进去了。我还是VBA+ ,暂时用在工程项目做辅助工具,也不是专门的软件开发,够用了。
1