delphi FireDAC中的动态参数,宏参数,宏指令,宏变量(:!&{id})(不建议深入学习)

宏参数 &

第一步: 我们先在TFDQuery组件中写个SQL模板,内容为(不要点[执行]或者active,不会成功的):

SELECT &Fields FROM &Table  &WhereWords

上面一共使用了三个宏参数,它们分别表示 字段(s),表名,以及条件语句.TFDQuery组件下的Macros宏属性,会自动添加以上三个参数(有几个就建几个)

 第二步,调用.参考下面的举例,你甚至可以写出更复杂的多表联合查询,分组查询等.

procedure TForm1.搜索Click(Sender: TObject);
begin
  with FDQuery1 do
  begin
  //关闭
    Active := False;
  //设置动态参数 ,下面的赋值语句,等价于: MacroByName('(你设置的参数名)').AsRaw :=  XXX
    Macros[0].AsRaw := '物料代码,物料名称,规格型号,参考库存';//注意这里是可以添加多个字段的.  等价于 MacroByName('FIELDS').AsRaw:='xxxx';
    Macros[1].AsRaw := '物料信息';  //等价于 MacroByName('TABLE').AsRaw:='xxxx';
    Macros[2].AsRaw := 'WHERE 参考库存>0 AND 物料代码 like ' + ('%' + dxBarEdit1.Text + '%').QuotedString;    //等价于 MacroByName('WHEREWORDS').AsRaw:='xxxx';
  //激活 Active :
= True; //下面这两句看情况用 IcxCustomGridDataController(cxGrid1DBTableView1.DataController).DeleteAllItems; //CXGRID删除所有字段 IcxCustomGridDataController(cxGrid1DBTableView1.DataController).CreateAllItems(False); //CXGRID创建所有字段 end; end;

说白了,它就是在TFDQuery组件中先写个SQL模板,然后后期再完善这条SQL语句,使它能正常工作!

效果:

 

-------------------动态参数( : )------------------------------

SELECT 物料代码,物料名称 FROM 物料信息 where [物料代码] =:WHEREWords    //注:有些数据库对中方字段不好友的情况下,需要加中括号

 说明:

1.这个动态参数只能在where子句中使用(就我目前的认知,欢迎大佬指正.因为网站的资源太少了)

 

 

2.只适用于 where  XXX= :XXXX  这种格式,不能像宏参数一样拼接字符串

 

3.不用加引号(QuotedString)  ,NND就这个特性,玩得我不要不要的,一度怀疑自己写用法有问题!!

 

4.如果不是初次设置动态参数,你最好再确认一下params里面的参数是否对应得上,因为TFDQuery组件修改过后,里面的内容会变动.或者这样,先把params里的数据清空,然后双击打开TFDQuery组件,再修改,确定.这样就保证不会有问题了.

 

 

调用:

procedure TForm1.搜索Click(Sender: TObject);
begin
  with FDQuery1 do
  begin
  //关闭
    Active := False;
    Params[0].Value := dxBarEdit1.Text;
//    Params.ParamByName('WHEREWords').Value := dxBarEdit1.Text; //与上面一句等价
    Active := True;
  //下面这两句看情况用
    IcxCustomGridDataController(cxGrid1DBTableView1.DataController).DeleteAllItems;
    IcxCustomGridDataController(cxGrid1DBTableView1.DataController).CreateAllItems(False);
  end;
end;

 

宏指令{id}

 这个指令适用于字段上面,比如下面这条SQL

SELECT  物料代码,物料名称,参考库存 FROM 物料信息   where [物料代码]= :WHEREWords

有些数据库要求字段要加单引号,有些数据库要求加双引号,有些则不要加引号........如果你不了解的话,直接写成下面这样,包你没问题(事实上这种情况很少)

SELECT {id 物料代码 },{id 物料名称},{id 参考库存} FROM 物料信息 where 物料代码= :WHEREWords

FireDAC的宏指令,按功能大致上分上五种:字符宏,数值宏,日期宏,系统宏,转换宏 这些文档可能只有在官网才能找到了.只能说,能用,但基本上不会用(想用,但不会用; 会用,但有其他更好的方案),所以网上这方面的资料是相当少的!

posted @ 2023-02-07 15:49  一曲轻扬  阅读(372)  评论(0)    收藏  举报