2、在服务端的AfterOpenProjet事件中编写代码:
Dim
dt
As
DataTable
Dim
cmd
As
New
SQLCommand
cmd.C = "数据源名称"
cmd.CommandText = "S/elect
类别, Max(编号) As 编号 From {产品} Group By 类别"
dt = cmd.ExecuteReader
flbhs.Clear()
For
Each
dr
As
DataRow
In
dt.DataRows
Dim
qz
As
String = dr("类别") '编号前缀
Dim
bh
As
String =
dr("编号")
Dim
id
As
Integer
If bh.Length = 4 Then
bh
= bh.SubString(1)
If
Integer.TryParse(bh,id) Then
flbhs.Add(qz, id)
End
If
End
If
Next
上述代码在启动项目后,用SQL语句提取每个类别的最大编号,将其整数部分存储在字典flbhs中。
3、在服务端的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
flbhs.ContainsKey(msg)
Then
'如果存在这个类别的编号
flbhs(msg) = flbhs(msg) + 1
'将该类别最大编号加1
Else
flbhs.Add(msg,1) '如果是这个列表的首次编号,则编号等于1
End
If
e.ReturnValue = flbhs(msg) '将编号返回给客户端
End
If
客户端的设计
选择客户端项目对应的表,在其DataColChanged事件中加上代码:
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
String =
QQClient.SendWait(":f"
& bh
& "f:")
Dim id
As
Integer
msgbox(rt) '加了这个显示问题
当服务器和客户端都重新打开后,客户端第一次增加行时,收到服务器返回的 rt 是空值,直就到第二个流程,继续再增行,那就开始正常有数据了
If rt > "" Then
If Integer.TryParse(rt,id) Then
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
想问一下,这个问题能避免吗?
而且服务器的数据提取也不是最大值,请问是那里改得不对吗