三层专家请进,一块儿讨论这个问题. ^_^

wizardqi 2005-07-25 05:10:15
不知道在三层中大家可否碰到过这种问题:由于客户端是多窗口,所以可能多个ClientDataSet对应服务器端的同一个Provider,不知大家如何解决。我使用了无状态Provider,但是在设计期没办法提取数据字段定义。
...全文
779 63 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizardqi 2005-08-26
  • 打赏
  • 举报
回复
快点参与有分呀,我要揭贴了,可是现在给分每人分值太大,快发表意见呀!^_^
steelxu5 2005-08-16
  • 打赏
  • 举报
回复
标记,学习中
waysoft 2005-08-16
  • 打赏
  • 举报
回复
学习:)
madyak 2005-08-16
  • 打赏
  • 举报
回复
我觉得用主从数据模块解决这个问题比较好.
请参考代码:
Program Files\Borland\Delphi7\Demos\Midas\SharedConn

Teng_s2000 2005-08-16
  • 打赏
  • 举报
回复
学习中...
quicksand201 2005-08-14
  • 打赏
  • 举报
回复
gz
lovcal 2005-08-14
  • 打赏
  • 举报
回复
问一下,DataSetProvider不是对每个客户端连接都建立新的进程么?
惭愧得很,我现在有个项目的三层开发怎么跟大家讨论的都不太相同啊?大家把自己如何解决的也都说说啊,我们学习一下,呵呵
另外加个问题:就是关于客户端与服务器端通信双方死机的问题,比如说在客户端调用中间应用服务器接口函数期间(返回之前),将服务器端的网线断了,客户端就死掉了,这些问题我找遍了资料都得不到答案,在版上问了多次,但也都没结果,不知道各位大哥在三层的实现中是不是从来都不存在这个问题阿?小弟很郁闷,呵呵
herman~~ 2005-08-09
  • 打赏
  • 举报
回复
学习
wizardqi 2005-08-09
  • 打赏
  • 举报
回复
其实这点Borland的更新机制本身已经是无状态了,唯一需要保护的是用户下载数据时需要用户记录自己的状态,这也是解决问题的关键,修改后的DataSetProvider和ClientDataSet具有了这种协调功能,所以每个DataSetProvider都可以重复利用,不会出现问题,所以中间件的数据访问模块利用率很高,再加上业务对象加入Pooling机制,经测试确实非常有效率。
angelior 2005-08-08
  • 打赏
  • 举报
回复
解决了?
要不说感谢了?
lwk_hlj 2005-08-08
  • 打赏
  • 举报
回复
我有来了

不知道在三层中大家可否碰到过这种问题:由于客户端是多窗口,所以可能多个ClientDataSet对应服务器端的同一个Provider,不知大家如何解决。我使用了无状态Provider,但是在设计期没办法提取数据字段定义。

-----------------------------
所以可能多个ClientDataSet对应服务器端的同一个Provider

每个clientdataset在对数据操作的时候
在其BeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
OwnerData:='select * form tablename';
end;
wizardqi 2005-08-08
  • 打赏
  • 举报
回复
感谢大家参与讨论.
wizardqi 2005-08-08
  • 打赏
  • 举报
回复
是呀,我自己想到了一个很有效率的解决办法,现在项目可以继续了。
lwk_hlj 2005-08-03
  • 打赏
  • 举报
回复
Connection: TADOConnection;
dataset: TADODataSet;
DSPRead: TDataSetProvider;
我就用一个!
lwk_hlj 2005-08-03
  • 打赏
  • 举报
回复
晕,给大家一个方法看看!


{-------------------------------------------------------------------------------
过程名: TMaterialServer.OpenData
作者: 李文凯
日期: 2004.12.06
描述: 请修改
实现方法: 请修改
参数: SQLFlag: Integer; const SQLWhere: WideString; var Data: OleVariant
返回值: 无
-------------------------------------------------------------------------------}
function TMaterialServer.OpenData(SQLFlag: Integer;
const SQLWhere: WideString; var Data: OleVariant;
var strMSG: WideString): Integer;
var
strSQL: string;
strLog:string;
begin
strLog:='OpenData(SQLFLAG='+inttostr(SQLFlag)+',SQLWHERE='+SQLWHERE+')';
Result:=1;
strSQL:=getSQLByID(SQLFlag);
if strSQL='' then
begin
strMSG:='编号为['+IntToStr(SQLFlag)+']的SQL语句没有定义!与请系统管理员联系!';
MainServer.AddInformat(FUserNO,FUserName,'读数据',strMSG,strLog,1);
Exit;
end;
if Trim(SQLWhere)<>'' then strSQL:=Format(strSQL,[SQLWhere]);
try
dataset.Close;
dataset.EnableBCD:=False;
dataset.CommandText:=strSQL;
dataset.Open;
Data:=DSPRead.Data;
dataset.Close;
Result:=0;
except
On E:Exception do
begin
strMSG:='获得数据失败,与请系统管理员联系!';
MainServer.AddInformat(FUserNO,FUserName,'读数据','编号['+IntToStr(SQLFlag)+'] 读取出错'+E.Message,strLog,1);
end;
end;
cds.ProviderName:='';
end;
dhf88 2005-08-03
  • 打赏
  • 举报
回复
我采用Delphi 6在Win 2000下开发基于COM+的三层系统,数据库服务器和应用服务器安装在同一台机器上,采用TSocketConnection连接,该系统的客户端每天都会死机,客户数5个以上大概1天发生1或2次,发生在客户端连接上后,网络中有掉包或客户机长时间没操作异外的断开,应用服务器上还显示客户机的IP地址,应用服务有时就会死掉.请问如何解决
wizardqi 2005-08-03
  • 打赏
  • 举报
回复
最后讨论阶段,马上揭贴了.
WuChenCan 2005-08-03
  • 打赏
  • 举报
回复
lwk_hlj(阿凯(学习.net中)) 的架构模式跟我的很相似,有机会可以讨论一下。wccyxf@163.com
海宏AA 2005-08-03
  • 打赏
  • 举报
回复
我一般是放多个Provider。还有动态创建Provider,用完了释放。
服务器上是有访问就自己创建的,不明白,怎么会重复呢?顶一下。
wizardqi 2005-08-03
  • 打赏
  • 举报
回复
我的业务逻辑使用了Pooling机制,同时共享了数据访问模块,所以数据访问模块必须无状态.
加载更多回复(43)

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧