数据库中问了很多主细表的问题,可是没有我满意的,现在还是不得不问啊。谢谢
我主表设置了关键字“单据编号”,从表用“单据编号”和主表关联起来,但是从表没有关键字,也就是说单据编号+货物编号可以为多条记录,在新增时,当主表的单据编号加入后,我现Post主表,然后再Edit主表,Edit细表,然后细表逐项增加数据,保存时却出错了,不知道是什么原因,我的做法如下:
try
ItemDataSet.Post; //保存之前先Post,如果出错,则不保存,置于编辑状态
MasterDataSet.Post;
MasterDataSet.Edit;
ItemDataSet.Edit;
except
Application.messagebox('数据保存失败!请检查编码是否重复,或稍后再试',p_msgTitle,MB_OK+mb_iconwarning);
MasterDataSet.Edit;
ItemDataSet.Edit;
Abort;
end;如果都不出错,然后再如下:
if not DM.ADOConnection1.InTransaction then
begin
DM.ADOConnection1.BeginTrans;
try
MasterDataSet.updatebatch;
ItemDataSet.UpdateBatch;
DM.ADOConnection1.CommitTrans;
except
DM.ADOConnection1.RollbackTrans;
Application.messagebox('数据保存失败!请检查编码是否重复。',p_msgTitle,MB_OK+mb_iconwarning);
//raise;
//Abort;
end;
end
else
begin
Application.MessageBox('服务器忙请稍后再试!',p_msgTitle,MB_OK+mb_iconWarning);
end;不知道是什么原因啊,在第一步细表Post的时候就出错,大家帮帮我找找原因。
我主表设置了关键字“单据编号”,从表用“单据编号”和主表关联起来,但是从表没有关键字,也就是说单据编号+货物编号可以为多条记录,在新增时,当主表的单据编号加入后,我现Post主表,然后再Edit主表,Edit细表,然后细表逐项增加数据,保存时却出错了,不知道是什么原因,我的做法如下:
try
ItemDataSet.Post; //保存之前先Post,如果出错,则不保存,置于编辑状态
MasterDataSet.Post;
MasterDataSet.Edit;
ItemDataSet.Edit;
except
Application.messagebox('数据保存失败!请检查编码是否重复,或稍后再试',p_msgTitle,MB_OK+mb_iconwarning);
MasterDataSet.Edit;
ItemDataSet.Edit;
Abort;
end;如果都不出错,然后再如下:
if not DM.ADOConnection1.InTransaction then
begin
DM.ADOConnection1.BeginTrans;
try
MasterDataSet.updatebatch;
ItemDataSet.UpdateBatch;
DM.ADOConnection1.CommitTrans;
except
DM.ADOConnection1.RollbackTrans;
Application.messagebox('数据保存失败!请检查编码是否重复。',p_msgTitle,MB_OK+mb_iconwarning);
//raise;
//Abort;
end;
end
else
begin
Application.MessageBox('服务器忙请稍后再试!',p_msgTitle,MB_OK+mb_iconWarning);
end;不知道是什么原因啊,在第一步细表Post的时候就出错,大家帮帮我找找原因。
1.在application中添加公共函数单元
如:
unit Unit_Pub_Function; interface
... //公共函数--保存主单
function Save_Main(cId,FieldName,FieldValue:string):boolean;
//公共函数--保存子单(明细单)
function store_save_detail(cid,f_name,f_value:string):boolean; ...
//写这两个函数2. 其它的窗体中需要时,引用这两个函数旧可以了。