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
Гость
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)