如何避免Delphi将特殊字符解释为SQL中的参数?

时间:2013-06-11 10:51:42

标签: sql delphi

我想运行一个带有特殊字符的Sql查询。但是,我不想使用sql参数。有一种方法可以运行以下查询吗?

SqlString := 'Select * from Table1 where Name LIKE '`1234567890-=\]['';/.,<>?:"{}|+_)(*&^%$#@!~%'
FSQLQuery.SQL.Clear;
FSQLQuery.SQL.Add( SqlString );
FSQLQuery.Open;

由于冒号登录,Delphi将此查询视为已参数化 '`1234567890 - =] [' '; /.,& LT;&GT;的:<!/强>“{} | + _)(*&安培; ^%$#@〜%'  并抛出(参数'{} | + _)没有值(*&amp; ^%$#@!〜%')。

3 个答案:

答案 0 :(得分:1)

你应该这样做:

sqlString := 'SELECT * FROM   Table1 WHERE  Name LIKE ''`1234567890-=\]['''';/.,<>?:"{}|+_)(*&^%$#@!~%'' ';
FSQLQuery.ParamCheck := False; //<<It MUST be prior than SetSql.
FSQLQuery.SQL.Clear;
FSQLQuery.SQL.Add( sqlString );
FSQLQuery.Open;

答案 1 :(得分:1)

如果FSQLQueryTADOQuery,那么避免此问题的最简单方法(SQL.Tex内的冒号字符)就是使用 FSQLQuery.Connection.Execute(FSQLQuery.SQL.Text)代替FSQLQuery.Open。 在这种情况下,您可以直接调用ADO方法,而无需Delphi解析您的Sql.Text

答案 2 :(得分:0)

注意在SQL中转义字符,也可以使用QuotedStr函数解决工作正常:

sqlString := 'SELECT * FROM   Table1 WHERE  Name LIKE ' +
             QuotedStr('`1234567890-=\]['''';/.,<>?:"{}|+_)(*&^%$#@!~%'' ) + ';';