COM+(150分)

  • 主题发起人 主题发起人 胡萝卜
  • 开始时间 开始时间

胡萝卜

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大富翁:
1、我开发的COM+组件与客户端在同一台机器上时,能够查询出数据,在不同台机器上时,提示“Interface no support”,怎么解决??
2、我在客户端传一SQL语句到COM+组件,用于查询出我需要的数据,但提示“Error data package“,怎么解决??
特急,先谢谢了。
 
第一个问题:检查你的两台机器是否使用了同样的帐户和密码?注意:密码不要为空。在服务器上是否已经将该用户加入COM+的角色中
第二个问题:要先说说你采用了什么技术? ADO或是MIDAS? 创建COM+的语句建议使用CreateRemote(机器名)
 
1、在服务器用客户机都建立相同的用户名和密码,并且在COM+组件服务管理器中,将该组件的属性->标识->帐户设为这个用户,不要用“交互式用户”
 
第二个问题是在客户端动态查询数据,即根据输入的条件查询出需要的数据.
客户端用的组件是:DBGrid,Datasource,ClientDataSet.
协调COM+中用的组件是:SocketConnection,ClientDataSet.
逻辑COM+中用的组件是:Adoconnection,AdoQuery,DataSetProvider
客户端调用协调COM+中的方法GetJobHead,参数为:一、不可回传的sql查询语句,二、可回传的OleVariant类型的变量。
在协调COM+中调用逻辑COM+中的方法SetJobHead,参数为不可回传的SQL查询语句。
然后设置ClientDataSet.Actived为True.
在逻辑COM+中,设置AdoQuery组件的SQL语句为方法SetJobHead接收的参数。
但在客户端提示为invalidation data package.
但是提前设置逻辑COM+中AdoQuery组件的SQL语句,就会在客户端显示出数据。
向各位大富翁请教????
 
第二个问题,是不是你的组件方法的参数赋值方式不对导致的?把关键部分的代码贴出来看一下。
 
客户端程序:
procedure TFrmBarCodeSystem.btnQueryJobHeadClick(Sender: TObject);
var
QJobHead:IBarCodeQuery;
vDatas:OleVariant;
sSql:WideString;
begin
sSql:='select * from JobHead where JobNo='''+'Conv2004010065'+'''';
qJobHead:=CoBarCodeQuery.CreateRemote('142.120.82.103');
qJobHead.GetJobHead(sSql,vDatas);
cdsJobHead.Data:=vDatas;
cdsJobHead.Active:=True;
end;
协调COM+程序:
procedure TBarCodeQuery.GetJobHead(const sSql: WideString;
var vData: OleVariant);
begin
try
try
cdsJobHead.Active:=False;
sktcJobHead.AppServer.SetJobHead(sSql);
sktcJobHead.Connected:=True;
cdsJobHead.Active:=True;
vData:=cdsJobHead.Data;
SetComplete;
except
SetAbort;
end;
finally
cdsJobHead.Active:=False;
end;
end;
逻辑COM+程序:
procedure TBarCodeJobHead.SetJobHead(const sCondition: WideString);
begin
try
adoqJobHead.Active:=False;
adoqJobHead.SQL.Clear;
adoqJobHead.SQL.Add(sCondition);
adoqJobHead.Active:=True;
SetComplete;
except
SetAbort;
end;
end;
请大家帮忙诊断一下.
 
ADO和MIDAS 都采用.比如查询、删除时用MIDAS,插入、修改时用ADO。
 
这个问题可能有两个原因。
1,客户机上没有装应用程序代理。你把你的COM+组件在客户端上也装一套就行了。一般情况下服务器端装应用程序,客户端装应用程序代理。在客户端装应用程序也可以。
组件装好后在管理工具有组件服务中看得到了。你在服务器端组件上点右键,选择导出就可以导出组件了。导出有两个选项,上面的是服务器用的,下面的是客户端用的。
2,如果用SQLServer,你的客户端的登录名称和密码要对应地在服务器上添加同样的用户。
 
后退
顶部