如果你用过,请你指点一二,不甚感激!关于三层!(300分)

  • 主题发起人 主题发起人 free_knight
  • 开始时间 开始时间
F

free_knight

Unregistered / Unconfirmed
GUEST, unregistred user!
我在
http://www.delphibbs.com/delphibbs/dispq.asp?lid=898444
问过。
请各位有啥说啥,在此先谢了。
最近接触了多层数据库,要开发一个CRM或是ERP,用的是MIDAD+DCOM,发现了一个比较困惑的问题:
在客户端对数据库里的表进行添加,删除,修改操作,不知道用什么方法好,我用了以下几个方法,
都觉的不好:
1:在客户端的 ClientDataSet.CommandText 中直接写SQL语句进行操作,
如:ClientDateSet.CommandText:='insert table1(f1,f2) values(:v1,:v2)';
2:在服务端写方法,然后在客户端调用,把SQL语句的参数也一并传过去。
如:DCOMConnection1.AppServer.InsertTable1(vf1,vf2);
3:在客户端直接操作,再用 ClientDataSet1.ApplyUpdates(0);
让Delphi自动完成对数据库的操作。
可是都觉的不好,希望大家给我些好的方法。
各位有这方面的经验么,可否指点一二,不甚感激。
还望各位多多发表自己的见解,不吝赐教。
 
第一种和第二种方法不好,三层的目的之一就是后台的数据对前端是透明的,前台不
用了解后台有关的数据结构,我个人觉得这样有二个好处:
1.后台修改了表结构后,前台的程序不用更新.
2.后台的逻辑修改不用更新前台
3.安全
不过在我用的过程中,第三种方法不方便,所以又用了第一种方法,不过只能用数据表进行
SELECT操作,同时对SELECT的表也有检查.
楼上贴子的分我可不可以也得了 ;)
[:D][:D][:D][:D][:D][:D][:D][:D]
 
同意楼上的意见。我是来听课的,不要分。
 
里的思路分毫
 
请教createnew:
那么你用的是什么方法对表进行添加删除修改,
分数好商量,你要多少?
 
一次少量的数据修改增加用ApplyUpdates(0);(如增加修改入库单等)
大量的用贮存过程或CommandText中写SQL语句;(如记帐等操作)
 
不会吧,这可是我想了一个月才想出来的,你给多少分, 1778 ?
1778/31 = 57 一天57分 嬉嬉嬉嬉...
罢了,说了罢,好不好也是我想出来的,有建意多开口,
在Client端对ClientDataSet进行操作,和用ADODataSet一样,保存时只用调用一个函数
procedure Fuc_SaveBill(Vdata1, Vdata2, Vdelta1, Vdelta2: OleVariant;
const VIsDelete: WideString;
var Verror: WideString);
safecall;
Server端进行检查和保存,保存后的信息写入Verror中.
Vdata1、Vdata2:主表和从表的当前数据
Vdelta1,Vdelta2:主表和从表被列新的数据
VisDelete:是删除 :0:不是 1:是
VError:错误信息或成功信息.

 
>1:在客户端的 ClientDataSet.CommandText 中直接写SQL语句进行操作,
> 如:ClientDateSet.CommandText:='insert table1(f1,f2) values(:v1,:v2)';
:不好,破坏了应用程序服务器端企业对象的封装。
2:在服务端写方法,然后在客户端调用,把SQL语句的参数也一并传过去。
如:DCOMConnection1.AppServer.InsertTable1(vf1,vf2);
:有点沾边了,但仍然没有实现严格的封装。
3:在客户端直接操作,再用 ClientDataSet1.ApplyUpdates(0);
让Delphi自动完成
对数据库的操作。
:这个方法作为对少量数据操作的折衷可以保留,如:对字典的维护就可以这样简单地实现。
建议:
使用三层就意味着面向对象,也就意味着客户端不能直接提交“原始格式的记录”,
而是“业务数据包”,应用程序服务器端的企业对象接收到该数据包后,再进行验证,处理。
刚开始这样做时,可能觉得不胜麻烦,但做成之后,却是一个维护方便完全面向对象的
应用。如果条件允许,应当尽可能这么做。
 
同意楼上的,^_^ 我不要分,只要答案,
我现在就遇到一个类似的问题,唉~
 
关注~
楼上的大哥,具体怎么实现呢?
可以讲讲么?
 
多谢诸位大侠,这个问题小生还要保留几天,过几天再发分。
 
请linglingx查阅偶在free_knight开的另一贴中给的例子。URL见本页首
 
收到,感谢~~
 
有没有实例:
xiangyunyan@163.com
 
难道就没有人给我一个实例么。我再给他300分
 
难道就没有人给我一个实例么。如果正确,我再给他300分
 
我是三种方法结合使用!
 
我做了一个,不过是用第一种方法的~
这样简单多了 建议新手都象我一样~ :D
 
我也想要一个实例,我现在正在做,用的方法和sharejoy的一样,但是由于缺少经验,不知道
效果如何!特希望能够得到一个实例,我的Email:vickymade@263.net如果我做完了,挥发给大
家的。
 
后退
顶部