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

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Возникло недопонимание. Или у меня.
vic7tar , Вы в своём примере уберите операторы Bind. И увидите разницу.
We are hard at work… for you. :)
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

kreator писал(а): 16 Май 2019, 13:54Возникло недопонимание. Или у меня.
vic7tar , Вы в своём примере уберите операторы Bind. И увидите разницу.
Ну естественно будет ошибка. А зачем их убирать?
C10, Win10x64
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

А зачем масло масляное? BindExpression прекрасно работает без Bind.
We are hard at work… for you. :)
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

kreator писал(а): 16 Май 2019, 14:56BindExpression прекрасно работает без Bind.
А маленький примерчик можно?
C10, Win10x64
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

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

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) 
      share(clafile )	
      BindExpression('rezult', '(cf:field1 - cf:field2 + cf:field4) * ACOS(cf:field3)')  

      cf:field1 = 3
      cf:field2 = 2
      cf:field3 = 0
      cf:field4 = 1
  
      rez = Evaluate('rezult')
      Message('error = ' & ErrorCode() & chr(13) & 'rez = ' & rez)
    
    Return
Вот так попробуйте.
We are hard at work… for you. :)
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

kreator писал(а): 16 Май 2019, 15:36 . . .
! Bind(cf:rec)
! Bind('cffield4', cf:field4)
share(clafile )
BindExpression('rezult', '(cf:field1 - cf:field2 + cf:field4) * ACOS(cf:field3)')
if errorcode() ; message(errorcode()).
. . .
Код ошибки - 1011
C10, Win10x64
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Тогда вместо share поставьте:

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

Relate:clafile.SetOpenRelated()
Relate:clafile.Open 
We are hard at work… for you. :)
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

kreator писал(а): 16 Май 2019, 16:24Тогда вместо share поставьте:
КОД: ВЫДЕЛИТЬ ВСЁ

Relate:clafile.SetOpenRelated()
Relate:clafile.Open
kreator, если у Вас есть примерчик - покажите. Я привел пример на на чистом Clarion-e, без всяких методов.
Где и что мне там подправить, чтобы заработало без биндов?
C10, Win10x64
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Сделайте процедуру на ABC, можно просто Source. Поставьте опцию генерить рутины открытия/закрытия файлов. В самом тексте вызовите рутину открытия файлов и после этого BindExpression заработает.
Вообще непонятно, что Вы хотите понять? Получается - BindExpression сам по себе ничего не биндит. Полагается на Bind. Но в ABC, видимо, в методах открытия файлов/таблиц этот Bind явно прописан. Поэтому можно Bind явно не указывать.
vic7tar писал(а): 16 Май 2019, 16:55 Я привел пример на на чистом Clarion-e, без всяких методов.
Но вот это сильно! Clean & Elegant Language! :D
We are hard at work… for you. :)
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

Так и есть. В методе Open -> OpenServer - > BindFields -> BIND (SELF.Buffer)
Давно бы посмотрели и не спорили
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

kreator писал(а): 16 Май 2019, 17:48 vic7tar писал(а): ↑16 Май 2019, 16:55
Я привел пример на на чистом Clarion-e, без всяких методов.

Но вот это сильно! Clean & Elegant Language! :)
kreator писал(а): 16 Май 2019, 15:36 Code

! Bind(cf:rec)
! Bind('cffield4', cf:field4)
share(clafile )
BindExpression('rezult', '(cf:field1 - cf:field2 + cf:field4) * ACOS(cf:field3)')
А вот это ещё сильнее.
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

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

Сейчас расскажу такое, что не в каждом цирке за деньги покажут … ;)

В любом MDI окне делаем вставку:

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

  ! BIND variables
  ! [Priority 5800]
  
  BindExpression('BBB',1)
  BindExpression('CCC','BBB')  
После этого окно при закрытии (!!!) вылетает с GPF (в C11 - явно, в C63 - молча).
Evaluate('CCC') отрабатывает корректно, никаких кодов ошибок - всё чисто. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить