Страница 3 из 4
Интересные странности BindExpression
Добавлено: 15 Май 2019, 16:36
vic7tar
Написал вот такую ахинею:
Код: Выделить всё
xb long(999), bindable('xbb', xb, 123, file, driver, pre, create, Google)
а компилятору по барабану. Кто-нибудь растолкует?
Интересные странности BindExpression
Добавлено: 15 Май 2019, 17:09
finsoftrz
Похоже на баг в компиляторе.
Интересные странности BindExpression
Добавлено: 15 Май 2019, 17:35
Игорь Столяров
vic7tar писал(а): ↑15 Май 2019, 16:36а компилятору по барабану
А ему действительно по барабану, т.к. для переменной простого типа BINDABLE (и видимо все его параметры) - игнорируется.
СПРАВКА:
Атрибут BINDABLE объявляет структуры GROUP, QUEUE, FILE или VIEW, составляющие переменные которых, можно использовать в динамических выражениях во время выполнения программы.
Интересные странности BindExpression
Добавлено: 15 Май 2019, 17:41
vic7tar
У long-a есть такой атрибут?
Интересные странности BindExpression
Добавлено: 15 Май 2019, 17:42
finsoftrz
Для кьюшки результат аналогичный.
Интересные странности BindExpression
Добавлено: 15 Май 2019, 19:15
Игорь Столяров
vic7tar писал(а): ↑15 Май 2019, 17:41У long-a есть такой атрибут?
У LONG нет такого атрибута, но тут проблема в том, что у BINDABLE нет параметров. Это просто атрибут.
Интересные странности BindExpression
Добавлено: 15 Май 2019, 23:00
vic7tar
Игорь Столяров писал(а): ↑28 Апрель 2019, 8:51Т.е. складывается такое интересное впечатление, что для BindExpression() привязка наименований
полей таблицы выполняется только при её открытии … Так и должно быть ?
Что-то смотрю и смотрю и не могу понять - а что не работает, что не так в связке Bind...?
Интересные странности BindExpression
Добавлено: 15 Май 2019, 23:28
kreator
vic7tar писал(а): ↑15 Май 2019, 23:00
Что-то смотрю и смотрю и не могу понять - а что не работает, что не так в связке Bind...?
Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой. А вот Bind сработает как надо.
Интересные странности BindExpression
Добавлено: 15 Май 2019, 23:30
vic7tar
kreator писал(а): ↑15 Май 2019, 23:28Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой.
Нулевой - это выдаст ошибку?
Интересные странности BindExpression
Добавлено: 16 Май 2019, 11:09
kreator
vic7tar писал(а): ↑15 Май 2019, 23:30
kreator писал(а): ↑15 Май 2019, 23:28Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой.
Нулевой - это выдаст ошибку?
Да. В начале топика это описано. Повторяю, проблема в том, что Bind работает по-другому и ошибки нет. Скорее, не проблема, а фича. Ожидается, что Bind и BindExpression будут работать подобно. Ан нет!
Интересные странности BindExpression
Добавлено: 16 Май 2019, 12:19
vic7tar
Игорь Столяров писал(а): ↑29 Апрель 2019, 19:20Есть в какой-то таблице Tovar поле Tov:Number. Если посмотреть описание - то получается, что имя "Tov:Number" объявлено
всегда и везде … Но это не так. Получается, что имя "Tov:Number" действует только после открытия файла Tovar в потоке.
При чём тут открытие файла? С биндами всё нормально, и обрабатываются они правильно.
Вот пример без всякого открытия:
Код: Выделить всё
test Procedure()
clafile File, Driver('TOPSPEED'), Pre(cf), Name('clafile.tps'), Create, Bindable
rec Record
field1 Long
field2 Long, Name('Bind_field2')
field3 Long
field4 Long ..
rez Real
Code
Bind(cf:rec)
Bind('cffield4', cf:field4)
BindExpression('rezult', '(cf:field1 - Bind_field2 + cffield4) * ACOS(cf:field3)')
cf:field1 = 3
cf:field2 = 2
cf:field4 = 1
rez = Evaluate('rezult')
Message('error = ' & ErrorCode() & chr(13) & 'rez = ' & rez)
Return
Интересные странности BindExpression
Добавлено: 16 Май 2019, 12:32
Игорь Столяров
vic7tar писал(а): ↑16 Май 2019, 12:19Вот пример без всякого открытия:
Абсолютно верно. Потому, что Вы всю работу метода ABC, который биндит поля списка при открытии - делаете вручную:
Интересные странности BindExpression
Добавлено: 16 Май 2019, 12:45
vic7tar
Игорь Столяров писал(а): ↑29 Апрель 2019, 19:20Есть в какой-то таблице Tovar поле Tov:Number. Если посмотреть описание - то получается, что имя "Tov:Number" объявлено
всегда и везде … Но это не так. Получается, что имя "Tov:Number" действует только
после открытия файла Tovar в потоке.
Так всё-таки, что не так с биндами?
Интересные странности BindExpression
Добавлено: 16 Май 2019, 13:07
Игорь Столяров
vic7tar писал(а): ↑16 Май 2019, 12:45Так всё-таки, что не так с биндами?
С биндами - всё прекрасно !
Есть непонимание описания, по которому все поля таблиц являются как бы предварительно забинденными.
Но на самом деле это реализуется методом открытия файлов в каждом потоке, и как следствие, до открытия списков -
поля таблиц недоступны для Evaluate / BindExpression.
Это надо вручную, если тупо без разбора всё подряд - то так как Вы показали в примере.
Интересные странности BindExpression
Добавлено: 16 Май 2019, 13:20
vic7tar
Игорь Столяров писал(а): ↑16 Май 2019, 13:07Есть непонимание описания, по которому все поля таблиц являются как бы предварительно забинденными.
Откуда идёт это непонимание, где в описании намёк на предварительную привязку? Не атрибут ли Bindable в объявлении структуры файла имеете ввиду?