数据库更新问题vb.net(2015)

时间:2017-06-11 12:48:36

标签: vb.net

我无法以特定的方式更新数据库,这有点难以解释,但我会尝试。一切都很好,因为它是我设置它的方式。但是现在我需要在For循环中一次一行地更新每个单元格中的值。循环添加了前六个单元格的值,我想在每一行(记录)的Sum列中得到该总和。目前sum列包含每行的错误总和,其思路是重新计算并覆盖旧的sum列值。现在我只是vb.net的新手,我的代码对大多数人来说可能看起来非常业余,所以请耐心等待。 我正在使用具有适当数据集和表适配器的绑定源,我发布的代码就是我现在所处的位置。这段代码的作用是获取正确的值来覆盖sum单元格,但是在For循环的每次迭代之后它都不会将它写入数据库。相反,它会遍历所有3482条记录,并将最后一行计算写入每行和列单元格。例如,最后一行的总和为40,sum列中的每个单元格的值都为40。现在我已经尝试将更新部分移动到第一个for循环中的不同位置,它几乎做同样的事情或更糟。以下是我的代码,后面有跟进。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim z As Int16, x As Int16, y As Int16, PosX As Int16, PosY As Int16, Result As Int16, SumResult As Int16

    All649_BS.MoveFirst()
    Deltas_BS.MoveFirst()

    For z = 1 To All649_BS.Count

        SumResult = All649_BS.Current(2)

        For x = 3 To 7
            y = x - 1
            PosX = All649_BS.Current(x)
            PosY = All649_BS.Current(y)
            Result = PosX - PosY
            SumResult = SumResult + Result

                            'Deltas_BS.Current(x) = Result
            DeltaSum.Text = SumResult

        Next
        All649_DataSet.AcceptChanges()
        Deltas_BS.Current(9) = SumResult
        Try

            Validate()
            Deltas_BS.EndEdit()
            DeltasTableAdapter.Update(All649_DataSet)

            Messages.Text = ("Update successful")

        Catch ex As Exception

            Messages.Text = ("Update failed")

        End Try

        All649_BS.MoveNext()
        Deltas_BS.MoveNext()
        SumResult = 0

    Next

End Sub

这是我首先尝试的代码,当不能工作时决定编写代码来基本上重写每行(记录)所有3482个单元格。但是当我这样设置时,我删除了表中的所有记录以写入并说明新鲜。但是,代码甚至不会向表中添加新记录。我浪费了一大堆时间试图弄清楚为什么它不会为了开始而添加新记录。所以我回到了这段代码。我添加新记录的所有其他函数适用于数据集中的另一个表,另一个表用于另一组表。从来没有遇到任何问题。我做了一件可能导致这个问题的事情是我最初为两个不同数据库中的每个表都有一个单独的bindsource,dataset,tableadapter,但是它很混乱,我有点了解这些东西是如何运作的,并试图简化它们。我没有使用一堆数据集,而是使用了我需要的所有表格,然后在将文本框绑定到该数据集时创建一个新的bindingsource和tableadapter。这一切都很顺利,直到我解决了第二张桌子,并且在我放弃整张桌子以重新添加新的总和之后,它们都不会添加新记录。我必须对第一个表执行相同的操作,如果我记得正确的话,它在代码运行后遇到了一些小问题,我使用Access更正了。

我希望我解释得这么好。我看到了类似问题的另一种解决方案,他们使用类似.rows(i)(6)类型通过索引访问行和单元格,但我认为你不能用绑定源和数据集和适配器做到这一点。在那个解决方案中,那个人正在使用绑定的dgv。

我忘记了几件事......我的更新命令似乎有效,但对于所有单元格都有一个相同的值。 UPDATE Deltas SET [Sum] =?上帝使用VB6这么容易。当我在删除所有记录后运行旧代码试图重写整个表时,发生了另一件奇怪的事情.Ran代码在Access中打开了表,它全都乱了。我会在Access中按日期进行操作并删除自动编号列并创建一个新的并保存,它将全部返回到无序的自动编号列,再次出现重击。而且每次都会有所不同。我终于得到了一个结果,我所要做的就是修复前10个记录,然后我尝试使用相同的方法进行第二个表只有差异而不是6个单元的总和它是7并且索引相应地调整了额外的柱。如果我想到别的什么,我会回到这里编辑。

是的我回来了...还有一件事是我在3到7圈的下一行使用断点并继续直到它退出然后检查总是好的sumresult然后步骤直到结束验证/更新在那里停止并查看tableadapter内容以查找当前行,并且该值写入并更正为列,但数据库更新将最后一个sumresult(40)写入sum列中的所有单元格。所以我需要找出为什么更新无法更新每行中的那个单元格,因为它逐步通过行循环器。

1 个答案:

答案 0 :(得分:0)

我自己想通了。我在解决这个问题上花了4到5天的时间,并在昨晚发布我的困境时回到了它。在我上次编辑之后,我找到了原因。我需要使用WHERE条件将更新限制为我想要更改的记录。我不知道更新在没有这个条件的情况下完成整个表。 无论如何,谢谢你无法帮助我。哈哈,我真是个白痴!这样一个简单的解决方案,非常明显,但就像我在帖子中说的那样,我对VB.Net来说还是很新的