Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

access登录卡慢

飛謌  发表于:2019-09-18 22:47:48  
复制

我是将A开头的表拆分为后台放在共享文件内,前台打包,前台登录时第1台电脑登录很快,从第2台开始登录大约需要20秒左右,但是登录后操作不卡也不慢,不知道是什么原因,感觉应该是我的登录窗体代码可能有问题,请帮忙看看。

不拆分或就一台电脑使用登录无卡顿感非常快。


点击下载此附件





 

Top
chinasa 发表于:2019-09-19 08:02:23

你在登陆过程中加上MSGBOX来试试是在哪步比较慢。

 

另外,你登陆时怎么用了那么多DLOOKUP啊。看是否能减少对表的检索次数,比如相同的检索内容,能不能检索完了赋值给变量,后面直接使用第一次检索的结果,而不是重新检索。



飛謌 发表于:2019-09-19 09:56:48
老师MSGBOX这个怎么操作能说具体点吗?我菜鸟一个。谢谢老师。

chinasa 发表于:2019-09-19 14:13:38

我看你代码里也用过的啊。

比如你下面的代码。增加了3个msgbox,会分别跳出3个对话框,你自己关注下哪个环节速度比较慢。当然你涉及登陆的其他代码也要测试下。

 

If IsNull(DLookup("用户名", "LA100记住用户")) Then
Me.用户名.SetFocus
Me.JZYHM = False
Me.JZMM = False

msgbox "1"
ElseIf IsNull(DLookup("密码", "LA100记住用户")) And Not IsNull(DLookup("用户名", "LA100记住用户")) Then
Me.密码.SetFocus
Me.用户名 = DLookup("用户名", "LA100记住用户")
Me.JZYHM = True
Me.JZMM = False

msgbox "2"

Else
Me.用户名 = DLookup("用户名", "LA100记住用户")
Me.密码 = DLookup("密码", "LA100记住用户")
Me.JZYHM = True
Me.JZMM = True
Me.登录.SetFocus

msgbox "3"

End If

 



飛謌 发表于:2019-09-19 15:33:40
好的谢谢老师,只是没这么用过!谢谢!我试试!

飛謌 发表于:2019-09-20 09:00:53
老师我这个测试了一下,在涉及链接表时特别慢,就是判断用户密码的时候,有什么办法提速?求解。

chinasa 发表于:2019-09-20 11:49:23

争取精确到哪一句代码



飛謌 发表于:2019-09-20 12:16:04


chinasa 发表于:2019-09-20 15:48:22
            '用户名和密码都正确的用户可以登录,并弹出登录成功信息框。
           ' If (DLookup("用户名", "A100用户管理", "用户名&密码 =  '" & Me.用户名 & Me.密码 & " '") = Me.用户名 And Date = #1/1/2019# And Me.用户名 = "admin") Then
           '     Me.数据库页.Visible = True
           '     Me.选项卡 = Me.数据库页.PageIndex
           '     Me.密码页.Visible = False
           '     Else
               
            If DLookup("用户名", "A100用户管理", "用户名&密码 =  '" & Me.用户名 & Me.密码 & " '") = Me.用户名 Then
                '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
                If Me.用户名 = "admin" And Date = #1/1/2019# Then     '我不知道你这个DATE是什么,是变量?还是A100用户管理的字段名?我都没看到。我假设他是变量名。
                Me.数据库页.Visible = True
                Me.选项卡 = Me.数据库页.PageIndex
                Me.密码页.Visible = False
                End If
                End If
                If Me.用户名 <> "admin" Or Date <> #1/1/2019# Then
                DoCmd.Close
                DoCmd.OpenForm "A002综合处理窗体"
                End If
               '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
         
            Else   '本次登录期间,累计计算错误次数
                MsgBox "口令错误!", vbCritical, "提示"
                Me.密码 = Null
                Me.次数 = Me.次数 + 1
                DoCmd.SetWarnings False
                DoCmd.RunSQL "UPDATE A100用户管理 SET 错误次数 = [forms]![A001登录窗口].[次数] WHERE ((([A100用户管理].[用户名])=[forms]![A001登录窗口].[用户名]));"
                Me.密码.SetFocus
                '连续输入密码错误超过三次的用户将被禁用。
                If Me.次数 >= 5 Then
                    MsgBox "连续5次输入口令错误,该用户已被停用,请联系系统管理员!", vbCritical, "提示"
                    DoCmd.Quit
                End If
           ' End If


chinasa 发表于:2019-09-20 15:49:03
不一定能解决你的问题,只是说明一个思路,既然取后台表比较慢,那么尽量减少检索的次数。

飛謌 发表于:2019-09-20 16:09:31

我那句是三个判断,用户名密码与输入相符 and 今天等于2019-1-1 and 用户名等于admin时执行操作。

谢谢老师的不懈努力。



总记录:10篇  页次:1/1 9 1 :