通过在服务器上写接口,可以完成很复杂的业务
服务器端:
在服务器端新建一个方法,定义输入输出参数(表记录参数用VARIANT类型)。若为输出参数,类型后必须加上星号,并定义为[in,out]
比如下面是一个中间层上的一个接口方法:
procedure TPublicServer.sGetData(const piSql: WideString;
var pvData: OleVariant;
var pvError: WideString);
begin
if AdoQuery1.Active then
AdoQuery1.Close;
try
with AdoQuery1do
begin
Sql.Clear;
Sql.Add(piSql);
Open;
end;
DataSetProvider1.DataSet := AdoQuery1;
pvData := DataSetProvider1.Data;
DataSetProvider1.DataSet := nil;
except
pvError := '运行SQL语句:' + piSql + '时出错';
end;
end;
客户端:
调用方法:
var
iTmp: ITestServerDisp;
//接口名称,名字一般为:I+<服务器名>+Disp
begin
ITmp := ITestServerDisp (IDispatch(<DCOMConnection名>.GetServer));
ITmp.<接口方法名>(<参数1>,<参数2>……);
end;
客户端调用例子:
var
sError: WideString;
vData: OleVariant;
iTmp: IPublicServerDisp;
begin
ITmp := IPublicServerDisp(IDispatch(DataModule1.DCOMConnection.GetServer));
ITmp.sGetData('select * from dept',vData,sError);
ClientDataSet1.Data := vData;
end;