Foxtable(狐表)用户栏目专家坐堂 → 遍历行与列赋值 得到列名值为空?怎么解决呢?


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

主题:遍历行与列赋值 得到列名值为空?怎么解决呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
遍历行与列赋值 得到列名值为空?怎么解决呢?  发帖心情 Post By:2022/10/22 11:09:00 [只看该作者]

 遍历行与列赋值  得到列名值为空?怎么解决呢?

 

在同一个表中  当提供单位或个人为多值时,将多值进行拆分生成多行数据  同时对应的其它列的值  全部相同  当前代码只实现了将多值拆分成多行,其它列没有对应复制过来

 
此主题相关图片如下:21.png
按此在新窗口浏览图片

 

当前代码为:【经判断系红色部分代码出错,得不到对应的列名并赋值】
cmd.Com mandText =  "sel ect * from {调取证据通知书} where 提供单位或个人='" & e.Values("证据提供者") & "'"
If cmd.Execut eScalar > 0 Then    '查找到数据
    For Each s As String In str.split(",")    '对传入的值进行拆分
        If s.Length>0 Then  '如果拆分的值大于0
            Dim dt1 As DataTable = cmd.ExecuteReader()
            Dim bb1 As DataRow
            cmd.CommandText =  "sel ect * from {调取证据通知书} where 提供单位或个人='" & s & "'"
            Dim dt As DataTable = cmd.ExecuteReader(True)
            Dim bb As DataRow
            If dt.DataRows.Count>0 Then   '如果S数据存在,暂时不做操作
               
            Else   '如果s数据不存在,则新增数据
                For Each Row As DataRow In dt1.DataRows     '遍历dt1的所有行
                    For Each Col As DataCol In dt1.datacols   '遍历dt1的所有列
                        bb=dt.AddNew          '新增dt表行
                        If Col.name="提供单位或个人" Then
                            bb("提供单位或个人")=s   '指定提供单位或个人为s数据
                        Else
                            bb(Col.name)=bb1(Col.name)  '其他列直接对应列名赋值相应的数据
                        End If
                    Next
                Next
            End If
            dt.save
        End If
    Next
    cmd.CommandText =  "del ete from {调取证据通知书} where 提供单位或个人='" & e.Values("证据提供者") & "'"
    cmd.ExecuteReader
End If


[此贴子已经被作者于2022/10/22 11:16:32编辑过]

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


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

贴出完整代码

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)贴出完整代码  发帖心情 Post By:2022/10/22 11:42:00 [只看该作者]

谢谢老师  已解决赋值问题  但是没有解决为什么要保存e.Values("证据提供者")条件的数据……

 

A,B,C这行不需要保存   想实现直接传e.Values("证据提供者")参过来后,就自动将当前所有 内容自动赋值

 

Public Sub form304_save2_Ajax(rq as Request)
Dim e As RequestEventArgs = rq.e
Dim cmd As SQL Com mand = rq.cmd
Dim str As String =e.Values("证据提供者")
cmd.Comm andText =  "sel ect * from {调取证据通知书} where 提供单位或个人='" & e.Values("证据提供者") & "'"
If cmd.ExecuteScalar > 0 Then    '查找到数据
    For Each s As String In str.split(",")    '对传入的值进行拆分
        If s.Length>0 Then  '如果拆分的值大于0
   Dim dt1 As DataTable = cmd.ExecuteReader(True)
            Dim bb1 As DataRow = dt1.DataRows(0)
            cmd.CommandText =  "sel ect * from {调取证据通知书} where 提供单位或个人='" & s & "'"
            Dim dt As DataTable = cmd.ExecuteReader(True)
            Dim bb As DataRow
            If dt.DataRows.Count>0 Then   '如果S数据存在,暂时不做操作
               
            Else   '如果s数据不存在,则新增数据 
    bb=dt.AddNew         ' 新增dt表行
                'For Each Row As DataRow In dt.DataRows     '遍历dt1的所有行
                    For Each Col As DataCol In dt.datacols   '遍历dt1的所有列                     
                        If Col.name="提供单位或个人" Then
                            bb("提供单位或个人")=s   '指定提供单位或个人为s数据
                        Else  If Col.name="guid" Then
                            bb("guid")=guid.newguid.tostring()   '指定提供单位或个人为s数据
                        Else     
                            bb(Col.name)=bb1(Col.name)  '其他列直接对应列名赋值相应的数据
                        End If
                    Next
                'Next
            End If
            dt.save
        End If
    Next
    cmd.CommandText =  "dele te from {调取证据通知书} where 提供单位或个人='" & e.Values("证据提供者") & "'"
    cmd.ExecuteReader
End If
 rq.e.WriteString(rq.msg.ToString)
End Sub

[此贴子已经被作者于2022/10/22 11:52:00编辑过]

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


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

调试
           If dt.DataRows.Count>0 Then   '如果S数据存在,暂时不做操作
               msgbox(s & "数据存在")
            Else   '如果s数据不存在,则新增数据 
    bb=dt.AddNew         ' 新增dt表行
                'For Each Row As DataRow In dt.DataRows     '遍历dt1的所有行
                    For Each Col As DataCol In dt.datacols   '遍历dt1的所有列   
               msgbox(Col.name)                  
                        If Col.name="提供单位或个人" Then
                            bb("提供单位或个人")=s   '指定提供单位或个人为s数据
                        Else  If Col.name="guid" Then
                            bb("guid")=guid.newguid.tostring()   '指定提供单位或个人为s数据
                        Else     
               msgbox("bb1=" & bb1(Col.name))    
                            bb(Col.name)=bb1(Col.name)  '其他列直接对应列名赋值相应的数据    
               msgbox("bb=" & bb(Col.name))   
                        End If
                    Next
                'Next
            End If

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)调试        &n...  发帖心情 Post By:2022/10/23 9:09:00 [只看该作者]

Public Sub form304_save2_Ajax(rq as Request)
Dim e As RequestEventArgs = rq.e
Dim cmd As SQLCom mand = rq.cmd
msg(e.Values("证据提供者"))
Dim str As String =e.Values("证据提供者")
cmd.CommandText =  "sel ect * from {调取证据通知书} where 提供单位或个人='" & e.Values("证据提供者") & "'"
If cmd.ExecuteScalar > 0 Then    '查找到数据
    For Each s As String In str.split(",")    '对传入的值进行拆分
        If s.Length>0 Then  '如果拆分的值大于0
   Dim dt1 As DataTable = cmd.ExecuteReader(True)
            Dim bb1 As DataRow = dt1.DataRows(0)
            cmd.CommandText =  "se lect * from {调取证据通知书} where 提供单位或个人='" & s & "'"
            Dim dt As DataTable = cmd.ExecuteReader(True)
            Dim bb As DataRow
            If dt.DataRows.Count>0 Then   '如果S数据存在,暂时不做操作
               
            Else   '如果s数据不存在,则新增数据 
    msg(1)
    bb=dt.AddNew         ' 新增dt表行
                'For Each Row As DataRow In dt.DataRows     '遍历dt1的所有行
                    For Each Col As DataCol In dt.datacols   '遍历dt1的所有列
'      msg(Col.name)
'      msg(bb(Col.name))
'      msg(bb1(Col.name))
                        If Col.name="提供单位或个人" Then
                            bb("提供单位或个人")=s   '指定提供单位或个人为s数据
                        Else  If Col.name="guid" Then
                            bb("guid")=guid.newguid.tostring()   '指定提供单位或个人为s数据
                        Else  If Col.name="文号" or Col.name="文书编号"Then
                            bb("文号") =nothing 
       bb("文书编号")=nothing
                        Else    
        msgbox("bb1=" & bb1(Col.name)) 
                            bb(Col.name)=bb1(Col.name)  '其他列直接对应列名赋值相应的数据
        msgbox("bb=" & bb(Col.name))    为空……
                        End If
                    Next
                'Next
            End If
            dt.save
        End If
    Next
    cmd.CommandText =  "dele te from {调取证据通知书} where 提供单位或个人='" & e.Values("证据提供者") & "'"
    cmd.ExecuteReader
End If
 rq.e.WriteString(rq.msg.ToString)
End Sub

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


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

1、bb1也是空的:
2、有其它表事件代码影响了

        msgbox("bb1=" & bb1(Col.name)) 这里有没有值
                            bb(Col.name)=bb1(Col.name)  '其他列直接对应列名赋值相应的数据
        msgbox("bb=" & bb(Col.name))    为空……

 回到顶部