关于datasnap做三层的数据库操作设计问题

llmiss 2015-10-27 04:25:55
我能想到的大概有以下两种方法:
一种方式是完全用delphi自带的fdmemtable,fdquery,TFDJSonDeltasApplyUpdates,TFDJSONDeltas等控件来实现对数据库的增删改,但是这种方式感觉有几个问题,一个是不够灵活,套路都固定死了,基本上就是applyupdate,一个是好像无法通用,客户端也只能用delphi开发,另外对于多表更新似乎支持的也不够丰富。
第二种方式就是自行拼接sql语句用fdquery执行,比如有一条查询语句“select 字段1,字段2 from 表1”,在服务器端拼接成“select 字段,字段2,主键1,主键2 from 表1”的形式,然后将查询结果加工一下,以jsonarray的格式传回客户端修改,改完再将jsonarray传回服务器拼接update,insert或者delete语句执行,这个方式感觉比较麻烦的是,前台的修改操作一般都是通过dbgird或者其他显示控件完成,如何在界面修改后将对应的jsonarray也进行处理。比如在dbgird上修改了第三行第二列的一个字段,那么就要去jsonarray里的对应地方进行处理,如果没有一个好的思路,在做客户端开发时就要多不少的工作量。
请教各位大神,现在比较好的做法是啥?积分不多了,不要嫌少哈
...全文
666 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
llmiss 2015-12-02
  • 打赏
  • 举报
回复
结贴1111111
llmiss 2015-10-28
  • 打赏
  • 举报
回复
和您探讨一下,比如一个业务场景,先查询出一个表的两条数据,用jsonarray传到客户端,并转化成fdmemtable,并用dbgird显示。然后在dbgird里分别修改了两条数据,然后我想将这两条数据的修改情况用jsonarray传回服务器端进行业务处理,并不是直接保存,比如我还要先根据修改的数据做一些业务上的限制和判断,没问题了,在服务器端根据jsonarray拼接sql语句更新。即客户端不直接保存或者进行业务处理,仅仅是记录数据变动,判断数据格式是否正确,并返回服务器端,基本上所有业务处理和对数据库的更新都在服务器端。 对于这样的业务场景,我现在的疑惑就是,在客户端的dbgird里修改数据后,还要将变化情况记录到jsonarray中,比如原始的jsonarray中只有一个oldvalue,修改后我要放一个newvalue进去。这个如果不是修改dbgrid后自动进行,那么在进行客户端开发时,在dbgrid变动后,还要写代码处理jsonarray,感觉太麻烦了点。
lyhoo163 2015-10-28
  • 打赏
  • 举报
回复
本人使用DataSnap多年,对于applyupdate实在不敢使用。一是经常失败,二是受到限制。
其实applyupdate,也是通过SQL逐条更新的。
因此,本人习惯了自己使用SQL逐条更新。
对于DBGrid,可以编写二个函数:一个DBGrid全部更新,一个仅对DBGrid一条(行)更新。这样,你在更新时,只要调用函数即可,也是很方便的。
lyhoo163 2015-10-28
  • 打赏
  • 举报
回复
DataSnap三层,读写数据都在服务器端。而且读是服务器向客户端传,写是客户端向服务器端传,更新数据,应该通过某个方式记录,那行数据变化了,需要更新。 这个方式,看起来较繁,但只要写入函数(方法)中,使用时还是委方便的。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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