以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  sql代码生成关联获取id uuif 在主表新增一行后 附表同时新增多行 只有一行生成了对应的id递增 和UUID的获取 怎么修正不管明细新增多少条 对应的id都自动递增 uuid都获取主表的UUID呢?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=176625)

--  作者:cnsjroom
--  发布时间:2022/4/20 19:34:00
--  sql代码生成关联获取id uuif 在主表新增一行后 附表同时新增多行 只有一行生成了对应的id递增 和UUID的获取 怎么修正不管明细新增多少条 对应的id都自动递增 uuid都获取主表的UUID呢?

sql代码生成关联获取id uuif  在主表新增一行后 附表同时新增多行 只有一行生成了对应的id递增 和UUID的获取  怎么修正不管明细新增多少条 对应的id都自动递增 uuid都获取主表的UUID呢?

麻烦老师指导下  谢谢!

 

填报人信息中新增了如图红色部分内容44


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

亲属信息中新增了441 442  结果对应的442没有生成id 和获取uuid

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

 

 

当前代码如下:

新增后 内部函数【根据传入的表名 wzbm判断是否属于填报人信息表 如果是 就运行内部函数 填报人信息表新增后  反之就运行亲属信息表新增后】

Dim tbn As String = args(0)
Dim wzbm As String = args(1)
Dim tR123 As DataRow = DataTables("h5设置").Find("id = \'1\'")
Dim cmd As new SQ LCo mmand
cmd.Con necti onName = tr123("数据库名称")
Dim ckd As DataTable
Dim ckmx As DataTable
Dim cr As DataRow
Dim mr As DataRow
If tbn.Contains("填报人信息") Then
    Functions.Execute("填报人信息表新增后",wzbm)
Else
    Functions.Execute("亲属信息表新增后",wzbm)
End If

 


填报人信息表新增后内部代码:【根据传入的wzbm  去查找填报人信息表中 是否有  如果有就新增id 如果uuid为空就赋值uuid 然后保存】

Dim wzbm As String = args(0)
Dim tR123 As DataRow = DataTables("h5设置").Find("id = \'1\'")
Dim cmd As new S Q LCommand
cmd.Conn ectio nName = tr123("数据库名称")
Dim ckd As DataTable
Dim cr As DataRow
cmd.Comma ndText = "S e l e ct * From {填报人信息}" 
ckd = cmd.Execut eReader(True) \'记得将参数设置为True
cr=ckd.Find("外置编码=\'" & wzbm & "\'")
If cr IsNot Nothing Then
    cr("id") = ckd.Compute("Max(id)") + 1
    If cr("uuid")=Nothing  Then
        cr("uuid")=Guid.NewGuid.TOstring()
        ckd.Save()
    End If
End If

亲属信息表新增后内部函数代码:【根据传入的wzbm对应查找填报人信息中的uuid,如果不为空,就对应去找亲属信息表中是否存在wabm的行  如果存在就将亲属信息表中的uuid=填报人信息表中的UUID】

Dim wzbm As String = args(0)
Dim tR123 As DataRow = DataTables("h5设置").Find("id = \'1\'")
Dim cmd As new SQ LC om ma nd
cmd.Con ne ction Na me = tr123("数据库名称")
Dim ckd As DataTable
Dim ckmx As DataTable
Dim cr As DataRow
Dim mr As DataRow

cmd.Co mm an dTe xt = "S el e ct   * F rom {填报人信息}"
ckd = cmd.E xe c u teR eader(True)
cr=ckd.Find("外置编码=\'" & wzbm & "\'")
If cr IsNot Nothing Then
    cmd.Com man dText = "S el e ct *  F rom {亲属信息}"
    ckmx = cmd.E x ec uteReader(True)
    mr=ckmx.Find("外置编码=\'" & wzbm & "\'")
    If mr IsNot Nothing Then
        mr("uuid") = cr("uuid")

        mr("id") = ckmx.Compute("Max(id)") + 1
        ckmx.Save()
    End If
End If

 

[此贴子已经被作者于2022/4/20 19:35:57编辑过]

--  作者:有点蓝
--  发布时间:2022/4/21 8:52:00
--  
find查询,改为使用select:http://www.foxtable.com/webhelp/topics/0400.htm
--  作者:cnsjroom
--  发布时间:2022/4/21 16:37:00
--  回复:(有点蓝)find查询,改为使用select:http://w...

单个表的时候没有问题  如果传入多个tbn字符  一个wzbm的时候  提示:标准表达式中数据类型不匹配。 麻烦老师帮我看看  谢谢!

 

Dim tbn As String = args(0)
Dim wzbm As String = args(1)
If wzbm.Length>0 Then
Dim tR123 As DataRow = DataTables("h5设置").Find("id = \'1\'")
Dim cmd As new SQ LCom mand
cmd.Connecti onName = tr123("数据库名称")
Dim ckd As DataTable
Dim ckmx As DataTable
Dim cr As DataRow
Dim mr As List(Of DataRow)

cmd.Com mandText = "Se lect * From {填报人信息}"
ckd = cmd.ExecuteReader(True)
cr=ckd.Find("外置编码=\'" & wzbm & "\'")
cmd.Comma ndText = "Sele ct * From " & tbn
ckmx = cmd.ExecuteReader(True)
mr=ckmx.Select("外置编码=\'" & wzbm & "\'")
For Each m As DataRow In mr
    If m IsNot Nothing Then
        m("uuid") = cr("uuid")
        m("id") = ckmx.Compute("Max(id)") + 1
        ckmx.Save()
    End If
Next

End If

[此贴子已经被作者于2022/4/21 16:43:38编辑过]

--  作者:有点蓝
--  发布时间:2022/4/21 16:43:00
--  
调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错
--  作者:cnsjroom
--  发布时间:2022/4/21 16:53:00
--  回复:(有点蓝)调试技巧:http://www.foxtable.com/...

如果是第一个传进来的表tbn  可以运行完7 然后对应写值

如果是第二个传进来的表tbn内容  运行到第7  就出错  对应的表也无法写值

麻烦老师 指导一下 

tbn是传入多次  且wzbm只有一次  怎么实现wzbm 跟随多个tbn一起完成后续代码运行呢?

 

Dim tbn As String = args(0)
Dim wzbm As String = args(1)
If wzbm.Length>0 Then
    Dim tR123 As DataRow = DataTables("h5设置").Find("id = \'1\'")
    Dim cmd As new SQLCo mmand
    cmd.Connection Name = tr123("数据库名称")
    Dim ckd As DataTable
    Dim ckmx As DataTable
    Dim cr As DataRow
    Dim mr As List(Of DataRow)
    MessageBox.Show(0)
    cmd.Com mandText = "Sel ect * From 填报人信息"
    MessageBox.Show(1)
    ckd = cmd.ExecuteReader(True)
    cr=ckd.Find("外置编码=\'" & wzbm & "\'")
    MessageBox.Show(2)
    cmd.Comm andText = "Sele ct * From " & tbn
    MessageBox.Show(3)
    ckmx = cmd.ExecuteReader(True)
    MessageBox.Show(4)
    mr=ckmx.Select("外置编码=\'" & wzbm & "\'")
    MessageBox.Show(5)
    For Each m As DataRow In mr
        MessageBox.Show(6)
        If m IsNot Nothing Then
            MessageBox.Show(7)
            m("uuid") = cr("uuid")
            m("id") = ckmx.Compute("Max(id)") + 1
            ckmx.Save()
        End If
    Next
   
End If


--  作者:有点蓝
--  发布时间:2022/4/21 17:01:00
--  
http://www.foxtable.com/webhelp/topics/0396.htm,看示例三
--  作者:cnsjroom
--  发布时间:2022/4/22 2:07:00
--  回复:(有点蓝)http://www.foxtable.com/webhelp/to...

 

完善之后还是如此   标准表达式中数据类型不匹配。

Dim tbn As String = args(0)
Dim wzbm As String = args(1)
If wzbm.Length>0 Then  \'判断外置编码长度大于0时才运行下面的代码\'
    \'Dim tR123 As DataRow = DataTables("h5设置").Find("id = \'1\'")
    Dim cmd As new SQLCommand
    \'cmd.Connect ionN ame = tr123("数据库名称")
    cmd.Conn ectio nName = "user"
    Dim ckd As DataTable
    Dim ckmx As DataTable
    Dim cr As DataRow
    Dim mr As List(Of DataRow)
    cmd.Comm a ndText = "Sel ect * From 填报人信息"
    output.Show(tbn & 1)
    ckd = cmd.ExecuteReader(True)
    cr=ckd.Find("外置编码=\'" & wzbm & "\'")
    output.Show(tbn & 2)
    If cr IsNot Nothing Then
        If tbn.Contains("填报人信息") Then   \'如果tbn包含填报人信息表  不做操作
        Else  \'如果tbn不包含填报人信息表  操作如下   查找传入的tbn中符合外置编码=外置编码的所有集合  然后更新uuid 和id
            cmd.Comma ndT ext = "Se lect * From " & tbn
            output.Show(tbn & 3)
            ckmx = cmd.ExecuteReader(True)
            output.Show(tbn & 4)
            mr=ckmx.Select("外置编码=\'" & wzbm & "\'")
            output.Show(tbn & 5)
            For Each m As DataRow In mr
                output.Show(tbn & 6)
                If m IsNot Nothing Then
                    output.Show(tbn & 7)
                    m("uuid") = cr("uuid")
                    m("id") = ckmx.Compute("Max(id)") + 1
                    ckmx.Save()
                End If
            Next
        End If
    End If
End If


--  作者:有点蓝
--  发布时间:2022/4/22 8:42:00
--  
哪一句代码出错?
--  作者:cnsjroom
--  发布时间:2022/4/22 8:55:00
--  回复:(有点蓝)哪一句代码出错?

output.Show(tbn & 5)

部分表运行到5就执行不下去了  就会出错

部分表运行得到7  数据顺利写入系统


--  作者:有点蓝
--  发布时间:2022/4/22 9:14:00
--  
请上传实例测试