Comment puis-je utiliser la propriété DefaultExpression pour TField avec MS Access ou SQL Server, il semble fonctionner uniquement avec BDE.Pourquoi la propriété DefaultExpression ne fonctionne qu'avec BDE?
0
A
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.
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