• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Перебор в переборе

  • Автор темы MMN
  • Дата начала
M

MMN

Столкнулся с проблемой перебора документов во вьюхе
Код:
	Set viewX = CS_GetCurrentDb.GetView( "EmployeeByNameWork" )
Set docX = viewX.GetFirstDocument
While Not(docX Is Nothing)			 
Set view=CS_GetCurrentDb.GetView("(AllPerson)")
Set telDoc=view.GetFirstDocument	

While Not telDoc Is Nothing

Set telDoc=view.GetNextDocument(telDoc)
Wend		

Set docX = viewX.GetNextDocument(docX)
Wend

вылетает на строке
Set docX = viewX.GetNextDocument(docX)
The Document is not in View EmployeeByNameWork

если из кода выкинуть
While Not telDoc Is Nothing

Set telDoc=view.GetNextDocument(telDoc)
Wend
то все проходит отлично.
В чем проблема ?? Перебор в переборе разве нельзя делать ??

Переменные вроде не пересекаются.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
куда правильнее писать так
Код:
do Until doc Is Nothing
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Может во втором цикле docX меняется и пропадает из вида?
Я бы получил view.AllEntries и ходил бы по ним.

Кстати, зачем в цикле Set view=CS_GetCurrentDb.GetView("(AllPerson)")?
 
H

HAL

... и зачем в цикле Set telDoc=view.GetFirstDocument ?
 
T

turumbay

согласен с Medevic:
колитесь, что происходит с docX во вложенном цикле и зачем переполучаете вьюху "(AllPerson)"
P.S. telDoc из второго цикла не может в какой-то момент указывать на тот же документ, что и docX?
 
O

Omh

Автоапдейты поотрубай у view

Да тут наверно док меняется, перестаёт отображаться во view и на GetNextDocument вылетает.
Брать view в цикле - сииила!
 
M

MMN

до переполучения дело не доходит, на второй круг не уходит, для спокойствия всех могу вытащить наверх.
на самом деле это кусок из функции, когда стояла функция тоже вылетало, соответственно был найден проблемный кусок и вставлен в этот перебор.
Код:
Set viewX = CS_GetCurrentDb.GetView( "EmployeeByNameWork" )
Set view=CS_GetCurrentDb.GetView("(AllPerson)")
Set docX = viewX.GetFirstDocument
While Not docX Is Nothing

Set telDoc=view.GetFirstDocument	

While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend		

Set docX = viewX.GetNextDocument(docX)
Wend

никак не повлияло
 
M

MMN

колитесь что с доком делаете!
в том то и дело что ничего не делаю )) по логике ошибки я понимаю что не находит документ
база тестовая, я в ней один
как только убираем перебор
While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend
в котором даже нет принта, все начинает работать
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
М.б. представления кривые? Перестроить индексы или вообще пересоздать представления.
 
D

Darker

попробуй так
Код:
	Set viewX = CS_GetCurrentDb.GetView( "EmployeeByNameWork" )
Set view=CS_GetCurrentDb.GetView("(AllPerson)")
Set docX = viewX.GetFirstDocument
While Not docX Is Nothing
set docX1=docX
Set docX = viewX.GetNextDocument(docX1)
'Дальше если надо используй docX1
Set telDoc=view.GetFirstDocument	

While Not telDoc Is Nothing
Set telDoc=view.GetNextDocument(telDoc)
Wend		

Wend
 
M

MMN

переделал на AllEntries все заработало, спасибо.
 
K

Klido

MMN
только хотел напомнить линк и там дальше с форума про подобные грабли...
что интересно, встречаются не всегда - у меня несколько похожих вложенных циклов работают норм...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!