2017-05-31 46 views
1

我有以下Delphi代码:参数FDquery德尔福不起作用

FDQuery1.SQL.Clear; 
FDQuery1.SQL.Add('SELECT * FROM :Tablename'); 
FDQuery1.ParamByName('Tablename').AsString := 'tasks'; 
ShowMessage(FDQuery1.sql.Text); 
FDQuery1.Open; 

(从这个链接coppied:http://www.delphigroups.info/2/da/237634.html

这是行不通的,因为该参数不填充,但保持不变。 有人知道它为什么没有填满?

+3

您无法使用参数指定表名。参数用于列值。 –

+0

啊,好的。谢谢。 –

+0

通常在运行时提供值或需要转义时使用参数。在这里你有一个字面值,“任务”只包含ASCII字符。即使对于列值,您也不需要为此使用参数。 –

回答

5

因为在一般的SQL命令中不能使用参数进行表名替换。虽然您在这里足够幸运,但FireDAC支持预处理器宏来参数化SQL命令中的表名。所以,你可以写例如本(注意,如果你希望看到你在你的代码做的命令,它必须是宏预处理后,正在调用Prepare后EG):

FDQuery1.SQL.Text := 'SELECT * FROM &TableName'; 
FDQuery1.MacroByName('TableName').AsIdentifier := 'tasks'; 
FDQuery1.Open; 

有关这个细节类型的宏,请参阅substitution variables主题。