在写入数据库时​​,在不同时间插入记录的不同部分

时间:2015-12-19 22:08:42

标签: mysql delphi delphi-xe

我的问题是我在不同时间将数据写入同一记录中的单独字段,当我将数据添加到同一记录中的第二个设置字段时,我收到错误消息:

  

您必须在' tblWorkoutDetails.Username'中输入一个值。字段

尽管在之前的陈述中输入了这些数据。

此引用的表名为tblWorkoutDetails,其中包含以下字段:

  • WorkoutID
  • 用户名
  • WorkoutDate
  • 重量
  • 腰围

WorkoutID和用户名组成一个复合键。这个表与另一个表有关,我也以同样的方式写数据。

我使用以下代码将我的记录的第一部分(构成我的复合键的字段)写入数据库:

adotblWorkoutDetails['Username'] := Username;
adotblWorkoutDetails['WorkoutID'] := CurrentWorkout+1;
adotblWorkoutDetails.Post;
adotblWorkoutDetails.Refresh;

分配给字段的值只是变量,这完全可以执行。

填写该记录中其余字段的第二个语句如下:

adotblWorkoutDetails['WorkoutDate'] := Date;
adotblWorkoutDetails['Weight'] := Weight;
adotblWorkoutDetails['Waist'] := Waist;
adotblWorkoutDetails.Post;
adotblWorkoutDetails.Refresh;

程序在adotblWorkoutDetails.Post处出现上述错误。在尝试修复此问题时,我尝试重新分配必填字段,但是我收到错误消息,说我输入了重复数据。另外,当我在第一次操作中填写记录中的每个字段时(使用样本数据填写第二个数据条目的字段'保留')代码执行完美,代码也是如此写到另一张桌子。

我无法解决这个问题。如果您需要更多信息/截图,请询问。

此代码为我提供了必须在字段中输入值...'错误:

image

取消注释这两行会给我重复的数据错误:

image

1 个答案:

答案 0 :(得分:1)

我怀疑正在发生的事情是你的第二次操作错误地做了另一次插入而不是编辑,并且你得到的例外是< em> UserName 字段,将Required属性设置为True

这就像你描述的那样:

adotblWorkoutDetails.Insert;
adotblWorkoutDetails['Username'] := Username;
adotblWorkoutDetails['WorkoutID'] := CurrentWorkout+1;
adotblWorkoutDetails.Post;
//adotblWorkoutDetails.Refresh;    // Refresh is not required

adotblWorkoutDetails.Insert;
adotblWorkoutDetails['WorkoutDate'] := Date;
adotblWorkoutDetails['Weight'] := Weight;
adotblWorkoutDetails['Waist'] := Waist;
adotblWorkoutDetails.Post;
// adotblWorkoutDetails.Refresh;  // Again, not required

你应该做什么:

adotblWorkoutDetails.Insert;
adotblWorkoutDetails['Username'] := Username;
adotblWorkoutDetails['WorkoutID'] := CurrentWorkout+1;
adotblWorkoutDetails.Post;

// Locate the correct record using Locate or FindKey first, then 
adotblWorkoutDetails.Edit;
adotblWorkoutDetails['WorkoutDate'] := Date;
adotblWorkoutDetails['Weight'] := Weight;
adotblWorkoutDetails['Waist'] := Waist;
adotblWorkoutDetails.Post;

(作为将来的参考,从不将您的任何代码发布为图片;如果您需要发布代码,请复制并粘贴代码本身。Here's a list你不应该。