Страница 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, который биндит поля списка при открытии - делаете вручную: ;)

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

  Bind(cf:rec)

Интересные странности 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 в объявлении структуры файла имеете ввиду?