全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2700
推到 Plurk!
推到 Facebook!

soap/web server的思考

 
wujun0901
一般會員


發表:8
回覆:7
積分:3
註冊:2007-02-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-14 09:21:28 IP:61.175.xxx.xxx 訂閱
以下内容都是针对李老师的soap/web server数据库开发的,我的程序框架和它的做的一样,功能上已经全部实现.遇到的问题如下

1.李老师在书中<<soap/web server>>在数据库部分在更新时服务端用到了clientdataset.XMLData,客户机在发送时也是 clientdataset.XMLData,这样的话在数据量大的时候特别是有blob字段的时候,数据会很慢.因为client部分其实只要发送clientdataset.delta值进行xml封装就行了.
我不会,请高手指教
client更新原始代码如下:
IQueryDataFind.UpdateData(XTToCompressSoapPacket1(DZSBFileClientDataSet.xmldata), lErrorCount);
DataUpDatelbl.Caption := '更新状态:' Inttostr(LerrorCount);
XTToCompressSoapPacket1//是先进行压缩处理


服务端更新代码如下:
try
Self.DZSBFileClientDataSet.Active := False;
Self.DZSBFileClientDataSet.XMLData := XTToUnCompressSoapPacket1(sData);
IErrorCount := Self.DZSBFileClientDataSet.ApplyUpdates(0);
SetComplete;
except
on Exception do
SetAbort;
end;
2.目前我的程序是delphi7做的,在用delphi2006编译后,程序能用,查询数据速度快了很多.看来borland delphi2006对soap/web server优化了许多.
但有两个问题
2.1服务端做的com ,delphi 7中在菜单run->install com ,delphi2006没有了,要在delphi2006找到类似的功能,怎么办?
2.2delhpi2006对简体中文查询有问题.就像clientdataset不能过滤"水"一样.
客户机代码

IQueryDataFind.QueryChangBillData('Select top ' RecordCountEdt.text
' * from 更改申请单 ', vData);就是不能执行,代码一定一定是对的,我查了很多边,开始我也以为是自己的代码写错了.别的中文表都可以的,搞了我半天,后来不得不把这张表的名称改了才可以.
2.3在delphi7中
IQueryDataFind.QueryChangBillData('Select top ' RecordCountEdt.text
' * from 中文表 order by 序号 ', vData);可以执行
在delhpi2006有 'order by '就是不能执行.可能也要英文字段才可以.晕
3.在客户机部分
3.1 如果HTTPRIO单元出错过一次,比如服务机有多个,第一个服务器试验时是故意失败的.一连客户机出错后,连其它好的服务器,连接是正常的.但clientdataset就是没有出不来数据用.datasource故意先断开clientdataset,再取得数据后,在datasource设置dataset也没用.不知你们有没有遇到过
3.2 在这样的web /soap环境中,我不知道客户机怎么才能取得服务端的出错信息.在三层中我知道用客户机的clientdata的reconcileerror事件是可以回取值的.
3.3在服务端如果DataSetProvider设为false,updatemode我设了upWhereKeyOnly,这样都已经可以了.有一个问题.客户机在新增记录后
保存成功,但客户机的主键还没refresh的情况下,如果更新其它字段一定会失败,因为在服务端key一定找不到了,我在想是不是客户机在新增记录保存后,一定要重新查询一下,大家对这样的问题是怎么处理的

wujun0901
一般會員


發表:8
回覆:7
積分:3
註冊:2007-02-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-14 21:45:25 IP:61.175.xxx.xxx 訂閱
wujun0901
一般會員


發表:8
回覆:7
積分:3
註冊:2007-02-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-15 12:59:30 IP:61.175.xxx.xxx 訂閱
第一个问题我已经解决
方法如下客户机
TempClientDataSet.Data:=DZSBFileClientDataSet.Delta ;
IQueryDataFind.UpdateData(XTToCompressSoapPacket1(TempClientDataSet.xmldata), lErrorCount);
DataUpDatelbl.Caption := '更新状态:' Inttostr(LerrorCount);
TempClientDataSet.Data:=Null;
服务端用dsp直接修改
try
Self.DZSBFileClientDataSet.Active := False;
Self.DZSBFileClientDataSet.XMLData := XTToUnCompressSoapPacket1(sData);
// IErrorCount := Self.DZSBFileClientDataSet.ApplyUpdates(0);
Self.DZSBFileDataSetProvider.ApplyUpdates(DZSBFileClientDataSet.data,0,IErrorCount);
SetComplete;
except
on Exception do
SetAbort;
end;
系統時間:2024-11-21 18:54:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!