Queue - help
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Hello All,
Есть две очереди, очередь заголовков документов и очередь содержимого документов. Необходимо удалить текущий документ и его содержимое, но позиция в очереди сбивается.
Что смог сделать, так это создать такую-же рабочую очередь и через нее скопировать все, кроме удаляемого документа.
Может есть более лучшее решение?
--
Best regards,
avssoft mailto:avssoft@SoftHome.net
Написал: ClaList(2)
Есть две очереди, очередь заголовков документов и очередь содержимого документов. Необходимо удалить текущий документ и его содержимое, но позиция в очереди сбивается.
Что смог сделать, так это создать такую-же рабочую очередь и через нее скопировать все, кроме удаляемого документа.
Может есть более лучшее решение?
--
Best regards,
avssoft mailto:avssoft@SoftHome.net
Написал: ClaList(2)
Здравствуйте
Вопрос мутный, но если я правильно понял, то...
Когда добавляешь запись в дочернюю, то
qChild.eParentID = qParent.eID
для всех дочерних записей
Удаляешь примерно так:
или так
Первый вариант быстрее.
В общем всё точно также, как для файлов (таблиц). )
Сергей - chusha@mail333.com ; chusha@hotbox.ru
Написал: ClaList(2)
Вопрос мутный, но если я правильно понял, то...
Код: Выделить всё
qParent queue
eID signed
....
end
qChild queue
eParentID signed
end
Когда добавляешь запись в дочернюю, то
qChild.eParentID = qParent.eID
для всех дочерних записей
Удаляешь примерно так:
Код: Выделить всё
i# = 1
loop
get(qChild, i#)
if errorcode() then break end
if qChild.eParentID = qParent.eID
delete(qChild)
cycle
end
i# += 1
end
Код: Выделить всё
loop
qChild.eParentID = qParent.eID
get(qChild, qChild.eParentID)
if errorcode() then break end
delete(qChild)
end
В общем всё точно также, как для файлов (таблиц). )
Сергей - chusha@mail333.com ; chusha@hotbox.ru
Написал: ClaList(2)
Пишу в догонку. Clarion for DOS 3.102. Провел такой тест
Например я знаю, что в документе 5 строк и знаю, что первая строка 7. Строки документа идут подряд. Такой код работает
Этот код в принципе всегда работать будет или возможны варианты.
--
Best regards,
avssoft
Написал: ClaList(2)
Например я знаю, что в документе 5 строк и знаю, что первая строка 7. Строки документа идут подряд. Такой код работает
Код: Выделить всё
i = 7 ! position() первой строки документа
loop 5 times ! удаляем пять строк
get(qt,i)
if errorcode()
stop(error())
end
delete(qt)
if errorcode()
stop(error())
end
end
--
Best regards,
avssoft
Написал: ClaList(2)
Здесь не видно инкремента переменной i, или ты забыл его написать?
Поэтому у тебя оно не срабатывает.
Теперь совет - снабди записи очередей уникальными кодами документов, тогда удаление, да и добавление, у тебя будут идти на ура.
--
Best regards,
Anatoly mailto:warthog@belarusbank.minsk.by
Написал: ClaList(2)
Поэтому у тебя оно не срабатывает.
Теперь совет - снабди записи очередей уникальными кодами документов, тогда удаление, да и добавление, у тебя будут идти на ура.
--
Best regards,
Anatoly mailto:warthog@belarusbank.minsk.by
Написал: ClaList(2)
Привет!
Я в таких случаях использую третий вариант:
Мне оно кажется проще и надёжнее. Только не забывай про Dispose дочерней очереди.
Александр Агеев (aageev@satren.ru)
Написал: ClaList(2)
Я в таких случаях использую третий вариант:
Код: Выделить всё
qChild queue, Type
eParentID signed
end
qParent queue
QC &QueueChild
....
end
! Добавление
Clear(qParent)
qParent.QC &= New(qChild)
...
Add(qParent)
Loop источникСтрок
Clear(qParent.QC)
...
Add(qParent.QC)
.
! Удаление
Free(qParent.QC)
Dispose(qParent.QC)
Delete(qParent)
Александр Агеев (aageev@satren.ru)
Написал: ClaList(2)
Как раз этот код работает. Если сделать инкримент i, то удалятся записи через одну.Здесь не видно инкремента переменной i, или ты забыл его написать?
Так и есть номер документа.Поэтому у тебя оно не срабатывает.
Теперь совет - снабди записи очередей уникальными кодами документов, тогда удаление, да и добавление, у тебя будут идти на ура.
--
Best regards,
avssoft
Написал: ClaList(2)
Из общих соображений - крайне неочевидно на какую запись должен быть позиционирован указатель после удаления текущей записи.
Так что в любом случае очевиднее и надежнее все же принудительно позиционировать:
--
Best regards,
Vadym mailto:vadim@softcreator.com
ICQ: 8230875
Написал: ClaList(2)
Так что в любом случае очевиднее и надежнее все же принудительно позиционировать:
Код: Выделить всё
LOOP I = RECORDS(Q) TO 1 BY -1
GET(Q,I)
DELETE(Q)
END
Best regards,
Vadym mailto:vadim@softcreator.com
ICQ: 8230875
Написал: ClaList(2)
Сталкивался с этим не раз, обходил просто и без хлопот. Завел поле скажем byte в очереди хозяина и когда удаляю, то делаю эту переменную 1 и put. Очередь естественно не сбивается. Далее вызываю перерисовку очереди только с полем 0. Если документов
немного, а как правило это так, то работает все быстро. Подчиненная очередь не волнует абсолютно.
Seawolf
немного, а как правило это так, то работает все быстро. Подчиненная очередь не волнует абсолютно.
Seawolf