所谓命名查询(Named Query),指客户端的Query通过指定的名称,使用服务器端的Query操作(查、增、删、改)数据库。通过Named Query机制,实现事先在服务器端设置好SQL,达到在客户端不用写SQL的目的,同时,我们只需要将QueryService的AllowClientNamedQuery设置为True。
看一下具体的使用:
服务器端放一个kbmMWUniDACQuery:
with kbmMWUniDACQuery do begin
Name:='T1';//客户端在SQL中调用的名称
Published:=True;//客户端可见,不然出Query xxx not defined(Server)错误.
KeyFieldNames:='F1';//支持客户端增、删、改
TableName:='T1';//支持客户端增、删、改
SQL.Text:='Select * from T1 where F1<=:F1';//服务器端的SQL,这里做了一个参数F1,支持客户端按参数查询
Resolver:=kbmMWUNIDACResolver1;
ConnectionPool:=Form1.kbmMWUNIDACConnectionPool1;
end;
客户端调用方法:
procedure TForm2.Button1Click(Sender: TObject);
begin
//这是直接SQL调用的方法
// kbmMWClientQuery1.Close;
// kbmMWClientQuery1.Query.Clear;
// kbmMWClientQuery1.Query.Add('Select * from
T1');
// kbmMWClientQuery1.Open;
//这是Named Query方法:
kbmMWClientQuery1.Close;
kbmmWClientQuery1.Query.Text:='@T1';//T1,在服务器端定义的查询组件的Name属性
kbmMWClientQuery1.FieldDefs.Update;//取得服务器SQL中的参数
kbmMWClientQuery1.Params.ParamByName('F1').AsInteger:=5;
kbmMWClientQuery1.Open;
end;
通过上面的代码,客户端能够通过服务器实现对一个表的操作了!
xalion,是他的blog指导我,同时在他的帮助下,才搞明白kbmMW Named Query!