Как я могу использовать свойство DefaultExpression для TField с MS Access или SQL Server, похоже, оно работает только с BDE.
Почему свойство DefaultExpression работает только с BDE?
Ответы (2)
Не точный ответ, но это обходной путь. Я просто вызываю что-то вроде следующей процедуры из обработчика событий 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, который зацикливает свои поля и делает то же самое со всеми полями.
person
MvdH
schedule
02.11.2009
Спасибо, MvdH, хорошая идея, но есть еще один простой способ: просто установите для CursorLocation значение clUseServer для TADOTable и задайте для полей значение по умолчанию с сервера, но я хотел бы использовать свойство DefaultExpression, потому что оно, кроме SQL-выражений, имеет какое-либо решение для тела?
- person Kachwahed; 03.11.2009
Я думаю, что свойство DefaultExpression не работает с ADO, но мы находим обходной путь, используя 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
person
Kachwahed
schedule
11.11.2009