当前位置: 代码迷 >> PB >> 请问一个有关问题.三层应用中服务器数据交互有关问题
  详细解决方案

请问一个有关问题.三层应用中服务器数据交互有关问题

热度:91   发布时间:2016-04-29 09:38:22.0
请教一个问题.三层应用中服务器数据交互问题.
从服务器端得到数据后,在客户端修改后更新.

程序大概过程为,服务器端检索数据后,用SAVEAS函数存为本地文件,处理后发送给客户端,客户端数据窗口用importfile导入,设置数据窗口resetupdate (这里这样处理不知道对不对,如果不RESETUPDATE,呆会就是保存的时候就是插入数据而且不是更新数据了),保存的时候用getchange取出BLOB,传送到服务器后用setchange(BLOB)保存.

运行的时候经常第一次可以修改,操作窗口多几次,偶尔会出现错误.提示rows changed between retrieve and update.

不知道是哪一个步骤处理不对?还是IMPORTFILE后UPDATE的问题?


?????????????

------解决方案--------------------
不明白你的做法.
一般是客户端去获取服务器的数据,然后做相关操作即可.不明白为什么你需要从服务器绕那么大的弯子将数据传给客户端?

帮顶.
------解决方案--------------------
三层结构C/S 的C 和中间S 的数据交互大至是用getfullstats ,setfullstats, getchanged, setchanged, 这几个方法完成的。

C端需要的数据第一次从中间S 获取的时候要用getfullstats 取blob后传给C, C用setfullstats。
然后回传。。。
但是你用saveas 成文件再传会影响DW的update 状态的。

------解决方案--------------------
嗯,楼上说的对。不要用saveas,getfullstate,压缩后传送,setfullstate,getchanged,再压缩后回传
------解决方案--------------------
一般在客户机在处理这些数据的时候会有一个多用户使用共享的数据冲突,不知道是不是这个问题
------解决方案--------------------
兄弟,那要看你是正确性优先还是效率优先。用fullstate就是为了保证服务器端和客户端的完全一致,否则可能会在数据的完整性和一致性上出现问题。就你的方法而言,如果你对并发控制要求不是很严格的话,Where Clause for Update/Delete”中用Key Columns应该没问题。否则的话你恐怕要在服务器端跟踪下SQL,找到具体的原因才行了。
------解决方案--------------------
既然这样,保存的时候也不要用getchange取出BLOB,再传送到服务器后用setchange(BLOB)保存这种方式,这样传送的数据量还是比较大,何不用GetSQLPreview()获取更新的SQL语句压缩后传送到服务器处理?GetSQLPreview()获取的SQL语句压缩率会比较大,因为包含大量重复的字符串
------解决方案--------------------
或者不用getchange、setchange(BLOB)这种方式,这2函数没准有点不适合这种场景,服务器端setchange(BLOB)的那个DW已经不是原来那个了吧,你应该不会把刚开始retrieve的那个DW还保存在服务器内存中,改成拷贝修改过或者新增的行道另一个datastore中并设置每行的setitemstatus为原DW中的状态,然后datastore.getfullstate后传送到服务器。当然要是有并发问题,直接UPDATE还是会出来rows changed between retrieve and update,不过你还可以在服务器上运行GetSQLPreview()来处理,更新需要更新的,跳过已经被修改的数据
------解决方案--------------------
savaas不好用,使用getfullstats ,setfullstats, getchanged, setchanged这几个函数来实现
------解决方案--------------------
我有点搞不明白 人家写好的东西你不用 非得自己整一个复杂的 还很多限制 不稳定的东西 搞不好你的东西搞好20M宽带已经出来了

我对resetupdate就一致了 有不同看法 其实数据窗口自动增长列 update 后 客户端resetupdate怎么会一致




------解决方案--------------------
可以用视图来写!
  相关解决方案