delphi adoquery的post和UpdateBatch

delphi adoquery的post和UpdateBatch

Post是确认当前的修改,而UpdateBatch是把已经确认但是没有存盘的数据写入数据库
当ADOQuery的CursorType是ctKeySet或者ctStatic,并且LockType是ltBatchOptimistic的时候,数据DataSet是用批量更新的更新方式。这时,每条记录修改之后,用Post确认当前修改,但是确认后的数据却并没有立即写入数据库,而是保存于缓存之中。
当调用UpdateBatch的时候,这些缓存中的修改才写入数据库。
如果不是使用批量更新的方式的时候,Post的时候,确认的修改直接写入数据库。

ADOQueryupdateBatch问题

12-09

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

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试