Database 当所有行具有相同数据时,在datatabase中引用行(用于更新)

Database 当所有行具有相同数据时,在datatabase中引用行(用于更新),database,vb.net,sql-update,dbf,Database,Vb.net,Sql Update,Dbf,我有一个发票数据数据库。有些发票有多个数据相同的项目。由于数据库(DBF)没有ID列,我不知道如何在发票中选择一个项目(行)来更改/更新数据,因为当我更新1个项目时,所有其他行(与我正在更改的行具有相同的数据)也会更改 Dim query As String = "UPDATE INV SET DATE= ?, NAME=?, " _ & "IMD=?, JM=?, WHERE INVOICENUM=? AND PRICE

我有一个发票数据数据库。有些发票有多个数据相同的项目。由于数据库(DBF)没有ID列,我不知道如何在发票中选择一个项目(行)来更改/
更新
数据,因为当我更新1个项目时,所有其他行(与我正在更改的行具有相同的数据)也会更改

   Dim query As String = "UPDATE INV SET DATE= ?, NAME=?, " _
                              & "IMD=?, JM=?, WHERE INVOICENUM=? AND PRICE=? AND TAX=?"
我是否可以从DBF中引用一行,这样其他具有相同数据的行就不会受到影响?我如何才能做到这一点

。。。没有ID列

那么如何识别记录呢?无论您做什么,实际更新的结构都是相同的:

UPDATE table SET values WHERE identity
你有表,你有值,你需要一个标识。它不一定是一个名为
ID
的列,也不一定是一个自动递增的
IDENTITY
列,它可以是一个或多个列的任意组合,这些列将一条记录定义为与其他记录唯一不同的记录

这是你的数据,你告诉我们。你如何区分一个记录和另一个记录


如果您无法区分一条记录和另一条记录,那么您的数据模型将从根本上被破坏。您需要先修复它,然后才能继续。如果你能分辨出一个记录和另一个记录,那么你就有了答案。
WHERE
子句可以像您希望/需要的那样复杂,它只需要能够识别记录。

我想说的是,在构成自然键的列上放置一个唯一的索引是一个很好的做法。@DaniEll:我想进一步说,自然键最好是主键。它已经有了一个唯一的索引:)没有任何类型的标识列,DBF文件来自我的旧软件,我无法与编程人员联系。软件是在数据库中制作的,功能齐全。我正试图用VB.NET添加一些,只是为了加快一些进程。我将发票数据放在一个列表视图中,并从中选择一个项目,这样我就可以看到我试图更改的数据。当我在发票中有相同的项目时,问题就开始了,我希望用DBFfile行号作为标识信息来解决这个问题。@Jovica:正如我所说,它不需要是
标识
列。选择特定记录时,如何识别所需的记录?在更新同一记录时,您将使用相同的标识。数据库的历史记录与此无关。您可以唯一标识记录,也可以不唯一标识记录。如果不能,那么数据从根本上就被破坏了。如果你问“当我不能唯一地识别一条记录时,我如何才能唯一地识别它?”那么这个问题不仅无法回答,而且完全是愚蠢的。@Jovica:那么听起来问题在于数据没有任何方法来识别记录。因此,数据从根本上被破坏了。没有解决办法。我们无法提出解决办法。你有一些自然不同但无法识别的记录。唯一的解决办法是添加一些方法来识别它们。如果不允许您这样做,则无法添加您试图添加的功能,因为它需要一种识别记录的方法。