0

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

4

2 回答 2

0

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

于 2009-11-02T10:51:42.307 回答
0

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

于 2009-11-11T16:04:43.643 回答