Страница 1 из 1
Доступ к очереди из процедуры
Добавлено: 19 Июнь 2019, 21:33
Игорь Столяров
Привет всем !
Подскажите пожалуйста, а в чём может быть проблема c чтением очереди
из процедуры или это в принципе некорректный код ?
Код: Выделить всё
Map
GetMyQueue(*Queue,*String)
end
MyQueue Queue
Field String(3)
end
Code
MyQueue.Field = 'AAA'
Add(MyQueue,MyQueue.Field)
...
MyQueue.Field = 'AAA'
Get(MyQueue,MyQueue.Field)
If ErrorCode() then Message('Ошибка'). ! Всё пучком, ошибок нет
...
GetMyQueue(MyQueue,MyQueue.Field)
GetMyQueue Procedure(xQueue,xField)
Code
xField = 'AAA'
Get(xQueue,xField)
If ErrorCode() then Message('Ошибка'). ! Ошибка ! Почему ??!! :(
Доступ к очереди из процедуры
Добавлено: 19 Июнь 2019, 21:48
Дед Пахом
Вот это вот читает очередь по индексу, фактически получается Get(xQueue, 0).
Доступ к очереди из процедуры
Добавлено: 19 Июнь 2019, 22:04
Игорь Столяров
Дед Пахом писал(а): ↑19 Июнь 2019, 21:48читает очередь по индексу, фактически получается Get(xQueue, 0).
Судя по результату - да, поле воспринимается как значение.
Но ведь в процедуру передаётся ссылка на поле очереди …
Доступ к очереди из процедуры
Добавлено: 20 Июнь 2019, 0:12
vic7tar
Немножко переделал исходный пример:
Код: Выделить всё
PROGRAM
Map
GetMyQueue(*Queue, *any, long)
end
MyQueue Queue
Field String(3)
num long.
Code
MyQueue.Field = 'AAA' ; MyQueue.num = 1 ;Add(MyQueue)
MyQueue.Field = 'BBB' ; MyQueue.num = 2 ;Add(MyQueue)
MyQueue.Field = 'CCC' ; MyQueue.num = 3 ;Add(MyQueue)
MyQueue.Field = 'DDD' ; MyQueue.num = 4 ;Add(MyQueue)
! ...
MyQueue.Field = 'BBB'
Get(MyQueue,MyQueue.Field)
If ErrorCode() then Message('Ошибка'). ! Всё пучком, ошибок нет
! ...
GetMyQueue(MyQueue, MyQueue.Field , 1) ; message('Field=' & MyQueue.Field & ' num=' & MyQueue.num)
GetMyQueue(MyQueue, MyQueue.num , 2) ; message('Field=' & MyQueue.Field & ' num=' & MyQueue.num)
GetMyQueue Procedure(xQueue, xField, vub)
Code
case vub
of 1 ; xField = 'AAA'
of 2 ; xField = 4
end
Get(xQueue, who(xQueue, where(xQueue,xField)))
If ErrorCode() then Message('Ошибка').
Доступ к очереди из процедуры
Добавлено: 20 Июнь 2019, 6:13
Игорь Столяров
Наверно, всё-таки читать очередь по полю можно только при добавлении записей с сортировкой
по этому полю (или явным выполнением операции SORT(QUEUE,QUEUE.FIELD)) перед чтением ?
Идею с Get(xQueue, who(xQueue, where(xQueue,xField))) - понял, спасибо, проверю !
Если работает - то это решает вопрос.
Доступ к очереди из процедуры
Добавлено: 20 Июнь 2019, 11:05
kreator
У меня вот такой вопрос. А как процедура должна догадаться о структуре очереди? Предполагаю, что поскольку процедура ничего об этом не знает get идёт по пойнтеру.
Доступ к очереди из процедуры
Добавлено: 20 Июнь 2019, 11:13
Yufil
1. Для поиска по ключу вовсе не обязательно сортировать очередь.
2. Есть форма get с идентификатором строки
GET( MyQueue, '+MyQueue.Field' )
Доступ к очереди из процедуры
Добавлено: 20 Июнь 2019, 11:53
finsoftrz
Ага, если делать get по другим полям, отличным от физической сортировки, автоматически формируется альтернативная сортировка по этим полям. Что-то наподобии индекса. Но это с какой-то версии клариона стало. В clarion6 работает.