有关adoTable的问题

4
我希望能够确保,如果一个表格(在这种情况下是adotHours)进入编辑或插入模式并且用户点击保存按钮但意外地将相同的值发布到Hours列下,则会出现一个消息请再输入另一个值。否则,如果用户输入不同的值,则使用另一段代码。
我尝试了以下方法,但它不起作用 - 无论用户输入什么,消息请再输入另一个值都会出现。
procedure TfrmLabour.Button6Click(Sender: TObject);
var 
  i,j, t: String;
begin
  Edit1.Text := adotHours['Hours'];
  j :=  Edit1.Text;
  adotHours.Post;
  Edit2.Text := adotHours['Hours'];
  t := Edit2.Text;
  if t = j then 
    showmessage ('Please enter another value')
  else begin.....
end;

虽然我知道这可能不是最优雅的代码,但我的想法是,一旦值通过连接的DBgrid发布到adotHoursHours,如果它与之前的值不同,t将成为新值,因此adotHours['Hours']将不同,并允许else begin。有什么建议吗?

3个回答

7

尝试将输入的值与OldValue属性进行比较。

adotHours.FieldByName('Hours').OldValue

2
在 beforepost 事件中检查 OldValue,比 OP 带有所有额外赋值等更容易且代码更少。 - John Easley

2
如果字段值未被修改,adotHours.FieldByName('Hours').NewValue 将会是 Unassigned。在这种情况下,OldValue 将包含(未修改的)值。

0
你可以使用类似于这样的代码:
if adotHours.FieldByName('ItemName').OldValue = 
  adotHours.FieldByName('ItemName').Value then
  Showmessage(Please enter another value');

但对我来说,最好将此代码放在事件adotHours.BeforePost中,并且如果值相同,则调用abort过程 - 在其他情况下,当用户更改值并单击网格上的其他行时,它会导致数据集中的发布,并且您可能会错过在按钮单击中检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接