Position: Integer;
Свойство Position возвращает номер конечной позиции элемента, являющегося источником ошибки в выражении.
Для выполнения примера предполагается наличие формы, расположенных на ней двух кнопок с наименованиями «Button1» и «Button1» и компонента ExpressionEdit с наименованием «ExpressionEdit1». В репозитории имеется таблица с идентификатором «Table_1». Последнее поле таблицы является вычисляемым.
Class TestForm: Form
Button1: Button;
Button2: Button;
ExpressionEdit1: ExpressionEdit;
MB: IMetabase;
Tab: ITable;
Field: ITableField;
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Begin
MB := MetabaseClass.Active;
Tab := MB.ItemById("Table_1").Edit As ITable;
Field := Tab.Fields.Item(Tab.Fields.Count - 1);
ExpressionEdit1.Expression := Field.Expression;
End Sub Button1OnClick;
Sub Button2OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Expr: IExpression;
ErrInfo: IExpressionErrorInfo;
Begin
Expr := ExpressionEdit1.Expression;
Expr.ThrowException := False;
Expr.AsString := ExpressionEdit1.Formula;
If Not Expr.Valid Then
ErrInfo := Expr.ErrorInfo;
WinApplication.ErrorBox("При разборе выражения возникла ошибка: "
+ ErrInfo.ErrorMessage + "." + #10 + #13 + "Позиция: " + ErrInfo.Position.ToString);
Else
Field.Expression.AsString := Expr.AsString;
(Tab As IMetabaseObject).Save;
End If;
End Sub Button2OnClick;
End Class TestForm;
При выполнении формы, после нажатия кнопки «Button1» компонент «ExpressionEdit1» будет подключен к выражению вычисляемого поля таблицы. После редактирования выражения в компоненте «ExpressionEdit1», при нажатии на кнопку «Button2» будет осуществляться проверка корректности введенного выражения для использования в вычисляемом поле таблицы. Если выражение корректно, то оно будет обновлено в вычисляемом поле таблицы и таблица будет сохранена. Если введенное выражение не корректно, то на экран будет выведено сообщение, содержащее текст и номер позиции, в которой возникла ошибка при разборе выражения. При некорректном выражении исключительная ситуация платформы возникать не будет.
См. также: