举一个非常简单的例子:
比如有一个表:
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:='入库单';
不知道其他朋友是否也遇到过类似的问题。
真正理解DELPHI的人何在???用ADOQuery 多表关联单表更新
最新推荐文章于 2023-07-22 22:30:18 发布