Первый фрагмент неверен. Вы вводите строку в TXSDecimal, что недопустимо. TXSDecimal - это класс, для которого вам нужен экземпляр. Если у вас есть экземпляр, вы можете использовать его свойства и методы для установки значения.
Второй фрагмент, по-видимому, неполный. Если вы получили нарушение прав доступа, скорее всего, потому что Foo.limit не назначен правильный TXSDecimal.
Итак, вы можете создать новый экземпляр, назначить его для Foo.limit и присвоить ему значение с плавающей запятой, например, так:
Foo.limit := TXSDecimal.Create;
Foo.limit.AsBcd := Edit1.Text;
Вы можете назначить строку для BCD, как указано выше, и она автоматически преобразует ее в числовое значение. Присвоение вызовет исключение (не нарушение прав доступа, а другой вид), если строка не содержит допустимого числа.
Это преобразование будет учитывать настройки вашей системы, поэтому, если вы настроены на использование запятой в качестве десятичного разделителя, вы не можете ввести число, которое использует точку.