我正在开发一个使用ODBC从所有类型的数据库读取/写入的程序,而我在解决问题的解决方案时遇到问题,因为该问题可能会在数据库,但我们只想更新一个实例。
例如,假设用户连接到具有下表的某个ODBC数据库:
first_name|last_name
--------------------
person |man
person |man
triangle |man
在我们的应用程序中,所有这三行都会显示在UI中,您可以单独编辑每一行。问题是数据库没有我们的应用知道的主键列,并且我们不允许向用户添加自己的数据库添加任何内容,因此我们无法做到添加主键列,因为它可能会破坏其数据库。由于没有主键列,因此在执行UPDATE
时,知道要更新哪一行的唯一方法是执行WHERE
子句来比较行中每列的值。所以像这样:
UPDATE table SET first_name = something WHERE first_name = person AND last_name = man;
这不会起作用,因为它会更新所有具有匹配名和姓的行,我们希望它只更新其中一行。无论哪个更新都无关紧要,这样可以简化事情,希望如此。
我确实发现this solution似乎很有希望,但我不确定如何修改它以使用没有主键列的数据库。
我目前正在使用SQLite来测试查询,因此如果可能的话,所发布的任何解决方案都应使用该语言。一旦我确认它有效,我将把它转换为使用ODBC。
答案 0 :(得分:0)
对未知数据库引擎使用ODBC,您可能只能使用读/写游标和定位更新来执行此操作。这样,即使存在其他相同的行,也可以更新单行。请注意,不确定每个数据库引擎的ODBC驱动程序是否支持此类更新,甚至根本没有唯一索引的表更新。