以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  遍历行与列赋值 得到列名值为空?怎么解决呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=181007)

--  作者:cnsjroom
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2022/10/22 11:21:00
--  
贴出完整代码
--  作者:cnsjroom
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间: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
--  发布时间:2022/10/23 9:09:00
--  回复:(有点蓝)调试        &n...
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

--  作者:有点蓝
--  发布时间: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))    为空……