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

  • Автор темы Sandro
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sandro

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

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

Sandro

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

Darker

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

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

Omh

Lotus team
04.07.2007
2 210
1
#6
Ну или в качестве ограничителя сторки использовать символы {}
Код:
Set Dc = Db.Search({Name = "ROGA & KOPITA"}, Nothing, 0)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#7
Он вставляет в поиск \, что то с утра туплю не могу понять почему, а надо быстро исправить
Дык а что не правильно то? Кавычка внутри строковой константы экранируется слешем в языке @-формул.
При поисковую строку типа такой:
Set coll=db.Search(|Form="f_pr_act" & fld_filial="Филиал \"Хвост\"" & fld_client="ООО \"Рога и копыта\""|,Nothing,32000)
 
D

Darker

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

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#9
Замена кавычек, как по моему, - плохое решение, т.к., кроме того, что это дополнительное действие (без которого можно обойтись), ещё и приходится приводить к "одному знаменателю" как правую, так и левую части - чтобы Search давал правильные результаты (см. ниже как у меня в формуле сделан Uppercase; такие преобразования я стараюсь делать в крайнем случае).

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

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

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

Omh

Lotus team
04.07.2007
2 210
1
#10
Я для строк тоже стараюсь использовать {} - если строка составная, удобно смотреть где конец, где начало кусочка строки.
 
S

Sandro

#11
TIA
согласен, тогда легче заменить " на \", а формулу поиска не менять
client=Replace( client , |"|, |\"|)
Я так по логике и делал, не получилось, до сих пор не понял почему Выводил в MessageBox, он не экранирует кавычки, а ставит символ \

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

nvyush

Lotus team
22.04.2009
2 317
0
#12
Я так по логике и делал, не получилось, до сих пор не понял почему Выводил в MessageBox, он не экранирует кавычки, а ставит символ \

А когда экранировал в формуле @replace(fld_client;"\"";"") , всё нормально
Кавычки экранируются \ в @-формулах, MessageBox выводит их как есть, т.е. для него {\"} это два символа {\} и {"}.
 
Статус
Закрыто для дальнейших ответов.