Кавычки в строке
Кавычки в строке
Привет.
Подскажите, пожалуйста.
Если я хочу записать в базу строку в которой в начале и в конце есть знак ", то как это надо сделать?
Я искал как экранировать спец. символы, но к сожалению ничего не работает из того что нашел.
И есть ли какие-нибудь символы с которыми тоже могут быть проблемы и их нужно экранировать?
Подскажите, пожалуйста.
Если я хочу записать в базу строку в которой в начале и в конце есть знак ", то как это надо сделать?
Я искал как экранировать спец. символы, но к сожалению ничего не работает из того что нашел.
И есть ли какие-нибудь символы с которыми тоже могут быть проблемы и их нужно экранировать?
Re: Кавычки в строке
Здравствуйте,
Для вставки в таблицу строки содержащую специальные символы (такие как " ), Вы можете использовать следующий код:, тоже самое используя параметры:
Для вставки в таблицу строки содержащую специальные символы (такие как " ), Вы можете использовать следующий код:
Код: Выделить всё
MyQuery.SQL.Text := 'insert into dept values(1, ''"test"'', ''"test"'')';
MyQuery.Execute;
Код: Выделить всё
MyQuery.SQL.Text := 'insert into dept values(:deptno, :dname, :loc)';
MyQuery.ParamByName('deptno').AsInteger := 1;
MyQuery.ParamByName('dname').AsString := '"test"';
MyQuery.ParamByName('loc').AsString := '"test"';
MyQuery.Execute;
Re: Кавычки в строке
Извините меня, пожалуйста, я совсем запутался.
Спасибо за подсказку. Проверил insert, все работает, проблема оказывается с селектом.
Спасибо за подсказку. Проверил insert, все работает, проблема оказывается с селектом.
Ошибка при Pr1NameForDB[0,i1]='"test"'#42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test"" AND limit_id="25" AND number_id="2" AND date_id="24146"' at line 1'.
Код: Выделить всё
try
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id="'+Pr1NameForDB[0,i1]+'"'+
' AND limit_id="'+Pr1NameForDB[1,i1]+'"'+
' AND number_id="'+Pr1NameForDB[2,i1]+'"'+
' AND date_id="'+Pr1NameForDB[3,i1]+'"';
Form1.MyQuery1.Open;
while not Form1.MyQuery1.Eof do
begin
StrokaPrMogForDB:=Form1.MyQuery1.FieldByName('prM_id').AsString;
Form1.MyQuery1.Next;
end;
Form1.MyQuery1.Close;
except
form1.memo3.lines.add(Pr1NameForDB[0,i1]);
end;
Re: Кавычки в строке
Вам следует использовать следующий код:
Код: Выделить всё
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id='''+Pr1NameForDB[0,i1]+''''+
' AND limit_id='''+Pr1NameForDB[1,i1]+''''+
' AND number_id='''+Pr1NameForDB[2,i1]+''''+
' AND date_id='''+Pr1NameForDB[3,i1]+'''';
Form1.MyQuery1.Open;
Re: Кавычки в строке
Спасибо большое, но я к сожалению все равно не могу разобраться.
Если я использую код:
и записываю строку "test", то все работает.
Но если строка будет 'test', то опять будет синтаксическая ошибка.
Для 'test' надо использовать символ " в строке запроса, а для "test" символ '.
Скажите, пожалуйста, существует ли какой-нибудь универсальный способ?
Если я использую код:
Код: Выделить всё
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id='''+Pr1NameForDB[0,i1]+''''+
Но если строка будет 'test', то опять будет синтаксическая ошибка.
Для 'test' надо использовать символ " в строке запроса, а для "test" символ '.
Скажите, пожалуйста, существует ли какой-нибудь универсальный способ?
Re: Кавычки в строке
Да, Вы можете использовать параметры. В этом случае Вы можете использовать строки содержащие как одинарные кавычки, так и двойные. Например:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
MyQuery1.SQL.Text := 'select * from dept where dname=:dname';
MyQuery1.ParamByName('dname').AsString := '"test"'; // строка содержит двойные кавычки
MyQuery1.Open;
MyQuery1.Close;
MyQuery1.SQL.Text := 'select * from dept where dname=:dname';
MyQuery1.ParamByName('dname').AsString := '''test'''; // строка содержит одинарные кавычки
MyQuery1.Open;
end;
Re: Кавычки в строке
Спасибо большое!! Извините меня, я должен был сразу догадаться после первой подсказки, просто самостоятельно бывает трудно разобраться.
Исправил код:
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id=:dname'+
' AND limit_id='''+Pr1NameForDB[1,i1]+''''+
' AND number_id='''+Pr1NameForDB[2,i1]+''''+
' AND date_id='''+Pr1NameForDB[3,i1]+'''';
Form1.MyQuery1.ParamByName('dname').AsString := Pr1NameForDB[0,i1];
Form1.MyQuery1.Open;
Исправил код:
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id=:dname'+
' AND limit_id='''+Pr1NameForDB[1,i1]+''''+
' AND number_id='''+Pr1NameForDB[2,i1]+''''+
' AND date_id='''+Pr1NameForDB[3,i1]+'''';
Form1.MyQuery1.ParamByName('dname').AsString := Pr1NameForDB[0,i1];
Form1.MyQuery1.Open;