首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[AnyDac][DApt]-400但我的表确实有PK

[AnyDac][DApt]-400但我的表确实有PK
EN

Stack Overflow用户
提问于 2013-03-11 06:59:46
回答 4查看 5.7K关注 0票数 0

fetched命令代替1条记录,可能的原因是:update表没有PK或行标识符,记录已被另一个用户更改/删除,

执行时

代码语言:javascript
复制
SingleTestRunADQuery.Append();
SingleTestRunADQuery.FieldByName('run_id').Value := StartRecordingButton.Tag;
SingleTestRunADQuery.FieldByName('ph_value').Value := FloatToStr(ph_reading);
SingleTestRunADQuery.FieldByName('conductivity_value').Value := conductivity_reading;
SingleTestRunADQuery.FieldByName('cod_value').Value := cod_reading;
SingleTestRunADQuery.Post();

在……上面

代码语言:javascript
复制
mysql> describe measurements;
+------------------------+-----------+------+-----+-------------------+-------+
| Field                  | Type      | Null | Key | Default           | Extra |
+------------------------+-----------+------+-----+-------------------+-------+
| run_id                 | int(11)   | NO   | MUL | NULL              |       |
| measurement_time_stamp | timestamp | NO   | PRI | CURRENT_TIMESTAMP |       |
| ph                     | float     | NO   |     | NULL              |       |
| conductivity           | float     | NO   |     | NULL              |       |
| cod                    | float     | NO   |     | NULL              |       |
+------------------------+-----------+------+-----+-------------------+-------+
5 rows in set (0.03 sec)

如您所见,这个表确实有一个PK。此外,该程序是单线程的,只有一个副本正在运行,因此没有其他人正在更新。

我将SingleTestRunADQuery.MasterFields=run_id and IndexFieldNames=run_id设置为表的PK,它包含所有测试运行的摘要。第二个表保存了在测试期间所做的测量,run_id给出了一个测试运行的所有测量值(我只是在tiemstamp上添加了PK以消除此错误,但它没有工作,而且可以删除。

如果有帮助,下面是主数据源:

代码语言:javascript
复制
mysql> describe test_runs;
+------------------+-------------+------+-----+-------------------+----------------+
| Field            | Type        | Null | Key | Default           | Extra          |
+------------------+-------------+------+-----+-------------------+----------------+
| run_id           | int(11)     | NO   | PRI | NULL              | auto_increment |
| start_time_stamp | timestamp   | NO   |     | CURRENT_TIMESTAMP |                |
| end_time_stamp   | timestamp   | YES  |     | NULL              |                |
| description      | varchar(64) | YES  |     | NULL              |                |
+------------------+-------------+------+-----+-------------------+----------------+
4 rows in set (0.05 sec)

你知道怎么回事吗?

Update @ mj2008指出,有些字段有不同的名称。这是出于历史原因(我仍然在尝试一些东西&还不想改变),hoever,这些都是通过查询来调整的:

代码语言:javascript
复制
SELECT run_id,
       measurement_time_stamp, 
       ph as ph_value, 
       conductivity as conductivity_value, 
       cod as cod_value

FROM photo_catalytic.measurements

ORDER BY measurement_time_stamp DESC
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-11 09:35:23

我不确定将时间戳字段作为主键是否正确。它将在每一个更新上自动变化

票数 3
EN

Stack Overflow用户

发布于 2018-04-27 19:30:04

通过“字段编辑器”选项签出查询组件的TFields属性。检查“键字段”是否将ProviderFlags.pfInKey属性设置为true。

这一点今天适用于FireDac组件。

票数 1
EN

Stack Overflow用户

发布于 2021-12-03 19:09:24

您应该按照以下方式更改连接属性:尝试将UpdateOptions.RefreshMode设置为rmManual。

在这里输入图像描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15332885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档