真正理解DELPHI的人何在???用ADOQuery 多表关联单表更新

举一个非常简单的例子:

比如有一个表:
create table 入库单
(
商品编号,
商品数量
)

这个表非常简单;
我们做个程序对这个表维护,非常简单;
只需要设置:
  AdoQuery1.LockType:=ltBatchOptimistic;//批量更新数据模式;
  AdoQuery1.Sql.text:='select 商品编号,商品总数量,包装数量 from 商品信息';
  AdoQuery1.open;
  DataSource1.DataSet:=AdoQuery1;
  DbGrid1.DataSource:=DataSource1;



如果写程序,就5句代码实现所有的维护功能;
//1、添加
AdoQuery1.Append;
//2、修改
AdoQuery1.Edit;
//3、删除
AdoQuery1.delete;
//4、保存
AdoQuery1.post;
//5、取消
AdoQuery1.Cancel;

多么简单的程序,不需要专门写'insert into...'这样的语句实现维护;
而且也不需要我们人为判断哪些数据被更新过,AdoQuery1.post时会自动通过
AdoQuery1.UpdateStatus 来识别哪些数据被更改过,系统会生成相应的Sql语句作更新;

但是我们一般显示的时候,入库单都要和 商品信息表关联 显示“商品名称”;

所以:
 AdoQuery1.Sql.text:='select R.商品编号, S.商品名称,
          R.商品数量 from 入库单 R left join 商品信息 S on R.商品编号=S.商品编号';

当我们维护AdoQuery1的时候,商品编号,商品名称不能直接手工写,必须通过另外一个数据集从
商品信息里获取。

维护操作完成后,我们需要保存,如果AdoQuery1.Sql只是单表,我们可以用
AdoQuery1.post更新。
但是现在是多表,然而我们更新的只是一个表( 入库单)。但是AdoQuery1.post会把涉及的所有表都更新.

用以下语句只能删除,不能控制增加,修改
ADOQuery1.Recordset.Properties['Unique Table'].Value:='入库单';

不知道其他朋友是否也遇到过类似的问题。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页