我的保存过程是这样设的:
1.定义全局变量
   bCanPost: Boolean;
2.在数据集控件的beforepost事件里面写代码
  if (False = bCanPost) then
  begin
    DataSet.Cancel;
    DataSet.Edit;
   end;
  bCanPost := False;
3.在保存按钮的点击事件里面
  bCanPost := True;
  ...
  post;
可是现在在点击“保存”后,出现如下错误:
无法为更新定位行,一些值可能已在最后一次读取后已更改。

dbgirdEh 有没有清空的命令和内容修改后自动更新一下的命令啊?

解决方案 »

  1.   

    .在数据集控件的beforepost事件里面写代码
      if (False = bCanPost) then
      begin
        DataSet.Cancel;
       end;
      bCanPost := False;
      

  2.   

    你写代码的方式有些怪
    if (False = bCanPost) then
    最好换为if Not(BCanPost) then
      

  3.   

    if adoquery1.state in [dsEdit,dsInsert] then Post
    就行了如果非要变量
    if (False = bCanPost) then
      begin
        DataSet.Cancel;
    //    DataSet.Edit;这句去掉
       end;
      bCanPost := False;另外很可能你的库里的字段设置了默认值并且允许为空
    如果是这样改为不允许为空
    就行了“dbgirdEh 有没有清空的命令和内容修改后自动更新一下的命令啊?“
    只要让数据集刷新下就行了
    adoquery1.refresh;