如何在BeforePost-TField数据类型中验证日期

时间:2019-07-17 16:40:57

标签: database validation delphi delphi-7

我正在尝试验证用户输入,以确保用户以DD/MM/YYYY格式输入日期,然后再将其发布(BeforePost事件)到数据库中的表,然后在它不是。

这是给Delphi-7的

这是我一直在使用的代码

var
dateAudition : TDateTime;
begin
try
DateAudition := tblAudition.Field[4];
except
Abort;
end;
end;

我遇到错误TDateTime and Tfield are incompatible

1 个答案:

答案 0 :(得分:1)

如果您的数据库字段(列)是DATEDATETIME,则您无需在OnBeforePost中做任何事情-该字段将不允许非日期值要存储。

您得到的错误是因为TDataSet.FieldsTField的数组,因此引用tblAudition.Fields[4]将导致TField,并且您的代码正在尝试将TField分配给您已声明为TDateTime的变量。

如果您的列不是DATEDATETIME,并且确实需要验证,则需要先将字段值(而不是字段本身)转换为正确的类型。这样的事情应该起作用:

var
  dateAudition: TDateTime;
begin
  try
    dateAudition := StrToDate(tblAudition.Fields[4].AsString);
  except
    Abort;  // This is wrong, BTW. It cancels without telling the user why
  end;
end;