:: Visual Foxpro, Foxpro for DOS
Символы перед которыми следует добавлять слэш в данных sql запроса
RusMikle

Сообщений: 717
Откуда: Muenster
Дата регистрации: 10.04.2002
Привет всем!
посмотрите, ничего не забыл
1. Двойные или одинарные кавычки (или те или те в зависимости от того чем ограничиваю строки)
2. Квадратные скобки
Какие ещё?
Есть ли в фоксе функция которая добавляет слэш к таким символам? (наподобии addslashes() в php) если нет может уже кто то написал подобную?

работа ведётся из php через OLEDB, в доке сколько не рыл ничего вразумительного, где обобщались бы все спец. символы, не нашел (может плохо рыл).

Сейчас работаю через подстановки ( ? ) и слэши ставит сам фокс. Но в принципе хотелось бы разобраться т.к. через подстановки не всегда (в силу специфики программы) подходит (напр. когда sql запрос пишется в файл, отсылается и потом только выполняется)



Исправлено 8 раз(а). Последнее : RusMikle, 22.04.10 15:14
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Добавлять для чего? В фоксе никаких символов экранирования не существует! Для того и допускается 3 способа квотирования строк, чтобы подобрать в каждом конкретном случае такой, для которого не нужно будет "экранировать" разделители (т.к. их и нельзя то заэкранировать). Конечно если в строке одновременно все 3 или даже 4 символа имеются, то её никак нельзя передать - одной строкой как минимум.
При работе через ПАРАМЕТРЫ такой проблемы нет, т.к. собственно не нужно квотировать строки (а заодно нет проблемы с форматом десятичной точки для чисел, форматом даты и т.п.)
Конечно же если речь идёт НЕ о фоксе - то нужно чётко обрисовать проблему


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Фоксу не нужны никакие слэши.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
RusMikle

Сообщений: 717
Откуда: Muenster
Дата регистрации: 10.04.2002
Igor Korolyov
Конечно если в строке одновременно все 3 или даже 4 символа имеются, то её никак нельзя передать - одной строкой как минимум.
Ещё бы объяснить пользователю при вводе что такие то и такие то символы нельзя писать т.к. я их использую для квотирования строк в запросе. Подменять пользовательские символы тоже не решение. Остаётся ставить слэш впереди. Значит нужна функция которая это автоматизирует. (напоминаю что работа ведётся из php через oledb и речь идёт о формировании sql запросов в строке). Проблема реальная, и ошибки связанные с вводом неподходявых символов имели место.
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Регулярные выражения не подойдут для проверки?


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
RusMikle

Сообщений: 717
Откуда: Muenster
Дата регистрации: 10.04.2002
У меня проблема не в том как заменить а в том что заменять.
Нет окончательной ясности. Напр. экранирование квадратных скобок не сразу пришло в голову, только после возникновения ошибки. Возможно ещё что то упустил.
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ещё раз - ВНУТРИ фоксовой системы никакого экранирования не существует! Т.е. в той команде которую ты посылаешь через ODBC/OLEDB не будут работать слэши-экраны - они будут приняты и сохранены как 2 отдельных символа!
При использовании параметризованных запросов проблем опять же НЕТ - т.е. пишем Update table1 set field1 = ?param1 where id = ?param2 - и внутри этих параметров не нужно никакого экранирования/замены - т.е. фоксу по барабану - будут там хоть все символы кавычек/апострофов/скобок - конечно же для КЛИЕНТСКОЙ среды - пхп или там ещё чего - вполне могут быть нужны свои символы экранирования...
Если же кровь из носу нужно "в виде строки" - т.е. БЕЗ параметров команду сделать, то единственный вариант, это разбиение строки на части - например принимаем в качестве "основного" разделителя двойные кавычки - тогда произвольную строку обрабатываем так: делим на части по разделителю двойной кавычки (не включая их сами), каждую часть окружаем кавычками, а между частями вставляем блок +["]+ Возможно на примере будет понятнее...
Исходная строка: asd"fgh'jkl[zxc]vbn'm,.""qwe
Результат перевода в фоксовый литерал: "asd"+["]+"fgh'jkl[zxc]vbn'm,."+["]+["]+"qwe"
Вводить кавычку можно и через +CHR(34)+ это уж кому как нравится
Ещё потенциально проблемным будет символ амперсанта (т.к. это символ ввода макро). Хотя маловероятно что во время исполнения в контексте ODBC/OLEDB будет найдена хоть какая-то переменная но всё-же спокойствия ради можно и амперсанты таким макаром "экранировать".
P.S. не наглядно когда рядом апострофы и кавычки, поменял на квадратные скобки...


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 23.04.10 21:55
Ratings: 0 negative/0 positive
Re: Символы перед которыми следует добавлять слэш в данных sql запроса
Goodwin
Автор

Сообщений: 3539
Откуда: Омск
Дата регистрации: 03.05.2006
Сам слеш тоже экранировать надо.


------------------
Что мы знаем о лисе?
Ничего. И то не все.
(С)Б. Заходер
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 32 (Гостей: 32)

© 2000-2024 Fox Club 
Яндекс.Метрика