以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助:登录名后有很多空格,User.Name也必须加".Trim"才能正常使用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99157)

--  作者:guning008
--  发布时间:2017/4/13 15:18:00
--  求助:登录名后有很多空格,User.Name也必须加".Trim"才能正常使用
我用了外部数据表来管理用户信息。是在SQL2005里面直接创建了一个User的表,严格按照帮助文档里面的方法添加的

Name nvarchar(50) 设为了主键
Type int
Config ntext

一直发现登录的时候窗口中用户名一栏和以前的项目不同,是个蓝条,今天才发现,这个蓝条是因为用户名后面有n个空格,然后默认又是全选状态,所以选了很多空格就是一个蓝条。

前几天也发现一次引用 User.Name的时候出错,当时的解决办法是设置一个变量,然后把User.Name赋值给这个变量,就正常了。

今天在PrepareEdit事件中再次引用 User.Name,一直无效,折腾许久才发现是空格搞得怪。

下面的代码可以正常工作,因为 User.Name 后面加了 .Trim,否则就无效。

If e.Row("业务员") <> User.Name.Trim Then
    e.Cancel = True
End If

我在想是否因为在SQL中设置了那个 Name 是 nvarchar(50),这个50是不是字符数?难道SQL2005自动给后面补充满了50个字符?因为我把登录框用户名那里点了一下用光标挪到最左面,然后用光标从左向右一个一个数,发现加上名字的三个字正好是50个字符。
而如果用开发者登录一次,然后下次登录就能看到只有开发者三个字,没有那些看不到头的空格造成的蓝条。我觉得是因为开发者账户是存储在项目中,而不是在SQL的数据表中。

是否应该在SQL里面修改一下Name的长度?还是有别的设置技巧?Name 允许 Null 值等?

求解,谢谢!



[此贴子已经被作者于2017/4/13 15:27:20编辑过]

--  作者:有点色
--  发布时间:2017/4/13 15:27:00
--  

 如果你设置成 nchart(50) 才会自动填充空格,nvarchar(50)不会填充空格。

 

 你尝试新增一个用户,看其保存的数据有没有空格。

 

 如果只是你原来数据有空格,你可以写代码把清除,保存,即可

 

For Each dr As DataRow In DataTables("users").DataRows
    dr("name") = dr("name").trim()
Next


--  作者:guning008
--  发布时间:2017/4/13 15:35:00
--  
色老师,你太棒了!

我重新打开SQL里面用户的数据表,发现果真是我把Name设置成了nchart(50) 

非常感谢。