0

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

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

由于 '`1234567890-=]['';/.,<>? : "{}|+_)(*&^%$#@!~%' 并抛出(参数 '{}|+_ 没有值)(*&^%$#@!~%')。

4

3 回答 3

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;
于 2013-06-11T11:58:04.557 回答
1

如果FSQLQueryTADOQuery那么避免这个问题的最简单方法(冒号字符在里面SQL.Tex)是使用 FSQLQuery.Connection.Execute(FSQLQuery.SQL.Text)而不是FSQLQuery.Open. 在这种情况下,您无需让 Delphi 解析您的Sql.Text.

于 2015-04-15T20:11:52.080 回答
0

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

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