Foxtable(狐表)用户栏目专家坐堂 → 这个代码如何理解?


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

主题:这个代码如何理解?

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


加好友 发短信
等级:六尾狐 帖子:1344 积分:8860 威望:0 精华:0 注册:2020/11/4 22:15:00
这个代码如何理解?  发帖心情 Post By:2024/7/27 9:19:00 [只看该作者]

'不重复编号上传用,这里的用法比较简单,没有做复杂的编号规则处理'
Public Class BizCodeBuilder
    
    Private _codelock As New Object
    
    Public Sub New()
        
    End Sub
    
    Public Function GetNextCode(s_name As String, Optional s_prefix As String = Nothing) As String
        SyncLock _codelock '使用锁处理并发
        Dim db = HySql.DataBaseFactory.CreateDatabase("编号用户测试库")
        Dim Sql As String = CExp("select * from uSysBizCode where BizName='{0}'", s_name) '执行SQL
        Dim dt As system.data.DataTable = db.ExecuteDataSet(Sql).Tables(0)
        Dim dr As system.data.DataRow
        If dt.Rows.count = 0 Then
            dr = dt.NewRow()
            dr("BizName") = s_name 
            dr("MaxValue") = 1
            If String.IsNullOrEmpty(s_prefix) Then s_prefix = Date.now.ToString("mmss") & "BH"
            dr("Prefix") = s_prefix
            dr("Mark") = "yyyyMMdd"

问题一:s_name 和s_prefix是   Public Function GetNextCode(s_name As String, Optional s_prefix As String = Nothing) As String中变量?

 问题二:  Dim Sql As String = CExp("select * from uSysBizCode where BizName='{0}'", s_name) '
这个是动态查询, s_name是自定义?

问题三:在数据库调试select * from uSysBizCode有数据,select * from uSysBizCode where BizName='{0}查询无数据均空



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


加好友 发短信
等级:超级版主 帖子:109387 积分:556591 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/7/27 9:46:00 [只看该作者]

1、这种是.net里定义函数的参数,建议网上学习一下vb.net

2、s_name是调用这个函数需要传入的参数
比如调用:_BizCodeBuilder.GetNextCode("表A")
那么s_name的值就是“表A”

3、执行下面代码,把弹窗里的sql放到数据库里执行.
Dim Sql As String = CExp("select * from uSysBizCode where BizName='{0}'", s_name)
msgbox(sql)

CExp的用法多看看帮助吧:http://www.foxtable.com/webhelp/topics/2919.htm
假设s_name的值为“表A”,那么合成后的sql应该是
select * from uSysBizCode where BizName='表A'

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


加好友 发短信
等级:六尾狐 帖子:1344 积分:8860 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/7/27 10:03:00 [只看该作者]

3、执行下面代码,把弹窗里的sql放到数据库里执行.
Dim Sql As String = CExp("select * from uSysBizCode where BizName='{0}'", s_name)
msgbox(sql)

问题一:在全局代码,执行没有弹窗信息,在命令窗口,提示没有s_name
问题二:在实例在运行,检查数据库、字段,没有发问题,就是报错,提示from错,能否请老师,帮调试?

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


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

到命令窗口执行下面代码,看msgbox(sql)弹出什么

_BizCodeBuilder.GetNextCode("某个表名")

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


加好友 发短信
等级:六尾狐 帖子:1344 积分:8860 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/7/27 10:54:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq77.png
图片点击可在新窗口打开查看

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


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

客户端给服务端发送消息的代码不正确

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


加好友 发短信
等级:六尾狐 帖子:1344 积分:8860 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/7/27 11:03:00 [只看该作者]

问题1:客户端给服务端发送消息的代码不正确 ,1楼的代码,如何改或需补代码?
问题2:服务端和客户端,OpenQQ,在执行时,花时间比较长,是不是因有异常的原因?没有异常时,OpenQQ与不用OpenQQ速度一样?
[此贴子已经被作者于2024/7/27 11:07:38编辑过]

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


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

1、和1楼的代码没有一点关系,看客户端代码
2、OpenQQ与不用OpenQQ和速度没有直接关系,有异常会导致程序卡住

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


加好友 发短信
等级:六尾狐 帖子:1344 积分:8860 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/7/27 11:26:00 [只看该作者]

 客户端代码
Dim db = HySq-l.DataBaseFactory.CreateDatabase("编号用户测试库")

Dim Sq-l = "selec-t * from 订单;" '
Dim dt As system.data.DataTable = db.ExecuteDataSet(Sq-l).Tables(0)
dt.TableName = "订单"
Dim t As Table = e.Form.Controls("Table1").Table
t.datasource = dt.Copy 

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


加好友 发短信
等级:六尾狐 帖子:1344 积分:8860 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2024/7/27 11:30:00 [只看该作者]

Sele-ct e.DataCol.Name
    Case "日期"
        If e.DataRow.IsNull("日期") Then
            e.DataRow("编号") = Nothing
        Else
            Dim dr As DataRow = DataTables("网络编号窗口_Table2").Find("编号 is not null and 表名='订单'", "编号")
           
        
            If dr IsNot Nothing Then
                e.DataRow("编号") = dr("编号")
                dr.Delete
                DataTables("号表").save
            Else
                Dim rt As String = QQClient.SendWait(":f" & e.DataTable.Name & "f:")
                e.DataRow("编号") = rt
            End If
        End If
        
    Case "编号"
        If e.NewValue Is Nothing AndAlso e.OldValue IsNot Nothing Then 
            Dim dr1 As DataRow = DataTables("网络编号窗口_Table2").Find("表名 ='订单' and 编号 ='" & e.OldValue & "'")
        
            If dr1 Is Nothing Then
                dr1 = DataTables("网络编号窗口_Table2").AddNew
                dr1("表名") = "订单" 
                dr1("编号") = e.OldValue
                dr1.save
            End If
        End If 
End Sele-ct

 回到顶部
总数 52 1 2 3 4 5 6 下一页