现在我用一个DCOMConnection连接中间层,在服务器端配置了DCOM,错误提示是:INTERFACE NOT SUPPORTED,后来我在客户端也配置了DCOM后,就可以正常运行了。如果非要这样的话,我有20多台客户机,哪不是很麻烦。各位大虾有没有好的办法帮帮小弟???小弟急着交差。问题解决马上放分。
...全文
23912打赏收藏
为什么用DCOMConnection连接中间层,客户端也需要配置DCOM?
现在我用一个DCOMConnection连接中间层,在服务器端配置了DCOM,错误提示是:INTERFACE NOT SUPPORTED,后来我在客户端也配置了DCOM后,就可以正常运行了。如果非要这样的话,我有20多台客户机,哪不是很麻烦。各位大虾有没有好的办法帮帮小弟???小弟急着交差。问题解决马上放分。
多谢楼上的这么帮忙,按哪种安装com+代理的方法,问题已经解决了。能否再问你一个问题:中间层在维护数据的时候,是否为每一台客户分别维护一个。
例如:我的中间层是完成锁定一张单据的编辑功能。也就是说,当有一台客户机申请锁定一张单后,别的所有的客户机都不能再锁定这张单据,只有当前这个客户机解锁以后,别的客户机才能申请锁定这张单。
我的中间层申请锁定的功能代码如下:
procedure TRDM_PaperRequestLock.RequestLock(iBillType: Integer;
const sBillID: WideString; out bLocked: OleVariant);
var
hHandle:HWND;
bOutLocked:Boolean;
bOK:boolean;
begin
//单据加锁仲裁
bOutLocked:=False; // 初始化加锁标示
hHandle:=CreateMutex(nil,True,Pchar(IntToStr(iBillType)+sBillID)); //创建互斥对象的功能
try
{ while (GetLastError()=ERROR_ALREADY_EXISTS) do
begin
Sleep(100);
hHandle:=CreateMutex(nil,True,Pchar(IntToStr(iBillType)+sBillID));//创建互斥对象的功能
end; }
if WaitForSingleObject(hHandle,0)<>wait_TimeOut then //过程没有被运行过
begin
with frmPaperRequestlock.cdsLockRec do
begin
//在内存表中查找,请求仲裁的记录,
if Locate('iBillType;sBillID',VarArrayOf([iBillType,sBillID]),[]) then
begin
//若批到需要仲裁的记录,则判断此记录是否已经锁定,
if FieldByName('bLocked').AsBoolean=True then
begin //当前记录已经被锁定,则返加False
bOutLocked:=False;
end
else //当前记录没有被锁定,则修改此记录的加锁标示为True,并且返加True
begin
Edit;
FieldByName('bLocked').AsBoolean:=True;
post;
bOutLocked:=True;
end;
end
else //若没有找到则添加新记录,
begin
Append;
FieldbyName('iBillType').AsInteger:=iBillType;
FieldByName('sBillID').AsString:=sBillID;
FieldByName('bLocked').AsBoolean:=True;
Post;
bOutLocked:=True;
end;
end;
end;
finally
bOK:=ReleaseMutex(hHandle);
bLocked:=bOutLocked;
end;
end;
//解锁代码:
procedure TRDM_PaperRequestLock.ReleaseLock(iBillType: Integer;
const sBillID: WideString);
begin
//释放加锁标示
with frmPaperRequestLock.cdsLockRec do
begin
if Locate('iBillType;sBillID',Vararrayof([iBillType,sBillID]),[]) then
begin
Edit;
FieldByName('bLocked').AsBoolean:=False;
Post;
end
end;
end;