{ **** UBPFD *********** by delphibase.endimus.com ****
>> Преобразование строки в строку для SQL-сервера
Преобразование строки в строку для SQL-сервера
Зависимости: ???
Автор: Сергей, nfkazak@inbox.ru, Краснодар
Copyright: VIP BANK
Дата: 11 сентября 2002 г.
***************************************************** }function SQL_String(Value: string): string;
var
i: integer;
Ch_1,
Ch_2: Char;
QM_1,
QM_2: Boolean;
begin
QM_1 := False;
QM_2 := False;
for i := 1 to Length(Value) dobegincase Value[i] of
'''': QM_1 := True;
'"': QM_2 := True;
end;
end;
if QM_1 and (not QM_2) thenbegin
Ch_1 := '"';
Ch_2 := '''';
endelsebegin
Ch_1 := '''';
Ch_2 := '"';
end;
if QM_1 and QM_2 thenbeginfor i := 1 to Length(Value) doif Value[i] = Ch_1 then
Value[i] := Ch_2;
end;
Result := Ch_1 + Value + Ch_1;
end;
Функция SQL_String в языке Delphi, которая принимает строковый ввод Value и возвращает новую строку, подходящую для использования в запросе SQL. Функция пытается эксептить любые специальные символы в входной строке, обёртывая ее в одиночные или двойные кавычки, в зависимости от наличия этих символов в входной строке.
Разбивка кода:
Функция инициализирует два булевых переменных QM_1 и QM_2, чтобы отслеживать, содержит ли входная строка одиночную кавычку (') или двойную кавычку (") соответственно.
Затем функция проходит по каждому символу в входной строке с помощью цикла for.
Для каждого символа функция использует оператор case для проверки, является ли текущий символ одиночной кавычкой или двойной кавычкой. Если это так, она устанавливает соответствующую булевую переменную (QM_1 или QM_2) в значение True.
После прохождения по всем символам функция проверяет, содержат ли обе булевые переменные значения True. Если они содержат, это означает, что входная строка содержит оба типа кавычек, поэтому функция должна поменять их местами.
Затем функция устанавливает две переменные символов Ch_1 и Ch_2, в зависимости от типа кавычки, которая была обнаружена первой (одиночная или двойная).
Если QM_1 имеет значение True, это означает, что входная строка содержит одиночные кавычки, поэтому функция поменяет все вхождения одиночных кавычек на двойные.
Наконец, функция возвращает новую строку, конкатенируя оригинальную входную строку с выбранными открывающей и закрывающей кавычками (Ch_1 и Ch_2).
Функция имеет некоторые ограничения и потенциальные проблемы:
Она только проверяет одиночные кавычки (') и двойные кавычки (", но не другие специальные символы, такие как обратный слеш (\), точка с запятой ; или запятая ,.
Если входная строка содержит оба типа кавычек, функция поменяет их местами. Это может привести к неправильным результатам, если оригинальные кавычки использовались намеренно.
Функция не правильно обрабатывает символы Юникода, потому что тип строки в Delphi ограничен ASCII.
В современное время рекомендуется использовать более robust решение,such as a dedicated SQL escaping library or a database-specific escape mechanism, instead of relying on manual quote wrapping.
Статья описывает функцию в языке Delphi, предназначенную для преобразования строки в строку, готовую к использованию в SQL-сервере.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.