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

Delphi 为什么DefaultExpression属性仅适用于BDE?,delphi,bde,Delphi,Bde,如何将DefaultExpression属性用于MS Access或SQL Server的TField,它似乎只适用于BDE。这不是一个确切的答案,但它是一个解决方法。我只是从数据集的AfterInsert事件处理程序中调用类似于下一个例程的东西: procedure Flds_SetToDefExpr(const AFlds: array of TField); var i : Integer; begin for i := Low(AFlds) to High(AFlds) do

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

这不是一个确切的答案,但它是一个解决方法。我只是从数据集的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,它循环它的字段并对所有字段执行相同的操作。

我认为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;

您可以在这里免费获得它:

谢谢MvdH好主意,但还有另一种简单的方法,只需将CursorLocation设置为clUseServer for TaToTable,并从服务器中为字段提供默认值,但我想使用DefaultExpression属性,因为它除了SQL表达式之外,还有其他主体解决方案吗?