2017-05-31 3 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

パラメータを使用してtablenameを指定することはできません。パラメータは列の値です。 –

+0

ああ、ok。ありがとうございました。 –

+0

一般的に、値が実行時に提供される場合、またはエスケープする必要がある場合は、パラメータを使用します。ここでは、ASCII文字だけを含むリテラル値 '' tasks''があります。列の値であっても、パラメータを使用する必要はありません。 –

答えて

5

一般にSQLコマンドでは、テーブル名の置換にパラメータを使用できないためです。ただし、FireDACはSQLコマンドのテーブル名をパラメータ化するプリプロセッサマクロをサポートしています。この詳細については

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

:だから、たとえば、これを(Prepareを呼び出した後、たとえばされ、あなたがあなたのコード内で行ったようにコマンドを表示する場合、それはマクロの前処理後でなければならないことに注意してください)書くことができますマクロの種類については、substitution variablesトピックを参照してください。

関連する問題