Foxtable(狐表)用户栏目专家坐堂 → [求助]OpenQQ问题


  共有114人关注过本帖树形打印复制链接

主题:[求助]OpenQQ问题

帅哥哟,离线,有人找我吗?
ezilu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:136 积分:1235 威望:0 精华:0 注册:2018/7/1 10:45:00
[求助]OpenQQ问题  发帖心情 Post By:2019/10/10 17:38:00 [只看该作者]

官方的OpenQQ可以 通过 服务端的“用户”主表信息  可以 实现 客户端 输入验证登录 功能
但是 在多用户环境下 如何通过 客户端 去修改编辑 服务端 的用户表信息呢  当然  我说的用户表信息  不单单只有官方的那几个 “部门” “姓名” “密码” “好友”四列,如果还有“地址”、“电话”等列呢 如何实现修改编辑?
麻烦大大们,谢谢
[此贴子已经被作者于2019/10/10 17:39:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:35369 积分:180029 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/10 17:56:00 [只看该作者]

使用外部数据源,客户端和服务端都连接到同一个数据库,共用一个用户表即可

 回到顶部
帅哥哟,离线,有人找我吗?
ezilu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:136 积分:1235 威望:0 精华:0 注册:2018/7/1 10:45:00
  发帖心情 Post By:2019/10/10 18:01:00 [只看该作者]

但是出现错误:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.10.3.1
错误所在事件:启动IMClient
详细错误信息:
已添加了具有相同键的项。

我公用外表的  主键 是设置的 _identify
[此贴子已经被作者于2019/10/10 18:03:08编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:35369 积分:180029 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 8:27:00 [只看该作者]

这个错误应该是添加了重复的好友,服务端UserLogging事件的代码发上来看看

 回到顶部
帅哥哟,离线,有人找我吗?
ezilu
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:136 积分:1235 威望:0 精华:0 注册:2018/7/1 10:45:00
  发帖心情 Post By:2019/10/11 11:19:00 [只看该作者]

应该不会错  服务端uselogging  的代码 是官方的代码  我没改动

Dim pts() As String = e.UserName.Split(".")
Dim
dr As DataRow
dr
= DataTables("用户").Find("部门 = '" & pts(0) & "' And 姓名 = '" & pts(1) & "'")
If
dr Is Nothing  Then '判断此用户不存在
    e.Message  =
"
用户名错误!" '返回给登录者的提示信息
    Return

End
If
If
dr("密码") <> e.Password Then '如果密码错误
   
e.Message  = "登录密码错误!" '返回给登录者的提示信息
   
Return

End
If
e
.Success = True '允许用户登录
'添加存储在好友列的非本部门的好友

If
dr.IsNull("好友") = False Then
    Dim nms() As String = dr(
"
好友").Split(",")
    e.Buddies.AddRange(nms)

End
If
'最后添加相同部门的同事为好友

For
Each dr In DataTables("用户").Select("部门 = '" & pts(0) & "'")
    Dim nm As String =  dr("部门") & "." & dr("姓名")
    If nm <> e.UserName Then '如果不是登录者本人
       
e.Buddies.Add(nm)
    End
If

Next

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:35369 积分:180029 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 11:29:00 [只看该作者]

那么就是用户表有重复的部门和用户名,或者有空行

另外注意:

'添加存储在好友列的非本部门的好友
If
 dr.IsNull("好友") = False Then
    Dim nms() As String = dr(
"
好友").Split(",")
    e.Buddies.AddRange(nms)

End
 If
'最后添加相同部门的同事为好友

For
 Each dr In DataTables("用户").Select("部门 = '" & pts(0) & "'")
    Dim nm As String =  dr("部门") & "." & dr("姓名")
    If nm <> e.UserName Then '如果不是登录者本人
        
e.Buddies.Add(nm)
    End 
If

Next

 回到顶部
帅哥哟,离线,有人找我吗?
ezilu
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:136 积分:1235 威望:0 精华:0 注册:2018/7/1 10:45:00
  发帖心情 Post By:2019/10/11 13:23:00 [只看该作者]

解决了  是相同的 部门  
谢谢大大


能不能 不在客户端 绑定 外表 用户表  
用户表  只在服务端,而且只能是 内部表格? 这样或许对于 用户 数据隐私安全 是不是好些?
同时又能满足  客户端  远程 编辑 修改 的想法  
[此贴子已经被作者于2019/10/11 13:24:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:35369 积分:180029 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 13:54:00 [只看该作者]

保证服务端和客户端有完全相同的用户设置即可。也就是要维护2套用户表,并且不能有差异

 回到顶部
帅哥哟,离线,有人找我吗?
ezilu
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:136 积分:1235 威望:0 精华:0 注册:2018/7/1 10:45:00
  发帖心情 Post By:2019/10/11 18:32:00 [只看该作者]

理解了
那我现在有个想法:

服务端和客户端 绑定 同一个 外表后   可以正常使用openQQ了  
我在客户端登录后,在外表“用户”新增了一行
表事件如下:
DataRowAdded触发事件:QQClient.Send("用户增加")

然后服务端的openQQ服务端的ReceivedMessage事件中添加:
If e.Message = "用户增加" Then
    DataTables("用户").Load
End If

最后却不能使 服务端的“用户”表重新加载。。。错在哪里?大大,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:35369 积分:180029 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/11 20:26:00 [只看该作者]

数据要保存别人才能刷新啊。放在DataRowAdded也没有意义的,新增一空行有啥用?

放到BeforeSaveDataRow事件,判断部门、用户数据填写完整后再QQClient.Send("用户增加")

另外服务端建议直接从数据源取数据,这样就不需要刷新了

 回到顶部