Интересные странности BindExpression

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 15 Май 2019, 16:36

Написал вот такую ахинею:

Код: Выделить всё

xb  long(999), bindable('xbb', xb, 123, file, driver, pre, create, Google)
а компилятору по барабану. Кто-нибудь растолкует?
C10, Win10x64

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 15 Май 2019, 17:09

Похоже на баг в компиляторе.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 15 Май 2019, 17:35

vic7tar писал(а):
15 Май 2019, 16:36
а компилятору по барабану
А ему действительно по барабану, т.к. для переменной простого типа BINDABLE (и видимо все его параметры) - игнорируется.

СПРАВКА:
Атрибут BINDABLE объявляет структуры GROUP, QUEUE, FILE или VIEW, составляющие переменные которых, можно использовать в динамических выражениях во время выполнения программы.
«V» значит Вендетта !

Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 15 Май 2019, 17:41

У long-a есть такой атрибут?
C10, Win10x64

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

Интересные странности BindExpression

Сообщение finsoftrz » 15 Май 2019, 17:42

Для кьюшки результат аналогичный.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 15 Май 2019, 19:15

vic7tar писал(а):
15 Май 2019, 17:41
У long-a есть такой атрибут?
У LONG нет такого атрибута, но тут проблема в том, что у BINDABLE нет параметров. Это просто атрибут. ;)
«V» значит Вендетта !

Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 15 Май 2019, 23:00

Игорь Столяров писал(а):
28 Апрель 2019, 8:51
Т.е. складывается такое интересное впечатление, что для BindExpression() привязка наименований
полей таблицы выполняется только при её открытии … Так и должно быть ?
Что-то смотрю и смотрю и не могу понять - а что не работает, что не так в связке Bind...?
C10, Win10x64

kreator
✯ Ветеран ✯
Сообщения: 3334
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Интересные странности BindExpression

Сообщение kreator » 15 Май 2019, 23:28

vic7tar писал(а):
15 Май 2019, 23:00
Что-то смотрю и смотрю и не могу понять - а что не работает, что не так в связке Bind...?
Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой. А вот Bind сработает как надо.
We are hard at work… for you. :)

Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 15 Май 2019, 23:30

kreator писал(а):
15 Май 2019, 23:28
Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой.
Нулевой - это выдаст ошибку?
C10, Win10x64

kreator
✯ Ветеран ✯
Сообщения: 3334
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Интересные странности BindExpression

Сообщение kreator » 16 Май 2019, 11:09

vic7tar писал(а):
15 Май 2019, 23:30
kreator писал(а):
15 Май 2019, 23:28
Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой.
Нулевой - это выдаст ошибку?
Да. В начале топика это описано. Повторяю, проблема в том, что Bind работает по-другому и ошибки нет. Скорее, не проблема, а фича. Ожидается, что Bind и BindExpression будут работать подобно. Ан нет!
We are hard at work… for you. :)

Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 16 Май 2019, 12:19

Игорь Столяров писал(а):
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
C10, Win10x64

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 16 Май 2019, 12:32

vic7tar писал(а):
16 Май 2019, 12:19
Вот пример без всякого открытия:
Абсолютно верно. Потому, что Вы всю работу метода ABC, который биндит поля списка при открытии - делаете вручную: ;)

Код: Выделить всё

  Bind(cf:rec)
«V» значит Вендетта !

Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 16 Май 2019, 12:45

Игорь Столяров писал(а):
29 Апрель 2019, 19:20
Есть в какой-то таблице Tovar поле Tov:Number. Если посмотреть описание - то получается, что имя "Tov:Number" объявлено
всегда и везде … Но это не так. Получается, что имя "Tov:Number" действует только после открытия файла Tovar в потоке.
Так всё-таки, что не так с биндами?
C10, Win10x64

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Интересные странности BindExpression

Сообщение Игорь Столяров » 16 Май 2019, 13:07

vic7tar писал(а):
16 Май 2019, 12:45
Так всё-таки, что не так с биндами?
С биндами - всё прекрасно ! ;)
Есть непонимание описания, по которому все поля таблиц являются как бы предварительно забинденными.

Но на самом деле это реализуется методом открытия файлов в каждом потоке, и как следствие, до открытия списков -
поля таблиц недоступны для Evaluate / BindExpression.

Это надо вручную, если тупо без разбора всё подряд - то так как Вы показали в примере. ;)
«V» значит Вендетта !

Аватара пользователя
vic7tar
Старожил
Сообщения: 218
Зарегистрирован: 09 Февраль 2017, 20:12

Интересные странности BindExpression

Сообщение vic7tar » 16 Май 2019, 13:20

Игорь Столяров писал(а):
16 Май 2019, 13:07
Есть непонимание описания, по которому все поля таблиц являются как бы предварительно забинденными.
Откуда идёт это непонимание, где в описании намёк на предварительную привязку? Не атрибут ли Bindable в объявлении структуры файла имеете ввиду?
C10, Win10x64

Ответить