Конференция "Базы" » Восклицательный знак, Concat и MySQL [D7, MySQL]
 
  • Дмитрий (30.10.13 15:55) [0]
    Столкнулся с неожиданным для меня явлением:
    Копирую запись запросом, где к полю Название спереди прибавляется  "!Копия ", т.е.
    Insert Into ModelCatalog (..., Name)
    Select ... Concat("!Копия ", f.Name) from ...

    В результате, к названию прибавляется пробел.
    Все символы между восклицательным знаком и пробелом игнорируются.
    Аналогичный результат имеют Concat_SW() и Insert()
    Если убрать воскл.знак, слово "копия" прибавляется.
    Вопрос, где прочитать про такое действие В.З. и как же все-таки его добавить?
  • Кщд (30.10.13 17:31) [1]
    escape?
  • sniknik © (30.10.13 17:39) [2]
    универсальным было бы использование параметров. + попробуй кавычки на одинарные поменять - '!Копия ', возможна различная интерпретация (судя по скриптовым языкам, например питону, а что такое sql как не скрипт? ;)
  • Дмитрий (31.10.13 20:23) [3]
    Заменил
    ' Concat("!Копия ", f.Name) from ...'
    на
    '  Concat('
    + QuotedStr('!')
    + ', "Копия ", F.Name) '

    В отладчике кусок готового запроса получился:
    Concat('!', "Копия ", F.Name)

    После выполнения, восклицательный знак проигнорирован.
    Решил выполнить тот же запрос через терминал. Запрос сработал как ожидалось первоначально.
    Т.е. проблема не в MySQL, а в используемом компоненте (AnyDAC)

    Попробовал вставить двойной восклицательный знак
    Concat('!!', "Копия ", F.Name)
    Запрос сработал.
    Воющем, проблема решена.

    Похоже, это не глюк, это фича энидака.
    Для экранирования в середине строки запроса одинокого слова комментария.
  • brother © (01.11.13 04:59) [4]
    > одинокого слова комментария

    ему было так одиноко и не уютно среди других, что он решил в середине экранироваться от остальных знаком восклицания, как бы крича нам: Я здесь! Я живой!
    :)
  • Дмитрий (05.11.13 21:05) [5]
    Только сейчас понял, это ж мне все запросы надо как-то переделывать.
    Если кто-то в примечаниях решит восклицательный знак поставить?
    В лучшем случае знак потеряется.
    Либо потеряется вместе с ним следующее слово, если пойдет без пробела.
  • sniknik © (06.11.13 00:01) [6]
    > универсальным было бы использование параметров.
  • Дмитрий (06.11.13 19:13) [7]
    > универсальным было бы использование параметров.

    У меня упомянутые запросы выполняются одной функцией ExecSQL(Connection, StrSQL)
    Для параметров придется или на каждый запрос свой компонент создавать или писать функцию через параметры.
    Пока ограничился автозаменой  "!" на "!!"
    Там будет видно, теперь это не самое критичное.
 
Конференция "Базы" » Восклицательный знак, Concat и MySQL [D7, MySQL]
Есть новые Нет новых   [119975   +241][b:0][p:0]