Может ли Db.search вернуть Nothing?

Тема в разделе "Lotus - Программирование", создана пользователем Omh, 17 окт 2007.

  1. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Камрады, добрый день!

    Возник вопрос на засыпку (сформулирован в сабже).
    Я всегда считал, что даже в самом худшем случае db.Search возвращает коллекцию с count = 0.
    Но ходят байки, что всё-таки db.Search может вернуть Nothing :angry:

    Я сам лично сталкивался с тем, что doc.Responses возвращает Nothing, но что бы db.Search - никогда.
    Прошу подтвердить или опровергнуть!

    Спасибо!
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Один вариант нашёл сам.
    Но я не знаю, кем надо быть что бы так писать :angry:
    Код (Text):
    Dim Dc As NotesDocumentCollection
    On Error Resume Next
    Set Dc = Db.Search({@SOME_FAKE_FORMULA}, Nothing, 0)
    On Error Goto ErrDone
    Вот тут Dc будет Nothing (т.к. только задефайнена).
    Но повторюсь, не знаю, кем надо быть что бы так писать :angry:
     
  3. Azrael

    Azrael Гость

    Для: Omh
    :angry: Не пугай так... много где использую код set coll = db.Search...

    Индусы - народ интересный, взять хотябы периодически всплывающие дискуссии на тему функции coll.getNthDocument. Знающие люди пишут, что там внутри всё основано на тех же функциях coll.getNextDocument... Тем не менее, когда одно время использовал (из-за ИМХО, бОльшей красоты и наглядности конструкции for-next), получал на некоторых репликах функцией coll.getNthDocument непонятный результат, даже не nothing, а вообще какую-то ерунду, и соответственно, вопли пользователей, о том, что "все глючит" (ессно, запарывалось в дальнейшем коде на получении / установке полей документа)
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Да я и сам много где юзаю.
    И всегда проверяю сразу на Dc.Count.
    А тут мне говорят, что если Search возвращает Nothing, то это в пределах нормы :angry:

    А вот Doc.Responses теперь всегда проверяю на Nothing.
    Ибо были прецеденты.
     
  5. Azrael

    Azrael Гость

    <!--QuoteBegin-Omh+17:10:2007, 13:28 -->
    <span class="vbquote">(Omh @ 17:10:2007, 13:28 )</span><!--QuoteEBegin-->Один вариант нашёл сам.
    Но я не знаю, кем надо быть что бы так писать
    [snapback]82084" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Ну если какие скобки неправильные или с кавычками касяк, вроде как сообщение об ошибке выплевывается :angry: . Если конечно только On Error Resume Next выше есть, а ниже попытка, например, получения первого документа из коллекции...

    <!--QuoteBegin-Omh+17:10:2007, 13:34 -->
    <span class="vbquote">(Omh @ 17:10:2007, 13:34 )</span><!--QuoteEBegin-->И всегда проверяю сразу на Dc.Count.
    [snapback]82088" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    сам также делаю :angry:
     
  6. Mihal

    Mihal Гость

    <!--QuoteBegin-Azrael+17:10:2007, 11:29 -->
    <span class="vbquote">(Azrael @ 17:10:2007, 11:29 )</span><!--QuoteEBegin-->Индусы - народ интересный, взять хотябы периодически всплывающие дискуссии на тему функции coll.getNthDocument. Знающие люди пишут, что там внутри всё основано на тех же функциях coll.getNextDocument... Тем не менее, когда одно время использовал (из-за ИМХО, бОльшей красоты и наглядности конструкции for-next), получал на некоторых репликах функцией coll.getNthDocument непонятный результат, даже не nothing, а вообще какую-то ерунду, и соответственно, вопли пользователей, о том, что "все глючит" (ессно, запарывалось в дальнейшем коде на получении / установке полей документа)
    [snapback]82085" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    То что получалось называется "огрызки". Документы-призраки. Проверяется с помощью IsValid :angry:. И индусы тут не при чём. Тут "при чём", скорее, репликации.

    По поводу Search. Дык, а кто мешает проверить сначала на IsNothing?
    <!--QuoteBegin-Azrael+17:10:2007, 11:29 -->
    <span class="vbquote">(Azrael @ 17:10:2007, 11:29 )</span><!--QuoteEBegin-->бОльшей красоты и наглядности конструкции for-next
    [snapback]82085" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Протестую! Конструкция
    прекрасна и естественна!:angry: Вы когда пачку бумаг перебираете, то тоже перебираете пока до конца не дойдёте, а не считаете кол-во обработаных бумажек и сравниваете их к общим количеством, между прочим! Кстати, если doccol.count=0, то нафиг не надо проверять это условие. Посто не попадёт в цикл - и дело с концом.
     
  7. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    <!--QuoteBegin-Mihal+17:10:2007, 11:46 -->
    <span class="vbquote">(Mihal @ 17:10:2007, 11:46 )</span><!--QuoteEBegin-->Дык, а кто мешает проверить сначала на IsNothing?
    [snapback]82093" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Так в том-то и проблема, что есть уверенность, что Dc после search'a никогда не будет Nothing'ом.
    Вот я и спрашиваю реальные случаи, которые могли бы пошатнуть эту уверненость.
     
  8. Azrael

    Azrael Гость

    <!--QuoteBegin-Mihal+17:10:2007, 13:46 -->
    <span class="vbquote">(Mihal @ 17:10:2007, 13:46 )</span><!--QuoteEBegin-->Документы-призраки. Проверяется с помощью IsValid
    [snapback]82093" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Следуя Вашей логике, в пачке бумаг есть документы-призраки, которые нельзя достать простым перебором while - wend, но могут получиться при попытке, например достать 3-ий документ из пачки :D без индийских опиумных палочек тут никак :D

    IsValid и добавил везде, после чего отказался от getNthDocument :D
    , то, как правило, выводится сообщение пользователю :p , а то и дальнейший код после цикла может не только не иметь смысла, но и приводить к ошибкам при отсутствии доп. проверок.
     
  9. Mihal

    Mihal Гость

    <!--QuoteBegin-Azrael+17:10:2007, 11:54 -->
    <span class="vbquote">(Azrael @ 17:10:2007, 11:54 )</span><!--QuoteEBegin-->Следуя Вашей логике, в пачке бумаг есть документы-призраки, которые нельзя достать простым перебором while - wend, но могут получиться при попытке, например достать 3-ий документ из пачки без индийских опиумных палочек тут никак
    [snapback]82096" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Не понял? Я привёл пример по поводу for-next и while. Только для этого. И не более. Типа, аналогия для конкретной конструкции. Причём не только для LotusScript, а ваааще.

    <!--QuoteBegin-Azrael+17:10:2007, 11:54 -->
    <span class="vbquote">(Azrael @ 17:10:2007, 11:54 )</span><!--QuoteEBegin-->, то, как правило, выводится сообщение пользователю , а то и дальнейший код после цикла может не только не иметь смысла, но и приводить к ошибкам при отсутствии доп. проверок.
    [snapback]82096" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Как правило такие вещи оформляются в виде отдельных функций, которая чё-нить возвращают. Дабы немножко разграничить интерфейс (сообщения-запросы, например) и, собственно, исполнение. Получили данные с помощью запроса - запихнули в функцию - получили ответ - обработали ответ с выводом окошек усяких.

    <!--QuoteBegin-Omh+17:10:2007, 11:52 -->
    <span class="vbquote">(Omh @ 17:10:2007, 11:52 )</span><!--QuoteEBegin-->Так в том-то и проблема, что есть уверенность, что Dc после search'a никогда не будет Nothing'ом.
    Вот я и спрашиваю реальные случаи, которые могли бы пошатнуть эту уверненость.
    [snapback]82095" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А не проще добавить проверку на Nothing и забыть об этой паранойи навечно :D .
     
  10. Azrael

    Azrael Гость

    Для: Mihal
    Это всё ИМХО, конечно, но при больших объёмах программного кода отслеживать конструкции пошагового цикла всё же проще, хотя и против while-wend ничего не имею. Но вот получение "призраков" getNthDocument меня в своё время нехило напрягло.

    <!--QuoteBegin-Mihal+17:10:2007, 14:54 -->
    <span class="vbquote">(Mihal @ 17:10:2007, 14:54 )</span><!--QuoteEBegin-->Как правило такие вещи оформляются в виде отдельных функций, которая чё-нить возвращают. Дабы немножко разграничить интерфейс (сообщения-запросы, например) и, собственно, исполнение. Получили данные с помощью запроса - запихнули в функцию - получили ответ - обработали ответ с выводом окошек усяких.
    [snapback]82109" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    не спорю, просто такое не всегда оправдано.
    <!--QuoteBegin-Mihal+17:10:2007, 14:54 -->
    <span class="vbquote">(Mihal @ 17:10:2007, 14:54 )</span><!--QuoteEBegin-->А не проще добавить проверку на Nothing и забыть об этой паранойи навечно .
    [snapback]82109" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    всего лишь перебрать полностью много километров кода...
     
  11. Mihal

    Mihal Гость

    <!--QuoteBegin-Azrael+17:10:2007, 13:27 -->
    <span class="vbquote">(Azrael @ 17:10:2007, 13:27 )</span><!--QuoteEBegin-->не спорю, просто такое не всегда оправдано.
    [snapback]82118" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Как по мне, то всегда:D. В ентом деле лучше перебдеть чем недобдеть:D. Сам себя зачастую заставляю, правда... Это как с OnError. Вроде и не всегда надо, но если сразу не добавишь - то не добавишь никогда. А как будет расти код и куда - фиг угадаешь.

    <!--QuoteBegin-Azrael+17:10:2007, 13:27 -->
    <span class="vbquote">(Azrael @ 17:10:2007, 13:27 )</span><!--QuoteEBegin-->всего лишь перебрать полностью много километров кода...
    [snapback]82118" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Прям весь код их одних db.Search состоит.:D А поиск для чего?

    Можно написать свою функцию с теми же параметрами, что и в Search. С возвратом коллекции документов. В ней вычислять на Nothing и возвращать пустую коллекцию. И подменить одно на другое.
     
  12. Dikobraz Grey

    Dikobraz Grey Гость

    Кстати, это один из способов вернуть пустую коллекцию. Ни разу не видел, чтобы этот код вернул Nothing. По крайней мере на 6-ке и 7-ке.
     
  13. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    @SOME_FAKE_FORMULA - в моём случае навалидная формула.
    Т.е. Search вылетает с ошибкой, но проходит по On Error Resume Next и Dc остаётся Nothing'ом
     
  14. Dikobraz Grey

    Dikobraz Grey Гость

    Тогда да)<br>Просто я воспринял @SOME_FAKE_FORMULA не как неправильную собаку, а как собаку, которая ничего не возвращает
     
  15. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну a пустую коллекцию получаю 2-мя способами:
    Set Dc = db.GetProfileDocColeection("FAKE_KEY")
    или
    Set Dc = db.Search({@False}, Nothing, 0)

    Надо бы проверить, что быстрее...
     
Загрузка...

Поделиться этой страницей