0

[anydac][DApt]-400.Fetch コマンドは [1] レコードではなく [0] をフェッチしました。考えられる理由: 更新テーブルに PK または行識別子がありません。レコードが別のユーザーによって変更/削除されました。

実行時

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();

の上

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 があります。また、プログラムはシングルスレッドであり、1 つのコピーのみが実行されているため、他の誰も更新していません。

SingleTestRunADQuery.MasterFields=run_id and IndexFieldNames=run_idすべてのテスト実行の概要を保持するテーブルの PK として設定しました。2 番目のテーブルには、テスト中に取得された測定値が保持され、run_id1 回のテスト実行のすべての測定値が示されます (このエラーを取り除くために、tiemstamp に PK を追加しただけですが、機能せず、削除できると思います)。

マスター データ ソースは次のとおりです。

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)

何が問題なのですか?


[更新] @mj2008 は、一部のフィールドの名前が異なることを指摘しています。これは歴史的な理由によるものです (私はまだ何かを試していますが、まだ変更したくありません)、これらはクエリによって適応されます:

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
4

3 に答える 3

3

TIMESTAMP フィールドを PRIMARY KEY として持つことが正しいかどうかはわかりません。UPDATEごとに自動的に変更されます。

于 2013-03-11T09:35:23.400 に答える