pb12.5开发的webservice,其中有个方法:of_dw_update(bblb数据,'datawindow对象名')
bblb数据是客户端用dw_1.getfullstate取得的,然后作为参数传递到服务器端,执行of_dw_update()方法,
该方法代码为:
of_getconnect() ///连接数据库
datastore ds_1
ds_1 = create datastore
ds_1.dataobject = s_dw_name
ds_1.settransobject( sqlca)
ds_1.setfullstate( bl_data)
ds_1.accepttext( )
i_rtn = ds_1.update()
返回值经测试为1,但是数据库中的数据却没有更新,服务器端datawindow的update属性是“all updates”,
真是捉急呀!!!!请高手给指点下!!!
------解决方案--------------------
估计是没有执行 COMMIT;
以上方法可以改进一下:
1. 对于更新数据,客户端用 GETCHANGES(),服务端用 SETCHANGES(),以避免不必要的数据传递。
2. 对于 DATASTORE,不需要使用 ACCEPTTEXT()。
------解决方案--------------------
新建 proxy 工程的时候,是否勾选了 Use .Net Engine?PB 的 WEBSERVICE 只能发布在 IIS 上,所以 WS 代理也必须使用 .NET 引擎。
of_dw_update() 出现结构体对象可能也是由于使用了 SOAP 引擎导致的。
------解决方案--------------------
用getfullstate,setfullstate,会把datawindow的数据库及数据缓冲区的状态保存下来, DWItemStatus.你看看如果有新增的数据,传递过后,setfullstate还原之后,数据行是否还是newmodified!。
另外,你的客户端在getfullstate前不能用update(..,ture)或者是 resetupdate,setitemstatus之类的重置或修改过源数据窗口数据的状态
------解决方案--------------------
如果问题还未解决,加QQ 370801979
------解决方案--------------------
我觉得应该就是这个引擎的原因造成的,因为我使用的是 DOTNET 引擎,一切都很正常。或许理论上两种引擎都可以使用,但实际情况却可能会有问题,为避免不必要的麻烦,建议使用 DOTNET 引擎。
------解决方案--------------------
写成
ds_1.setfullstate( bl_data)
ds_1.settransobject( sqlca),也就是交换顺序试一下