Foxtable(狐表)用户栏目专家坐堂 → [求助]OPENQQ编号出现重复。


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

主题:[求助]OPENQQ编号出现重复。

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


加好友 发短信
等级:幼狐 帖子:93 积分:1070 威望:0 精华:0 注册:2015/3/8 11:11:00
[求助]OPENQQ编号出现重复。  发帖心情 Post By:2016/7/22 9:41:00 [只看该作者]

   根据帮助中的《用OpenQQ实现网络环境下的编号》做的编号,不关闭项目添加正常,但是每次重新打开项目输入"类别",编号就归零。请问是什么原因?全程QQClient斗正常连接。

If e.DataCol.Name = "类别" Then
    If e.DataRow.IsNull("类别") Then
        e.DataRow("编号") = Nothing
    Else
        If QQClient.Ready = False Then
            PopMessage("QQClient未启动,无法生成编号!","提示",PopIconEnum.Infomation,5)
        Else
            Dim bh As String = e.DataRow("类别")
            Dim rt As StringQQClient.SendWait(":f" & bh & "f:")
           
Dim id As Integer
            If rt > "" Then
                If  Integer.TryParse(rt,idThen
                    e.DataRow("
编号") = bh & Format(id,"000")
                Else
                    PopMessage("
服务器返回错误信息:" & rt,"提示",PopIconEnum.Infomation,5)
                End If
            Else
                PopMessage("
服务器无响应,无法生成编号!","提示",PopIconEnum.Infomation,5)
            End If
        End If
    End If

End
If


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/22 9:45:00 [只看该作者]

 

[此贴子已经被作者于2016/7/22 9:46:52编辑过]

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


加好友 发短信
等级:幼狐 帖子:93 积分:1070 威望:0 精华:0 注册:2015/3/8 11:11:00
  发帖心情 Post By:2016/7/22 9:52:00 [只看该作者]

补充一下,也尝试在生成编号收加入save但是也不行。之前用的还好好的,不知道怎么就变成这样了。图片点击可在新窗口打开查看

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/7/22 9:57:00 [只看该作者]

帮助文档的代码,是要求你服务器程序,不能关闭的。

 

如果要不归零,你必须修改服务器端的代码,也就是关闭项目之前,把编号的信息保存回表里去

 

如,BeforeCloseProject事件,写代码


For Each key As String In pdbhs.Keys
    DataTables("产品").ReplaceFor("编号", key & Format(pdbhs(key),"000"), "类别 = '" & key & "'")
Next
DataTables("产品").Save

 

[此贴子已经被作者于2016/7/22 9:58:26编辑过]

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


加好友 发短信
等级:幼狐 帖子:93 积分:1070 威望:0 精华:0 注册:2015/3/8 11:11:00
  发帖心情 Post By:2016/7/22 10:10:00 [只看该作者]

谢谢大红袍老师。我试了下添加后保存,服务端开启同一个表格,加载后服务端出现该新建,数据库也有该行,然后关闭客户端再连接编号仍然重头开始。

下面的这段代码不是对比现有编号的吗?而且开了编号列禁止重复,不管用也。

字典储存在内存中重新打开后就会清零吗?


Dim msg As String = e.Message
If
msg.StartsWith(":f") AndAlso msg.EndsWith("f:") Then
    msg = msg.SubString(2, msg.Length - 4)
    If pdbhs.ContainsKey(msg) Then '
如果存在这个类别的编号
        pdbhs(msg) = pdbhs(msg) + 1 '
将该类别最大编号加1
   
Else
        pdbhs.Add(msg,1) '如果是这个列表的首次编号,则编号等于1
   
End If
    e.ReturnValue = pdbhs(msg)
'将编号返回给客户端
End If


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


加好友 发短信
等级:幼狐 帖子:93 积分:1070 威望:0 精华:0 注册:2015/3/8 11:11:00
  发帖心情 Post By:2016/7/22 11:31:00 [只看该作者]

大红袍老师,菜单上的保存按键是这个Syscmd.Project.Save()吧?和您提供的有什么不同?保存按键不是直接全表保存了吗?
For Each key As String In pdbhs.Keys
    DataTables("产品").ReplaceFor("编号", key & Format(pdbhs(key),"000"), "类别 = '" & key & "'")
Next
DataTables("产品").Save

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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/7/22 11:50:00 [只看该作者]

换个思路,每次打开QQserver,就从表中提取最大的编号不就行了吗?

用SQLCompute:

 

http://www.foxtable.com/webhelp/scr/2897.htm

 

= DataTables("订单").SQLCompute("Max(编号)")


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


加好友 发短信
等级:幼狐 帖子:93 积分:1070 威望:0 精华:0 注册:2015/3/8 11:11:00
  发帖心情 Post By:2016/8/4 8:47:00 [只看该作者]

以下是引用狐狸爸爸在2016/7/22 11:50:00的发言:

换个思路,每次打开QQserver,就从表中提取最大的编号不就行了吗?

用SQLCompute:

 

http://www.foxtable.com/webhelp/scr/2897.htm

 

= DataTables("订单").SQLCompute("Max(编号)")


狐狸爸爸,能具体讲解下吗?这句代码要加在哪里?

另外,我现在编号使用的是笨方法,每个表的编号都是一个单独全局代码对应,能精简下吗?


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/4 9:18:00 [只看该作者]

比如在服务端的OpenQQ服务端事件ReceivedMessage,这样改改

Dim msg As String = e.Message
If msg.StartsWith(":f") AndAlso msg.EndsWith("f:") Then
    msg = msg.SubString(2, msg.Length - 4)
    If pdbhs.ContainsKey(msg) Then '如果存在这个类别的编号
        pdbhs(msg) = pdbhs(msg) + 1 '将该类别最大编号加1
    Else
        Dim bh As String = DataTables("订单").SQLCompute("Max(编号)","编号 like '" & msg & "%'")
        Dim bhz = 1
        If bh > "" Then CInt(bh.SubString(2))+1
        pdbhs.Add(msg,bhz)
    End If
    e.ReturnValue = pdbhs(msg) '将编号返回给客户端
End If

或者还有一种方法,不要用字典存储编号,直接加载整个编号表,然后通过查询编号表来取值和保存


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/4 9:23:00 [只看该作者]

做一个编号表。记录各个编号的最大值。如

 

表A   BH    5

表B   XL    10

 

这样,可以直接启用变量,直接在这个表里面查询存取数据,即可。


 回到顶部
总数 16 1 2 下一页