我正在通过C#应用程序中的VFP OleDB提供程序访问Visual FoxPro表(DBF文件) . VFP中是否有等效的 UPDATE TOP
(MS SQL)?
这是我目前的查询:
UPDATE HM_LIST
SET
HM_DATE=DATE(2014,5,22) ,
HM_STATION="CM_PC" ,
HM_TIME="17:06" ,
HM_USER="TEST"
WHERE
HM_STATION=''
AND HM_TIME=''
AND HM_USER=''
问题是,所有行都与我的参数匹配 . 但我想只更新其中一个匹配的行 .
没有Primary_Key . 我不能用 INSERT
.
Table
4 回答
如果您在Foxpro中运行上述查询,由于您正在使用的WHERE条件,每个行都将在您声明时更新 .
当您指定“Where column1 =''”时,每行都将生效 . 尝试在条件中指定值,例如“Where column1 ='somevalue'”或“Where EMPTY(column1)”
使用WHERE子句如下:
有了奥列格的暗示,我找到了缺少主键的解决方法 .
但它需要两个Querys
首先选择匹配行的 Record Number 别名
RECNO
.现在读取Result的第一行(这是行的“id”)
将其保存为变量(
int row_id
),并在WHERE
仅在以下行的UPDATE
查询之后放置:"RECNO() ="+row_id
示例:
Remarks: RECNO的类型为
Decimal
,因此您必须使用GetDecimal(0)
(参见示例代码)一般来说, this is what primary keys are for. 无论索引与否,都应该有一个唯一标识每条记录的字段,并允许您将更新定位到该特定记录而不是整个集合 .
如果该字段没有罢工#2,那么设计非常糟糕,应该放弃,就在你无法插入新行之后 . 除非这是一个理论练习,否则有更好的工具来完成你所追求的任何事情 .
也就是说,对于特定的例子,这是一个罕见的例子,其中与SQL的混乱实际上使你的生活更加艰难 .
FoxPro的核心是 not 一种基于集合的语言,如SQL . 相反,它想要处理整个集合,并且由于某种原因仍然在FoxPro中进行编程,你可以通过拥抱xBase并运行它来轻松实现这一目标 .