1、中间层的Remote Data Module和Transactional Data Module的有什么不同?2、现在我用的是Transactional Data Module方式,在中间层写了一个专门执行SQL Server的接口,想法是客户端的所有数据操作都通过该接口提交数据。过程如下:
function TTranCom.ASPExec(const ASPName, ProName: WideString; ArrPara,
ArrValue: OleVariant; out RetOut: WideString): OleVariant;
Var
i:Integer;
AspExec : TADOStoredProc;
AspDSP : TDataSetProvider;
begin
RetOut := '';
AspExec := FindComponent(ASPName) as TADOStoredProc;
//寻找执行控件
AspDSP := FindComponent(ASPName) as TDataSetProvider;
//寻找DataSteParovider
AspExec.Connection := ASP_Exec.Connection;
//设置连接信息
with AspExec,Parameters do
begin
Close;
ProcedureName := ProName;
Refresh;
for i:=0 to 99 do
begin
try VarToStr(ArrPara[i]);
ParamByName(ArrPara[i]).Value := ArrValue[i];
except
break;
end;
end;
ExecProc;
RetOut := Parameters.ParamByName('@vc_ErrMsg').Value; //返回错误信息
Result := AspDSP.Data; //返回表格
end;
end;
现在的问题是,中间层用只用一个TADOStoredProc可以不?(我的客户数很大50~100个,并发数也可能50~100个)
function TTranCom.ASPExec(const ASPName, ProName: WideString; ArrPara,
ArrValue: OleVariant; out RetOut: WideString): OleVariant;
Var
i:Integer;
AspExec : TADOStoredProc;
AspDSP : TDataSetProvider;
begin
RetOut := '';
AspExec := FindComponent(ASPName) as TADOStoredProc;
//寻找执行控件
AspDSP := FindComponent(ASPName) as TDataSetProvider;
//寻找DataSteParovider
AspExec.Connection := ASP_Exec.Connection;
//设置连接信息
with AspExec,Parameters do
begin
Close;
ProcedureName := ProName;
Refresh;
for i:=0 to 99 do
begin
try VarToStr(ArrPara[i]);
ParamByName(ArrPara[i]).Value := ArrValue[i];
except
break;
end;
end;
ExecProc;
RetOut := Parameters.ParamByName('@vc_ErrMsg').Value; //返回错误信息
Result := AspDSP.Data; //返回表格
end;
end;
现在的问题是,中间层用只用一个TADOStoredProc可以不?(我的客户数很大50~100个,并发数也可能50~100个)
都个自有特点呵呵。
前者不支持事务,
后者支持事务,是专门用来创建COM+组件的。
可以查看帮助的setcomplet和setabort就是Transactional Data Module的事务语句。
r:将生成一个exe,
t:生成dll,并在com+环境中加载,提供连接池,安全性,可分发的.
因此建议使用com+
function TTranCom.ASPExec(const ASPName, ProName: WideString; ArrPara,
ArrValue: OleVariant; out RetOut: WideString): OleVariant;
Var
i:Integer;
AspExec : TADOStoredProc;
AspDSP : TDataSetProvider;
begin
try
RetOut := '';
AspExec := FindComponent(ASPName) as TADOStoredProc;
//寻找执行控件
AspDSP := FindComponent(ASPName) as TDataSetProvider;
//寻找DataSteParovider
AspExec.Connection := ASP_Exec.Connection;
//设置连接信息
with AspExec,Parameters do
begin
Close;
ProcedureName := ProName;
Refresh;
for i:=0 to 99 do
begin
try VarToStr(ArrPara[i]);
ParamByName(ArrPara[i]).Value := ArrValue[i];
except
break;
end;
end;
ExecProc;
RetOut := Parameters.ParamByName('@vc_ErrMsg').Value; //返回错误信息
Result := AspDSP.Data; //返回表格
end;
setcomplet
except
Set RetOut := '中间层出现错误!'
setabort
end;
end;