2009-11-02 15 views

Répondre

0

Je pense que la propriété DefaultExpression travail dosn't avec ADO, mais nous obtenons solution à l'aide TBetterADODataSet par Vassil Nazarov qui utilisent quelque chose comme:

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; 

Vous pouvez l'obtenir gratuitement ici: TBetterADODataSet

0

Pas une réponse exacte, mais c'est une solution de contournement. Je viens d'appeler quelque chose comme la routine suivante du gestionnaire d'événements AfterInsert de l'ensemble de données:

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; 

vous pourriez changer Ofcourse cette routine d'accepter un TDataSet, qui boucle ses champs et fait la même chose à tous les champs.

+0

Merci MvdH bonne idée, mais il existe un autre moyen facile, il suffit de définir CursorLocation à clUseServer pour TADOTable et donner la valeur par défaut des champs du serveur, mais je voudrais utiliser la propriété DefaultExpression car elle contient également des expressions SQL. – Kachwahed