E
EdwinYeah
Unregistered / Unconfirmed
GUEST, unregistred user!
实际场景:
c/s架构中采用缓冲更新方式编辑单条或多条记录。
关系型数据库中,通常一条记录不会是独立的。
假设有一个订单表Ord,它有“客户编号(CustomerNo)”、
“经手人编号(HandleBy)”这两个字段,它们分别来自“客户表(Customer)”和“员工表(Employees)”。
而且,编辑时“客户”及“经手人”要通过ComboBox选择的。
下面假设订单表中全部字段都要编辑,同时这里忽略输入合法性检查、事务保护等问题
我主张的方法
1、作为常用的、不常改变的基础数据,“客户表”和“员工表”在程序启动时或第一次用到时打开;
2、以一个简单的(select * from Ord where OrdNo=:OrdNo)用TADOQuery把要修改的“订单表”中的记录查
出来,同时设计时建立好“客户名称”、“经手人名称”两个lookup字段(当然分别来自“客户表”和“员工表);
3、更新时用UpdateBatch实现;
优点:
1、客户端没有太复杂的sql,方便维护;
2、代码(如更新时)只跟DataSet交互,不直接操作后台,代码量少,结构清楚,符合OOP思想;
3、“客户表”和“员工表”
缺点:项目负责人说lookup字段不安全,用UpdateBatch不灵活,但他未提供论据。
项目负责人主张的方法(只列出不同于我主张的方法的地方):
1、用TADOQuery把要修改的“订单表”中的记录查出来时,用这样的多表联接sql:
select Ord.*, Customer.Customer.Name, Employees.Employees.Name
from Ord inner join ......on...........
where OrdNo=:OrdNo
2、更新时不用UpdateBatch实现,而是自己写动态sql实现,针对update、insert、delete都要分别写。
优点:控制灵活。
缺点:
1、客户端嵌入过于复杂的sql,不方便维护;
2、根据没必要放弃ADO本身提供的UpdateBatch,自已去根据insert/delete/update写不同的sql,这样,对于不
同的表都要分别写实现insert/delete/update的sql,工作量太多,且不灵活。不像我主张的方法,在父类Form写好
一个SaveToDB方法即可适应绝大部分子类Form的数据更新。
3、要实现ComboBox选择的话,程序还要多做工作。
我要说服他,请发言,不论支持那一种方式,并提供理由。
c/s架构中采用缓冲更新方式编辑单条或多条记录。
关系型数据库中,通常一条记录不会是独立的。
假设有一个订单表Ord,它有“客户编号(CustomerNo)”、
“经手人编号(HandleBy)”这两个字段,它们分别来自“客户表(Customer)”和“员工表(Employees)”。
而且,编辑时“客户”及“经手人”要通过ComboBox选择的。
下面假设订单表中全部字段都要编辑,同时这里忽略输入合法性检查、事务保护等问题
我主张的方法
1、作为常用的、不常改变的基础数据,“客户表”和“员工表”在程序启动时或第一次用到时打开;
2、以一个简单的(select * from Ord where OrdNo=:OrdNo)用TADOQuery把要修改的“订单表”中的记录查
出来,同时设计时建立好“客户名称”、“经手人名称”两个lookup字段(当然分别来自“客户表”和“员工表);
3、更新时用UpdateBatch实现;
优点:
1、客户端没有太复杂的sql,方便维护;
2、代码(如更新时)只跟DataSet交互,不直接操作后台,代码量少,结构清楚,符合OOP思想;
3、“客户表”和“员工表”
缺点:项目负责人说lookup字段不安全,用UpdateBatch不灵活,但他未提供论据。
项目负责人主张的方法(只列出不同于我主张的方法的地方):
1、用TADOQuery把要修改的“订单表”中的记录查出来时,用这样的多表联接sql:
select Ord.*, Customer.Customer.Name, Employees.Employees.Name
from Ord inner join ......on...........
where OrdNo=:OrdNo
2、更新时不用UpdateBatch实现,而是自己写动态sql实现,针对update、insert、delete都要分别写。
优点:控制灵活。
缺点:
1、客户端嵌入过于复杂的sql,不方便维护;
2、根据没必要放弃ADO本身提供的UpdateBatch,自已去根据insert/delete/update写不同的sql,这样,对于不
同的表都要分别写实现insert/delete/update的sql,工作量太多,且不灵活。不像我主张的方法,在父类Form写好
一个SaveToDB方法即可适应绝大部分子类Form的数据更新。
3、要实现ComboBox选择的话,程序还要多做工作。
我要说服他,请发言,不论支持那一种方式,并提供理由。