为什么 DefaultExpression 属性仅适用于 BDE?

发布于 2024-08-09 10:25:46 字数 79 浏览 6 评论 0原文

如何使用 MS Access 或 SQL Server 的 TField 的 DefaultExpression 属性,它似乎仅适用于 BDE。

How can I use DefaultExpression property for TField with MS Access or SQL Server, it seems to work only with BDE.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱给你人给你 2024-08-16 10:25:46

不是一个确切的答案,但它是一个解决方法。我只是从数据集的 AfterInsert 事件处理程序中调用类似下一个例程的内容:

procedure Flds_SetToDefExpr(const AFlds: array of TField);
var
  i : Integer;
begin
  for i := Low(AFlds) to High(AFlds) do
    with AFlds[i] do begin
      DataSet.Edit;
      if ( DefaultExpression='' ) then
        Clear
      else if HasOuterQuotes(DefaultExpression) then
        Value := RemoveOuterQuotes( DefaultExpression,True,False )
      else
        Value := StrToInt(DefaultExpression); //raises if not an integer!
    end;
end;

当然,您可以更改此例程以接受 TDataSet,它循环其字段并对所有字段执行相同的操作。

Not an exact answer, but it is a workaround. I just call something like the next routine from the AfterInsert event handler of the dataset:

procedure Flds_SetToDefExpr(const AFlds: array of TField);
var
  i : Integer;
begin
  for i := Low(AFlds) to High(AFlds) do
    with AFlds[i] do begin
      DataSet.Edit;
      if ( DefaultExpression='' ) then
        Clear
      else if HasOuterQuotes(DefaultExpression) then
        Value := RemoveOuterQuotes( DefaultExpression,True,False )
      else
        Value := StrToInt(DefaultExpression); //raises if not an integer!
    end;
end;

Ofcourse you could change this routine to accept a TDataSet, which loops it's fields and does the same to all fields.

浪推晚风 2024-08-16 10:25:46

我认为 DefaultExpression 属性不适用于 ADO,但我们使用 Vassil Nazarov 的 TBetterADODataSet 获得了解决方法,该方法使用以下内容:

Procedure TBetterADODataSet.DoOnNewRecord;
  Var i: Integer;
Begin
  FModifiedFields.Clear;
  For i:=0 To Pred(Fields.Count) Do With Fields[i] Do
    If DefaultExpression<>'' Then Try
      AsString:=DefaultExpression;
    Except
      On E: Exception Do
        ShowMessage(E.Message);
      End;
  Inherited DoOnNewRecord;
End;

您可以在此处免费获取它:TBetterADODataSet

I think that DefaultExpression property dosn't work with ADO, but we get workaround using TBetterADODataSet by Vassil Nazarov that use something like:

Procedure TBetterADODataSet.DoOnNewRecord;
  Var i: Integer;
Begin
  FModifiedFields.Clear;
  For i:=0 To Pred(Fields.Count) Do With Fields[i] Do
    If DefaultExpression<>'' Then Try
      AsString:=DefaultExpression;
    Except
      On E: Exception Do
        ShowMessage(E.Message);
      End;
  Inherited DoOnNewRecord;
End;

You can get it for free here: TBetterADODataSet

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文