以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  这个代码如何理解?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=192857)

--  作者:lin98
--  发布时间: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}查询无数据均空



--  作者:有点蓝
--  发布时间: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
--  发布时间: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错,能否请老师,帮调试?

--  作者:有点蓝
--  发布时间:2024/7/27 10:30:00
--  
到命令窗口执行下面代码,看msgbox(sql)弹出什么

_BizCodeBuilder.GetNextCode("某个表名")

--  作者:lin98
--  发布时间:2024/7/27 10:54:00
--  

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

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

--  作者:有点蓝
--  发布时间:2024/7/27 11:20:00
--  
1、和1楼的代码没有一点关系,看客户端代码
2、OpenQQ与不用OpenQQ和速度没有直接关系,有异常会导致程序卡住
--  作者:lin98
--  发布时间: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
--  发布时间: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