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

数据库更新问题vb.net(2015),vb.net,Vb.net,我在用一种有点难以解释的特殊方式更新数据库时遇到困难,但我会尝试。一切都很好,因为这是我设置它的方式。但是现在我需要在for循环中每次更新一列一行的每个单元格中的值。循环将前面六个单元格的值相加,我希望每行(记录)的总和列中都有该总和。当前,sum列包含每行的错误sum,其思想是重新计算并覆盖旧的sum列值。现在我只是一个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个单元格。但是,当我这样设置它时,我删除了表中所有要写入的记录,并声明为fresh。但是代码甚至不会向表中添加新记录。我浪费了大量的时间试图弄明白为什么它不添加一个新的记录只是为了开始。所以我回到了这个代码。我的所有其他添加新记录的函数对于数据集中的另一个表和另一组表的另一个整个数据库都可以正常工作。直到现在才有问题。我所做的一件可能导致这个问题的改变是,我最初在两个不同的数据库中为每个表提供了一个单独的bindsource、dataset和tableadapter,但它很混乱,我对这些东西的工作原理有了更好的了解,并尝试将其简化。我没有使用一堆数据集,而是用我需要的所有表创建了一个数据集,然后在将文本框绑定到该数据集时,将创建一个新的bindingsource和tableadapter。这一切都很顺利,直到我处理了第二张表,当我丢弃整个表,用添加的新总数重写它之后,当它无法添加新记录时,一切都变得一团糟。我必须对第一个表做同样的事情,如果我记得当时正确的话,在代码运行后,它成功了,但遇到了一些小困难,我使用Access更正了这些问题

我希望我解释得足够好。我看到了一个类似问题的另一个解决方案,他们使用了类似.rows(I)(6)的类型,通过索引访问行和单元格,但我认为您不能通过绑定源、数据集和适配器来实现这一点。在这个解决方案中,这家伙使用的是绑定的dgv

有几件事我忘了。。。我的update命令似乎可以工作,但对于所有单元格,都有一个相同的值。更新增量集[Sum]=?天哪,使用VB6要容易得多。当我运行旧代码试图在删除所有记录后重写整个表时,发生了另一件奇怪的事情。。运行代码在Access中打开了表,结果一切都乱了。我会在Access中按日期使用,删除自动编号列,创建一个新的自动编号列并保存,然后所有的自动编号列都会再次出现混乱。每次都会不一样。最后,我得到了一个结果,我所要做的就是修复前10条记录,然后我尝试使用相同的方法处理第二个表,唯一的区别是不是6个单元格的总和,而是7个单元格的总和,并且相应地调整了额外列的索引。如果我想点别的,我会回来编辑的


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

我自己解决了这个问题。我花了四五天的时间来解决这个问题,昨天晚上当我发布我的困境时,我又回到了这个问题上。就在上次编辑之后,我找到了原因。我需要使用WHERE条件将更新限制为只更改我想要更改的记录。我不知道在没有这个条件的情况下,更新会对整个表执行。 无论如何,谢谢你不能帮我。哈哈,我真是个白痴!这是一个非常简单的解决方案,非常明显,但正如我在文章中所说,我对VB.Net还是很陌生