Eis*_*man 4 mysql delphi firedac
这里的任何帮助都会很棒.
我试图使用参数动态更改'ORDER BY'
下面是我尝试过的代码,但是尽管遵循了文档,我仍然会收到错误'[FIREDAC] [PHYS] [MYSQL]你的SQL语法错误...在第4行"ORDER BY some_field"附近
我已将ParamCreate设置为True
我的数据库是MySQL
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('SELECT *');
FDQuery1.SQL.Add('FROM my_table');
FDQuery1.SQL.Add('LIMIT 1000');
FDQuery1.SQL.Add(':id');
FDQuery1.ParamByName('id').AsString := 'ORDER BY some_field';
FDQuery1.Open;
Run Code Online (Sandbox Code Playgroud)
您没有引用显示的异常消息.这是原始邮件
[FireDAC] [Phys] [MySQL]您的SQL语法错误...
''ORDER BY some_field''在第4行附近.
与你的引用相比
[FIREDAC] [PHYS] [MYSQL]你的SQL语法错误...
"ORDER BY some_field"在第4行附近
为了避免将来出现这种情况,只需按下聚焦异常窗口上的CTRL+ C,完整的消息就会出现在剪贴板内,可以粘贴到任何你喜欢的地方
现在阅读这个,错误现在非常清楚.
你希望得到这样的声明
SELECT *
FROM my_table
LIMIT 1000
ORDER BY some_field
Run Code Online (Sandbox Code Playgroud)
但是使用该参数,您将获得以下声明
SELECT *
FROM my_table
LIMIT 1000
'ORDER BY some_field'
Run Code Online (Sandbox Code Playgroud)
这正是异常消息告诉你的.
只需使用上一个语句检查异常消息即可
......靠近
'ORDER BY some_field'第4行.
和
......靠近
''ORDER BY some_field''第4行.
作为结论,不可能使用参数更改语句本身.您只能将值作为语句的参数传递.
无论如何,正确的陈述应该是正确的
SELECT *
FROM my_table
ORDER BY some_field
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
不知道这是否有帮助.但是你可以使用TFDQuery的'宏'属性,比如':'标识的参数,宏用'!'标识,你也可以组合宏和参数.Macros属性几乎与Params属性一样.使用TFDQuery.MacroByname分配宏值,并使用TFDQuery.MacroByname('MacroName').AsRaw分配字符串As-Is.
所以你的查询应该是这样的:
FDQuery1.Close;
FDQuery1.SQL.Text := 'SELECT * FROM !TABLE_NAME !WHERE_CLAUSE !ORDERBY_CLAUSE';
FDQuery.MacroByname('Table_name').AsRaw := 'my_table';
FDQuery.MacroByname('Where_clause').AsRaw := 'WHERE field1 = :ID_Value';
FDQuery.MacroByname('OrderBy_clause').AsRaw := 'ORDER BY field1';
FDQuery.ParamByname('ID_Value').AsInteger := 1;
FDQuery1.Open;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
7264 次 |
| 最近记录: |