真正理解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:='入库单';

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值