下面这段代码:为什么新增权限时第一次保存后,数据库里面没有,第二次就好了
 procedure TfBaseUserInfo.SaveForm;
var
   ln,lncheck:integer;
   formno:String;
begin
   if DsMaster.DataSet.IsEmpty then exit;
   If DsMaster.DataSet.State=dsInsert then exit;
   Screen.Cursor:=crhourglass;
   //TADOQuery(DsDetail.DataSet).LockType:=ltBatchOptimistic;
   try
     for ln:=0 to pgform.PageCount-1 do
       for lnCheck:=0 to pgform.Pages[ln].ControlCount-1 do
       begin
           formno:=Tcheckbox(pgform.Pages[ln].Controls[lnCheck]).Name;
           formno:=copy(formno,4,length(formno));
           //修改用户用户权限
           if DsDetail.DataSet.Active=false then dsDetail.DataSet.Open;
              dsDetail.DataSet.Last;
           if (not DsDetail.DataSet.IsEmpty)
             and
                (DsDetail.DataSet.Locate('userno;funcno;formno',VarArrayOf([DsMaster.DataSet.FieldByName('userno').Value,funcno,formno]),[]))
            then
           begin
              dsDetail.DataSet.Edit;
              dsDetail.DataSet.FieldByName('operator').AsBoolean:=Tcheckbox(pgform.Pages[ln].Controls[lnCheck]).Checked
           end           else
           begin
            //给用户新分配权限
               DsDetail.DataSet.Append;
               DsDetail.DataSet.FieldByName('userno').Assign(DsMaster.DataSet.FieldByname('userno'));
               DsDetail.DataSet.FieldByName('funcno').AsString:=funcno;
               DsDetail.DataSet.FieldByName('formno').AsString:=formno;
               DsDetail.DataSet.FieldByName('operator').AsBoolean:=Tcheckbox(pgform.Pages[ln].Controls[lnCheck]).Checked;
           end;    end;     TADOQuery(DsDetail.DataSet).UpdateBatch(arAll);
     MessageDlg('权限授予成功',mtInformation,[mbOk],0);
    except
         TADOQuery(DsDetail.DataSet).CancelBatch(arAll);
         MessageDlg('权限授予失败',mtInformation,[mbOk],0);    end;   Screen.Cursor:=crDefault;
end;