最近一直在学习自定义用户与权限管理,老规矩,先照抄一遍,再按自己的思路改。但是,在学习自定义用户与权限管理之二的时候,发现到了最后的步骤:
十、将项目事件AfterOpenProject的代码改为:
Dim
cmd
As
New
SXQLCommand
cmd.ConnectionName = "User"
cmd.CommandText = "S ELECT * From {Users} Where [Name] Is
Null"
_UserTable = cmd.ExecuteReader(True)
Forms("用户登录").Open()
下面是后半截代码,如果把下面代码复制进去,则系统必定闪退,不加这部分代码就正常。为了测试这个问题,我连续做了两个相同的系统。结果都一样。
If
_UserName = ""
Then
Syscmd.Project.Exit()
Return
'这个要加上,因为既然要退出,就不应该再执行后面的初始化代码了,否则会出错
End
If
'后续初始化代码
但是,教程里的案例则没有问题?我分析了下原因,应该是系统运行的时候UserName = ""就退出,我抄的系统在运行的时候,系统还没加载用户表就运行了项目事件判断,然后UserName 这时候是空值,所以执行了退出。实际运行中也发现,如果不把If
_UserName = ""
Then....这段程序加进去,运行到“用户登录”界面的时候,用户名这栏就是空值。但是,如果我在窗口设计器里面,选择“应用窗口”,则用户名这栏是有正确的值的。百思不得其解,研究了快一天了,也没找到问题在哪里?
整个系统,我除了把数据源名称改为我这里的名称以外,没有修改任何一个字,也就是把cmd.ConnectionName = "User"的user改为我的数据源。
最后,还有个悲剧的问题,之前有个步骤我没做(因为觉得没必要):
三、打开Foxtable的用户管理,增加一个用户,并将其设置为默认用户,这样打开项目的时候,将不会出现foxtable的用户登录窗口。
然后,在调试找不到原因之后,我很不幸的把这个加上去了,现在更惨了,原本还能按住ctrl进系统调试,现在是任何用户名进去都是闪退,麻烦版主帮忙解开下。