Как победить кавычки "?

Тема в разделе "Lotus - Программирование", создана пользователем Sandro, 6 май 2010.

Статус темы:
Закрыта.
  1. Sandro

    Sandro Гость

    Делаю небольшую выборку
    Код (LotusScript):
    Set coll=db.Search(|Form="f_pr_act" & fld_filial="|+filial+|" & fld_client="|+client+|"|,Nothing,32000)
    Но некоторые клиенты содержат в названии " -типа ООО "РОГА и КОПЫТА"

    Вываливается ошибка
    я меняю кавычки в названии
    Код (LotusScript):
    client=Replace( client , |"|, |\"|)
    Он вставляет в поиск \, что то с утра туплю не могу понять почему, а надо быстро исправить
     
  2. Darker

    Darker Гость

    client=Replace( client , |"|, "")
     
  3. Sandro

    Sandro Гость

    :) Мне их не надо убирать ))) Это выборка нужна для проверки , что дока с нужным клиентом нет в базе, тогда сохраняем
     
  4. Darker

    Darker Гость

    Ну тогды так:
    client=Replace( client , |"|, "")
    Set coll=db.Search(|Form="f_pr_act" & fld_filial="|+filial+|" & @replace(fld_client;"\"";"")="|+client+|"|,Nothing,32000)

    Т.е приводим все к одному "безкавычковому" виду
     
  5. Sandro

    Sandro Гость

    Точно ))) Спасиб.
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну или в качестве ограничителя сторки использовать символы {}
    Код (LotusScript):
    Set Dc = Db.Search({Name = "ROGA & KOPITA"}, Nothing, 0)
     
  7. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Дык а что не правильно то? Кавычка внутри строковой константы экранируется слешем в языке @-формул.
    При поисковую строку типа такой:
    Set coll=db.Search(|Form="f_pr_act" & fld_filial="Филиал \"Хвост\"" & fld_client="ООО \"Рога и копыта\""|,Nothing,32000)
     
  8. Darker

    Darker Гость

    TIA
    согласен, тогда легче заменить " на \", а формулу поиска не менять
    client=Replace( client , |"|, |\"|)
     
  9. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Замена кавычек, как по моему, - плохое решение, т.к., кроме того, что это дополнительное действие (без которого можно обойтись), ещё и приходится приводить к "одному знаменателю" как правую, так и левую части - чтобы Search давал правильные результаты (см. ниже как у меня в формуле сделан Uppercase; такие преобразования я стараюсь делать в крайнем случае).

    Лучше всего делать как сказал выше Omh... т.к. читабельность формул с кракозябрами типа \" сильно усложняется.

    Я вообще пошёл по пути неиспользования кавычек (") в формулах, т.к. они могут быть внутри используемого текста. Да и вообще давно уже не пишу формулы вручную (считаю это дурным тоном), их за меня составляет скрипт, вот например:

    Код (Text):
    (Form={Dep}:{StatePosition}) & (Hierarcy[1]={ООО "РОГА и КОПЫТА"}) & (@Uppercase(Server)={CN=MY/O=DOMAIN} | Server={})
    Ничего не надо убирать. Лучше потратьте время на написание общего механизма проверки уникальности по Db.Search, который может использовать базовый механизм сборки формул.
     
  10. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я для строк тоже стараюсь использовать {} - если строка составная, удобно смотреть где конец, где начало кусочка строки.
     
  11. Sandro

    Sandro Гость

    Я так по логике и делал, не получилось, до сих пор не понял почему Выводил в MessageBox, он не экранирует кавычки, а ставит символ \

    А когда экранировал в формуле @replace(fld_client;"\"";"") , всё нормально
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Кавычки экранируются \ в @-формулах, MessageBox выводит их как есть, т.е. для него {\"} это два символа {\} и {"}.
     
Загрузка...
Статус темы:
Закрыта.

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