我在一个窗体里添加一条入库明细,我是用偷懒的办法,按了添加后就模拟dbnavigator1.btnclick(nbinsert);然后我想在主窗体里设置一个事务,我的代码如下:
procedure TfrmPartsIO.ButtonOKClick(Sender: TObject);
begin
mydata.C_4S.BeginTrans;
try
   DBNavigatorPage.BtnClick(nbpost);//入库单表
   DBNavigatorItems.BtnClick(nbpost);//入库明细表
   mydata.C_4S.CommitTrans;
except
   mydata.C_4S.RollbackTrans;
   messagebox(self.Handle,'数据库错误,[确认保存]操作被取消!','错误警告',mb_iconerror);
end;
end;
可是却出错,说入库明细表不在添加或修改的状态,可是我在把添加入库明细的窗口关闭后并没有关闭入库明细表呀,怎么回事?

解决方案 »

  1.   

    在修改语句前面用
    yourdataset1.edit;
      

  2.   

    可是我在前面添加的时候不是已经打开表并且甚至成insert状态了吗?
      

  3.   

    我奉劝你最好不要用导航条,你自己用SQL写插入语句。
    TABLE.INSERT有时候就会出现这样的问题,而且这种问题不太确定,
    有时候你在前面加入table.edit;它会提示你表正处于"其他的"状态的
      

  4.   

    在Post之前要先判断一下
    if yourDataSet.State in dsEditModes then yourDataSet.Post;