Foxtable(狐表)用户栏目专家坐堂 → DataColChanged按类别生成编码 怎么转换成sql语句写法呢?


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

主题:DataColChanged按类别生成编码 怎么转换成sql语句写法呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
DataColChanged按类别生成编码 怎么转换成sql语句写法呢?  发帖心情 Post By:2022/12/14 17:19:00 [只看该作者]

 

Select e.DataCol.Name
    Case
"类别"
       
If e.DataRow.IsNull("类别") Then
            e.
DataRow("编号") = Nothing
        Else
            Dim
lb As String = e.DataRow("类别")
            If
e.DataRow("编号").StartsWith(lb) = False '如果单据编号前缀不符
               
Dim max As String
               
Dim idx As Integer

                max = e.DataTable.Compute("Max(编号)","类别 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")) '取得该类别的最大编号
               
If max > "" Then '如果存在最大编号
                    idx = CInt(max.Substring(
2,3)) + 1 '获得最大编号的后三位顺序号,并加1
               
Else
                    idx =
1 '否则顺序号等于1
               
End If
                e.
DataRow("编号") = lb & Format(idx,"000")
            End
If
        End
If
End
Select

 

 

DataColChanged按类别生成编码  怎么转换成sql语句写法呢?


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(cnsjroom)DataColChanged按类别生成编码 怎...  发帖心情 Post By:2022/12/14 17:31:00 [只看该作者]

Dim lb As String = "DY"
Dim max As String
Dim idx As Integer
Dim cmd As New SQ LCommand
cmd.Conn ectio nNa me = "主数据源"
cmd.Comm andText = "Se lect * From 台账"
Dim dt As DataTable = cmd.ExecuteReader()
Dim dr As DataRow = dt.DataRows(dt.DataRows.Count - 1) '获得最后一行
output.show(dr("_Identify"))
max = dt.Compute("Max(编号)","分类代码 = '" & lb & "'And [_Identify] <> " & dr("_Identify"))  '取得该类别的最大编号
If max > "" Then '如果存在最大编号
    idx = CInt(max.Substring(2,3)) + 1 '获得最大编号的后三位顺序号,并加1
Else
    idx = 1 '否则顺序号等于1
End If
output.show(lb & Format(idx,"000"))

 

---------------------------
版本:2022.1.30.2
---------------------------
代码执行出错,错误信息:

 

System.InvalidCastException: 从字符串“ZBD”到类型“Integer”的转换无效。 ---> System.FormatException: 输入字符串的格式不正确。

   在 Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)

   在 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

   --- 内部异常堆栈跟踪的结尾 ---

   在 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

   在 UserCode.Test()
---------------------------
确定  
---------------------------

[此贴子已经被作者于2022/12/14 17:34:45编辑过]

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


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/14 17:33:00 [只看该作者]

dim sql as string = "select Max(编号) from 表A where 类别 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)dim sql as string = "select M...  发帖心情 Post By:2022/12/14 17:40:00 [只看该作者]

Dim lb As String = "DY"
Dim idx As Integer
Dim cmd As New  SQLCommand
cmd.Con ne ctio n Name = "主数据源"
cmd.CommandText = "Se lect * From 办案装备_管理台账"
Dim dt As DataTable = cmd.ExecuteReader()
Dim dr As DataRow = dt.DataRows(dt.DataRows.Count - 1) '获得最后一行
output.show(dr("_Identify"))
Dim max As String = "sele ct Max(编号) from 办案装备_管理台账 where 分类代码 = '" & lb & "' And [_Identify] <> " & dr("_Identify")
output.show(max)
If max > "" Then '如果存在最大编号
    idx = CInt(max.Substring(2,3)) + 1 '获得最大编号的后三位顺序号,并加1
Else
    idx = 1 '否则顺序号等于1
End If
output.show(lb & Format(idx,"000"))

 

输出得到:

8
sel ect Max(编号) from 办案装备_管理台账 where 分类代码 = 'DY' And [_Identify] <> 8


提示错误:

System.InvalidCastException: 从字符串“lec”到类型“Integer”的转换无效。 ---> System.FormatException: 输入字符串的格式不正确。

   在 Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)

   在 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

   --- 内部异常堆栈跟踪的结尾 ---

   在 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

   在 UserCode.Test()


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)dim sql as string = "select M...  发帖心情 Post By:2022/12/14 17:48:00 [只看该作者]

谢谢老师  按照老师指导 修正如下  问题得以解决!

 

Dim lb As String = "DY"
Dim idx As Integer
Dim cmd As New SQLCommand
cmd.Con nec tio nNa me = "主数据源"
cmd.CommandText = "Sel ect * From 办案装备_管理台账"
Dim dt As DataTable = cmd.ExecuteReader()
Dim dr As DataRow = dt.DataRows(dt.DataRows.Count - 1) '获得最后一行
output.show(dr("_Identify"))
cmd.CommandText = "sel ect Max(编号) from 办案装备_管理台账 where 分类代码 = '" & lb & "' And [_Identify] <> " & dr("_Identify")
Dim max As String
max = cmd.ExecuteScalar()
output.show(max)
If max > "" Then '如果存在最大编号
    idx = CInt(max.Substring(6,3)) + 1 '获得最大编号的后三位顺序号,并加1
Else
    idx = 1 '否则顺序号等于1
End If
output.show("BAZB" & lb & Format(idx,"000"))


 回到顶部