实现一个QueryService支持多个数据库

时间:2022-12-11 15:07:09

实现一个QueryService支持多个数据库

上图,是在服务端定义多个数据库,准备在客户端通过“联接名称”,通过QueryService访问这些数据库。

然后实现一个MultiDBQueryService,并注册为一个指定服务名称的服务,如下图:

实现一个QueryService支持多个数据库

这里,只要设置客户端服务名称及服务类名称即可。其他项不用设置。

客户端通过ClientQuery查询指定的数据库:

procedure TTestForm.Button1Click(Sender: TObject);
begin
  kbmMWClientQuery1.QueryService:='djwkQueryService';
  kbmMWClientQuery1.QueryServiceVersion:='1.0';
  kbmMWClientQuery1.Query.Text:='Select * from sys_versioninfo';
  kbmMWClientQuery1.ActiveClient.Data:='djexam';//指定服务端的数据库联接名称
  kbmMWClientQuery1.Open;
end;

上面代码,通过kbmMWClientQuery.ActiveClient.Data属性传递服务端的数据库联接名称,这样,就可以查询指定的数据库了!

另外,在MultiDBQueryService中还实现了一个方法,用来取得服务端所有可用的数据库联接列表:

procedure TTestForm.Button2Click(Sender: TObject);
begin
       Label1.Caption:=c.Request('djwkQueryService','1.0','GetConnectionNameList',[]);
end;

返回结果用逗号分隔,如下:

hblexam, djexam, djwkexam, zhjg, djet, lsWeb, TestInfo, xmyt, test, dmjh

把返回的结果再分解,加入一个Combox中,如下图:

实现一个QueryService支持多个数据库

下面是分解的代码:

procedure TTestForm.Button2Click(Sender: TObject);
var
  s:string;
  sa:TArray<string>;
  I: Integer;
begin
     s:=c.Request('djwkQueryService','1.0','GetConnectionNameList',[]);
     sa:=s.Split([',']);
     for I := Low(sa) to High(sa) do
     begin
          ComboBox1.Items.Add(sa[i]);
     end;
end;

现在,我的KinglandSoftServer更灵活的,通过两种方式来支持多数据库的功能实现了!