Здравствуйте, albe, Вы писали:
A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
Ну так зачем делать глупости там, где без них спокойно можно обойтись?
Query.ParamByName ( 'field1' ).AsString := Edit1.Text ;
Query.Open ;
Собственно, благодаря коду типа Вашего в списке известных хакерских приемов и присутствует так называемая SQL Injection.
>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
s:= 'update "имя_таблицы" set поле1=''+ QuotedStr(Edit1.Text)+ еще что-то...+'' where условие'
З.Ы. Есть еще ANSIQuotedStr
Добрый день!
Такая проблема.
Выполняю такую последовательность
s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(s);
Query1.ExecSQL;
Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
Как обойти?
(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).
Здравствуйте, albe, Вы писали:
A>Добрый день!
A>Такая проблема.
A>Выполняю такую последовательность
A>A>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
A>Query1.Close;
A>Query1.SQL.Clear;
A>Query1.SQL.Add(s);
A>Query1.ExecSQL;
A>
A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
A>Как обойти?
A>(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).
Предваряйте апостроф и кавычки обратным слешем ("\"). Т.е. перед тем как передать строку в SQL ее ее проанализировать и в случае, если в строке есть апострофы и кавычки замените их на \' или \". Если в строке есть сам обратный слеш — удвайваете его (\\). Это т.н. escape-символы
Приходиться заниматься гадостью — зарабатывать на жизнь честным трудом (Б.Шоу)
A>Добрый день!
A>Такая проблема.
A>Выполняю такую последовательность
A>A>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
A>Query1.Close;
A>Query1.SQL.Clear;
A>Query1.SQL.Add(s);
A>Query1.ExecSQL;
A>
A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
A>Как обойти?
A>(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).
Вариант 1. (дубовый. но я бы сделал именно так

)
s:= 'update "имя_таблицы" set поле1= ''' + double_quote(Edit1.Text + еще что-то...) + ''' where условие'
А double_quote — это ф-ция, которая удваивает каждую кавычку.
Реализация — в качестве упражения
Вариант 2. (от Softwarer'а)
Описан выше.
В качестве иллюстраци sql-инъекции задам вопрос — что будет, если пользователь введет в Edit1
0 drop table "имя_таблицы" --
?
Здравствуйте, albe, Вы писали:
A>Добрый день!
A>Такая проблема.
A>Выполняю такую последовательность
A>A>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
A>Query1.Close;
A>Query1.SQL.Clear;
A>Query1.SQL.Add(s);
A>Query1.ExecSQL;
A>
A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
A>Как обойти?
A>(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).
Не судьба параметрами пользоваться?
... << RSDN@Home 1.1.4 beta 4 rev. 303>>