多表查询的数据集,新增记录后不能保存!

gulf1234 2008-06-03 10:03:08
我现在碰到一个问题,现在我有销售订单表A和客户表B,这2个数据表。
那么在销售订单界面上我们肯定是要显示客户编码和客户名称的,那么客户编码是“销售订单表A”中的一个字段,但是客户名称是通过这2个表关联查询出来的。

现在的问题是当我新增一条记录,然后保存的时候,老是提示“客户表B”中的客户编码不能为NULL,也就是ADO也在往数据表“客户表B”中插入记录,但是实际上我只是想往“销售订单表A”插入一条记录就可以了。

大家帮忙看看我该怎么解决这样的问题,我想这应该是一个很广泛的应用,你们是怎么来出来的。

(我之前用计算字段,但是数据一多,速度就很慢)
...全文
169 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
oushengfen 2008-06-05
  • 打赏
  • 举报
回复
我觉得楼主的设计有问题,你的B表只是用来显示给用户看的,也就是选择用的,为什么要关联呢

你是想把B表中某个字段的值作为用户输入的选项吧,你可以在程序中添加到commbox中啊,在SET与GET事件进行处理即可,很方便.
Heyongfeng 2008-06-05
  • 打赏
  • 举报
回复
多表查询的结果或者视图,一般用来显示数据,新增数据用另一个控件单独执行SQL语句
阿三 2008-06-05
  • 打赏
  • 举报
回复
多表关联查询的更新(视图)可以采用instead-of触发器来实现。
gulf1234 2008-06-05
  • 打赏
  • 举报
回复
顶一个
xiangzi15 2008-06-04
  • 打赏
  • 举报
回复
4楼说的不对吧, 我记得看李维写的书上说,ado可以更新多表啊.
nm_wyh 2008-06-04
  • 打赏
  • 举报
回复
我可以很负责任的告诉你,多表查义出来的数据集,比如你查询到了ADOQuery中,那么这个ADOQuery不能进行以下所有操作:
ADOQuery.Append;追加然后赋值新增记录,是不可以的!
ADOQuery.Delete;删除这个也是不可以的,删除不了,有可能还出错!
ADOQuery.Post;这就不要想了!根据不可能;
如果是多表查询,还想新增修改记录,你只能老老实实的写SQL语然后用ADOQuery执行SQL语句才行.
阿三 2008-06-04
  • 打赏
  • 举报
回复
销售订单表A--属于你的业务表
客户表B--这个应该是一个字典表
你向A表中存数据时的客户编号应该取自于B表中,且B表中的数据应该是提前进行维护。
从数据库完整性上来考虑,A表中的客户编号的外键应该是B表中的客户编号。

kaikai_kk 2008-06-03
  • 打赏
  • 举报
回复
多表关联时,最好是做视图仅作显示用,不操作数据!!

若非要这样做,可以分别处理;
我知道还有一个办法,用事务+批更新模式,指定更新的唯一表(Unique table)

try
ADOConnection1.BeginTrans ; //ADOQuery1.LockType是ltBatchOptimistic 与ADOConnection1相连
ADOQuery1.Properties['Unique Table'].Value:=Table; //Table就是你要更新的表,一般是主表
ADOQuery1.UpdateBatch(arAll);
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
end;
飞天揽月 2008-06-03
  • 打赏
  • 举报
回复
关联查询 出来的类似于一个视图
你需要指定到给那个表进行插入 最好根据编号, 单独处理一下

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧