D
dd001
Unregistered / Unconfirmed
GUEST, unregistred user!
以下内容都是针对李老师的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 Exceptiondo
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);就是不能执行,代码一定一定是对的,我查了很多边,开始我也以为是自己的代码写错了.别的中文表都可以的,搞了我半天,后来不得不把这张表的名称改了才可以.
3.在客户机部分
3.1 如果HTTPRIO单元出错过一次,比如服务机有多个,第一个服务器试验时是故意失败的.一连客户机出错后,连其它好的服务器,连接是正常的.但clientdataset就是没有出不来数据用.datasource故意先断开clientdataset,再取得数据后,在datasource设置dataset也没用.不知你们有没有遇到过
3.2 在这样的web /soap环境中,我不知道客户机怎么才能取得服务端的出错信息.在三层中我知道用客户机的clientdata的reconcileerror事件是可以回取值的.
3.3在服务端如果DataSetProvider设为false,updatemode我设了upWhereKeyOnly,这样都已经可以了.有一个问题.客户机在新增记录后
保存成功,但客户机的主键还没refresh的情况下,如果更新其它字段一定会失败,因为在服务端key一定找不到了,我在想是不是客户机在新增记录保存后,一定要重新查询一下,大家对这样的问题是怎么处理的
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 Exceptiondo
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);就是不能执行,代码一定一定是对的,我查了很多边,开始我也以为是自己的代码写错了.别的中文表都可以的,搞了我半天,后来不得不把这张表的名称改了才可以.
3.在客户机部分
3.1 如果HTTPRIO单元出错过一次,比如服务机有多个,第一个服务器试验时是故意失败的.一连客户机出错后,连其它好的服务器,连接是正常的.但clientdataset就是没有出不来数据用.datasource故意先断开clientdataset,再取得数据后,在datasource设置dataset也没用.不知你们有没有遇到过
3.2 在这样的web /soap环境中,我不知道客户机怎么才能取得服务端的出错信息.在三层中我知道用客户机的clientdata的reconcileerror事件是可以回取值的.
3.3在服务端如果DataSetProvider设为false,updatemode我设了upWhereKeyOnly,这样都已经可以了.有一个问题.客户机在新增记录后
保存成功,但客户机的主键还没refresh的情况下,如果更新其它字段一定会失败,因为在服务端key一定找不到了,我在想是不是客户机在新增记录保存后,一定要重新查询一下,大家对这样的问题是怎么处理的