C/S三层中每次有多用户同时操作相同动作时出现"对象被打开"提示.请多多帮忙,我很急!谢谢!! (200分)

  • 主题发起人 主题发起人 sunwl
  • 开始时间 开始时间
S

sunwl

Unregistered / Unconfirmed
GUEST, unregistred user!
开发环境:Delphi6+Windows2000 Oracle 9I
使用TSocketConnection,ADO
建立多个远程数据模块,都是MultiInstance, Apartment模式
在一个远程数据模块中声明函数
procedure TPlanServer.planProj(Index: Integer;
const ProjTyID,
EmpID: WideString;
out PLanProjMaxID: OleVariant;
const StrQ: WideString);
var
strSql:string;
Pyear:string;
begin
case index of
0: //取回项目信息
begin
strSql:='select C_PLIPRJ_ID,C_PLPRJ_TYID,Tsys_Projty.C_PROJTY_ID,Tsys_Projty.C_PROJTY_DESC,C_PLPRJ_NAME,C_PLPRJ_UNIT,N_PLPRJ_RESERVE,N_PLPRJ_PAID,D_PLPRJ_BEG,D_PLPRJ_END,C_PLPRJ_STATE,C_PLPRJ_IFPUT,D_PLPRJ_IFDIE,';
strSql:=strSql+'C_PLPRJ_IFDIEEMP,C_PLPRJ_EMPID,Tsys_Emp.C_SYSEMP_ID,Tsys_Emp.C_SYSEMP_NAME,D_PLPRJ_DATE,C_PLPRJ_MEMO from Tplan_Project,Tsys_Projty,Tsys_Emp where (C_PLPRJ_TYID=Tsys_Projty.C_PROJTY_ID)and(Tsys_Projty.C_PROJTY_ID='''+ProjTyID+''')and(Tsys_Emp.C_SYSEMP_ID='''+EmpID+''')';
PlanProj_Q.DisableControls();
PlanProj_Q.Close();
PlanProj_Q.SQL.Clear();
PlanProj_Q.SQL.Add(strSql);
PlanProj_Q.Prepared:= True;
PlanProj_Q.Open();
Server_DM.setDisplayLabel(PlanProj_Q);
PlanProj_Q.EnableControls();
end;
//0:
end;
//case
end;
在客户端以
Plan_DM.planProJ_cdst.Close;
Plan_DM.Plan_sockconn.AppServer.planProj(0,'01','TEST',aa,'');
Plan_DM.planProJ_cdst.Open;
调用.
单客户端运行时正常,但两个用户同时操作相同功能时出现"对象被打开"的提示但数据
一般可以正常返回.再次点击又正常了再同时操作又出提示.很奇怪.不知如何解决.
我很急,请多多帮忙.谢谢
 
server端放一个tsession控件,tdatabase指向tsession!
然后把session设为autosession!---可能你没有自动session
 
我用的是ADO方式的,好象BDE是加session和tdatabase吧?ADO也是吗?
 
远程应用服务器创建为ActiveX Library 远程模块设为 Transactional DataModule
每个模块 通过 ADOConnection 连接数据库 ADOConnection 的Connect 默认设为False
建成的COM+ 应用服务器安装为Windows2000的组件服务里的组件 建议通过DCOMConnection 来连接 通过SocketConnection 也可以连接 请参见多层应用系统http://www.wisdomstar.net 慧思企业物流管理系统(企业版)的实现
 
ADo连接Oracle好像有问题,建议用BDE
 
Oralce的ADO驱动程序问题,
不要用Oracle提供的驱动,要用微软的
 
后退
顶部