sqlserver2000下mastertable/detailtable表,以字段‘入库单号’相连,主从表用来表示一个入库表单,mastertable为表单的通用项,如此表单的编号,入库人,入库日期等等,detailtable表示入库单的主体,如入库零件,数量,单价等等
主外键都设置好了,delphi中用2个adoquery分别连接主从表,2个datasource,多个DBEdit连接主表,一个dbgrid连接从表,一个DBNavigator用来新建表单,删除表单。1.用从表的Datasource进行主从表同步,而在主表也就是入库单的MasterQuery的AfterScroll中,进行从表刷新
procedure TFrom1.MasterQueryAfterScroll(DataSet: TDataSet);
begin
//保持主从表同步
DetailQuery.Parameters.ParamByName('入库单号').Value :=
MasterQuery.fieldbyname('入库单号').Value;
if DetailQuery.Active then
begin
DetailQuery.Close;
DetailQuery.Open;
end;
end;
2.从表的更新方式改为批量更新。DetailQuery.locktype:=ltBatchOptimistic;
3.主表的NewRecord事件中,给入库单编号赋值(我定义的入库单号不是自动增长的)
4.从表的NewRecord事件中把入库单的编号等于主表的入库单编号5.在保存按钮中
try
DM.ADOConnection1.BeginTrans;
try if datesourceMaster.DataSet.State in [dsInsert,dsEdit] then
datesourceMaster.DataSet.Post;
DetailQuery.UpdateBatch; DM.ADOConnection1.CommitTrans;
except
DetailQuery.CancelBatch;
DM.ADOConnection1.RollbackTrans;
end;
finally end;添加后,只在主表中添加了记录,而从表中没有添加,若从表的更新方式不改为批量更新,
try
DM.ADOConnection1.BeginTrans;
try if datesourceMaster.DataSet.State in [dsInsert,dsEdit] then
datesourceMaster.DataSet.Post;
if datesourceDetail.DataSet.State in [dsInsert,dsEdit] then
datesourceDetail.DataSet.Post;
DM.ADOConnection1.CommitTrans;
except
DM.ADOConnection1.RollbackTrans;
end;
finally end;
则提示违反了主表的外键约束,
急死我了,各位大虾帮帮忙吧!
主外键都设置好了,delphi中用2个adoquery分别连接主从表,2个datasource,多个DBEdit连接主表,一个dbgrid连接从表,一个DBNavigator用来新建表单,删除表单。1.用从表的Datasource进行主从表同步,而在主表也就是入库单的MasterQuery的AfterScroll中,进行从表刷新
procedure TFrom1.MasterQueryAfterScroll(DataSet: TDataSet);
begin
//保持主从表同步
DetailQuery.Parameters.ParamByName('入库单号').Value :=
MasterQuery.fieldbyname('入库单号').Value;
if DetailQuery.Active then
begin
DetailQuery.Close;
DetailQuery.Open;
end;
end;
2.从表的更新方式改为批量更新。DetailQuery.locktype:=ltBatchOptimistic;
3.主表的NewRecord事件中,给入库单编号赋值(我定义的入库单号不是自动增长的)
4.从表的NewRecord事件中把入库单的编号等于主表的入库单编号5.在保存按钮中
try
DM.ADOConnection1.BeginTrans;
try if datesourceMaster.DataSet.State in [dsInsert,dsEdit] then
datesourceMaster.DataSet.Post;
DetailQuery.UpdateBatch; DM.ADOConnection1.CommitTrans;
except
DetailQuery.CancelBatch;
DM.ADOConnection1.RollbackTrans;
end;
finally end;添加后,只在主表中添加了记录,而从表中没有添加,若从表的更新方式不改为批量更新,
try
DM.ADOConnection1.BeginTrans;
try if datesourceMaster.DataSet.State in [dsInsert,dsEdit] then
datesourceMaster.DataSet.Post;
if datesourceDetail.DataSet.State in [dsInsert,dsEdit] then
datesourceDetail.DataSet.Post;
DM.ADOConnection1.CommitTrans;
except
DM.ADOConnection1.RollbackTrans;
end;
finally end;
则提示违反了主表的外键约束,
急死我了,各位大虾帮帮忙吧!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货