以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]后台数据库修改代码出错(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=105027)

--  作者:yyzlxc
--  发布时间:2017/8/10 12:26:00
--  [求助]后台数据库修改代码出错(已解决)
一段代码,在代码增加数据源SCZD的前提下,生成后台表dt1,并与“器材清单”表结构一致,同一器材编号,通过比对“操作信息_时间”,如果不一致,就把dt1的该行数据删除,并从“器材清单”表复制一条相同编号的数据到后台数据库。

执行代码后出现错误提示,而后台数据库的数据也没有发生变化,如何解决,请各位老师指教,谢谢!!



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


代码如下:

If Connections.Contains("SCZD") = True Then
    Dim cmd1 As New SQLCommand
    cmd1.Conne  ction  Name = "SCZD"
    cmd1.CommandText = "Select * Fro m {器材清单}"
    Dim dt1 As DataTable = cmd1.ExecuteReader()
    For Each dr As DataRow In DataTables("器材清单").DataRows
        If dr.IsNull("器材编号") = False Then
            Dim pr As DataRow = dt1.Find("器材编号 = \'" & dr("器材编号") & "\'")
            If pr IsNot Nothing And dr("操作信息_时间") <> pr("操作信息_时间") Then
                \'替换行
                DataTables("器材清单").LoadFilter = ""
                DataTables("器材清单").Load
                \'删除编号(PC端)
                Dim cmd7 As New SQLCommand
                cmd7.Conne  ction  Name = "SCZD"
                cmd7.CommandText = "DELETE FRO M {器材清单} WHERE 器材编号 = \'" & dr("器材编号") & "\'"
                cmd7.ExecuteNonQuery()
                \'导出编号到PC端
                Dim cmd8 As new SQLCmmand
                cmd8.Conne  ction  Name = "SCZD"
                cmd8.CommandText = "SELECT * FRO M {器材清单} WHERE 器材编号 = \'" & dr("器材编号") & "\'"
                Dim dt8 As DataTable = cmd8.ExecuteReader(True)
                Dim f8 As New Filler
                f8.SourceTable = DataTables("器材清单") \'手持机
                f8.DataTable = dt8 \'PC端
                f8.Filter = "器材编号 = \'" & dr("器材编号") & "\'"
                f8.Fill() \'填充数据
                dt8.Save()
            End If
        End If
    Next
End If
[此贴子已经被作者于2017/8/10 15:42:01编辑过]

--  作者:有点甜
--  发布时间:2017/8/10 13:02:00
--  

看不懂你要做什么,删除行这样写

 

If Connections.Contains("SCZD") = True Then
    Dim cmd1 As New SQLCommand
    cmd1.ConnectionName = "SCZD"
    cmd1.CommandText = "Select * Fro m {器材清单}"
    Dim dt1 As DataTable = cmd1.ExecuteReader(True)
    For Each dr As DataRow In DataTables("器材清单").DataRows
        If dr.IsNull("器材编号") = False Then
            Dim pr As DataRow = dt1.Find("器材编号 = \'" & dr("器材编号") & "\'")
            If pr IsNot Nothing And dr("操作信息_时间") <> pr("操作信息_时间") Then
                pr.delete
            End If
        End If
    Next
    dt1.save
End If


--  作者:yyzlxc
--  发布时间:2017/8/10 15:41:00
--  
谢谢有点甜老师的指教,问题解决,代码修改如下,达到预期效果。再次感谢甜老师的指教!!

If Connections.Contains("SCZD") = True Then
    Dim cmd1 As New SQLCommand
    cmd1.ConnectionName = "SCZD"
    cmd1.CommandText = "Select * Fro m {器材清单}"
    Dim dt1 As DataTable = cmd1.ExecuteReader(True)
    For Each dr As DataRow In DataTables("器材清单").DataRows
        If dr.IsNull("器材编号") = False Then
            Dim pr As DataRow = dt1.Find("器材编号 = \'" & dr("器材编号") & "\'")
            If pr IsNot Nothing And dr("操作信息_时间") <> pr("操作信息_时间") Then
                \'替换行
                \'删除PC端编号行
                pr.delete
                dt1.save
                \'导出编号行到PC端
                Dim cmd8 As new SQLCommand
                cmd8.ConnectionName = "SCZD"
                cmd8.CommandText = "SELECT * FRO M {器材清单} WHERE 器材编号 = \'" & dr("器材编号") & "\'"
                Dim dt8 As DataTable = cmd8.ExecuteReader(True)
                Dim f8 As New Filler
                f8.SourceTable = DataTables("器材清单") \'手持机
                f8.DataTable = dt8 \'PC端
                f8.Filter = "器材编号 = \'" & dr("器材编号") & "\'"
                f8.Fill() \'填充数据
                dt8.Save()
            End If
        End If
    Next
End If

--  作者:有点甜
--  发布时间:2017/8/10 18:14:00
--  

新增行也不需要这样。你直接新增,如

 

Dim ndr As DataRow = dt1.AddNew

For Each dc As DataCol in dt1.DataCols

    ndr(dc.name) = dr(dc.name)

Next

dt1.Save


--  作者:yyzlxc
--  发布时间:2017/8/11 10:52:00
--  
正是想问的,又学了一招,谢谢有点甜老师的指教。