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

Clarion, Clarion 7

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

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

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

Сообщение vic7tar »

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

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

xb  long(999), bindable('xbb', xb, 123, file, driver, pre, create, Google)
а компилятору по барабану. Кто-нибудь растолкует?
C10, Win10x64
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4552
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Похоже на баг в компиляторе.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

СПРАВКА:
Атрибут BINDABLE объявляет структуры GROUP, QUEUE, FILE или VIEW, составляющие переменные которых, можно использовать в динамических выражениях во время выполнения программы.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

У long-a есть такой атрибут?
C10, Win10x64
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4552
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Для кьюшки результат аналогичный.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

vic7tar писал(а): 15 Май 2019, 17:41У long-a есть такой атрибут?
У LONG нет такого атрибута, но тут проблема в том, что у BINDABLE нет параметров. Это просто атрибут. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

Игорь Столяров писал(а): 28 Апрель 2019, 8:51Т.е. складывается такое интересное впечатление, что для BindExpression() привязка наименований
полей таблицы выполняется только при её открытии … Так и должно быть ?
Что-то смотрю и смотрю и не могу понять - а что не работает, что не так в связке Bind...?
C10, Win10x64
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

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

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

Сообщение vic7tar »

kreator писал(а): 15 Май 2019, 23:28Если Вы примените BindExpression к полям таблиц/файлов до их открытия, то результат будет нулевой.
Нулевой - это выдаст ошибку?
C10, Win10x64
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

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

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

Сообщение 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
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

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

  Bind(cf:rec)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

Игорь Столяров писал(а): 29 Апрель 2019, 19:20Есть в какой-то таблице Tovar поле Tov:Number. Если посмотреть описание - то получается, что имя "Tov:Number" объявлено
всегда и везде … Но это не так. Получается, что имя "Tov:Number" действует только после открытия файла Tovar в потоке.
Так всё-таки, что не так с биндами?
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

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

Это надо вручную, если тупо без разбора всё подряд - то так как Вы показали в примере. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

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