Foxtable(狐表)用户栏目专家坐堂 → sql代码生成关联获取id uuif 在主表新增一行后 附表同时新增多行 只有一行生成了对应的id递增 和UUID的获取 怎么修正不管明细新增多少条 对应的id都自动递增 uuid都获取主表的UUID呢?


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

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

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
sql代码生成关联获取id uuif 在主表新增一行后 附表同时新增多行 只有一行生成了对应的id递增 和UUID的获取 怎么修正不管明细新增多少条 对应的id都自动递增 uuid都获取主表的UUID呢?  发帖心情 Post By:2022/4/20 19:34:00 [只看该作者]

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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/4/21 8:52:00 [只看该作者]

find查询,改为使用select:http://www.foxtable.com/webhelp/topics/0400.htm

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)find查询,改为使用select:http://w...  发帖心情 Post By:2022/4/21 16:37:00 [只看该作者]

单个表的时候没有问题  如果传入多个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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/4/21 16:43:00 [只看该作者]

调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)调试技巧:http://www.foxtable.com/...  发帖心情 Post By:2022/4/21 16:53:00 [只看该作者]

如果是第一个传进来的表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


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


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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)http://www.foxtable.com/webhelp/to...  发帖心情 Post By:2022/4/22 2:07:00 [只看该作者]

 

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

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


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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/4/22 8:42:00 [只看该作者]

哪一句代码出错?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)哪一句代码出错?  发帖心情 Post By:2022/4/22 8:55:00 [只看该作者]

output.Show(tbn & 5)

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

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


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


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

请上传实例测试

 回到顶部