先在EDIT编辑框输入商品代码,判断商品代码是否存在,如果存在,就显示在
DBGRID中,输入数量,计算金额。
现在的问题是如果在DBGRID显示一行就马上输入数量,运行没有问题。
但是如果是先增加了若干了记录,增加完了以后,然后从DBGRID的第一行
开始输入数量,在第一行输入后,移到后面的行输入时,就显示以上故障。
我希望能够随时都可在DBGRID的各行输入和编辑。不出现以上的故障信息。
拜托了。

解决方案 »

  1.   

    是不是在table的onaferpost事件中用TABLE.REFRESH
      

  2.   

    table1.fieldbyname('单价').asfloat;
    加上dbgrid1.datasource.dataset.post;
             DBGRID1.DATASOURE:=DATASOURCE2;
    在两句话中加上
      

  3.   

    我好像也没有完全明白你的意思,DBGRID是绑定的控件,这样多条记录插入很容易出错。
    append之后post了吗?
    试试之后让
    adotable.active=false;
    adotable.active=true;
      

  4.   

    用的是SQL SERVER,重复记录应当不会产生。因为我在 每次启动FORM时删除了
    ADOTABLE的上次操作时的保存的记录。是个空表
      

  5.   

    DBGRID1.DATASOURE:=DATASOURCE2;
             DATASOUR2.DATASET:=ADOtable1;
    把这两句话放到begin后面
      

  6.   

    当你去改DBGrid的记录的时候,又触发了一个Edit 或者Insert 造成以前的东西被post掉了。
      

  7.   

    好像不是很难,应该可以解决。adotable1和table1是什么关系?
    下面这三句什么意思,每次新增都要设置吗?
            DBGRID1.DATASOURE:=DATASOURCE2;
             DATASOUR2.DATASET:=ADOtable1;
            dbgrid1.datasource.dataset.edit;主键是那个?
      

  8.   

    在DBGRID中切换行时,会自动触发数据集POST,需要保证主键不为空和不重复,这样在第二次EDIT记录时才不会出现:row could not be located 哪个是主键,插入记录后你赋值了吗?
      

  9.   

    没太看明白你的代码。明确几个方法,希望能帮到你:
    1. FindKey()之前最好明确以哪个字段作为查找的依据
       Table1.IndexFieldNames:='Field1;Field2;...';
       Table1.FindKey([value1,value2,...]);
    2. 在append, insert, edit...之后,最好post一下:
       AdoTable1.append;
       ...
       AdoTable1.post;
       AdoTable1.active:=false; //如有必要,刷新显示
       AdoTable1.active:=true;
    3. 如果你的DataSource的AutoEdit属性是True;在DBGrid中直接修改就可以,没有必要DBGird1.DataSource.DataSet.Edit
      

  10.   

    table1的内容是:商品代码,单价,数量
    adotable1的内容是:商品代码,单价,数量table1是商品表,ADOTABLE1是jinhuobiaotable1的数据已预先输入。ADOTABLE在增加记录前是空表。在EDIT编辑框输入商品代码判断,如果TABLE1中有,就在DBGRID中显示出来,并付给jinhuobiao(adotable1)。table1的主键是商品代码。
    adotable1没有设置主键。DBGRID1.DATASOURE:=DATASOURCE2;//表示把DBGRID与ADOTABLE1联系起来
             DATASOUR2.DATASET:=ADOtable1;
            dbgrid1.datasource.dataset.edit;//DBGRID处于编辑状态
      

  11.   

    请朋友们放心,我会多开一个帖子专门来感谢你们的关心和帮助的。
    please believe me!
      

  12.   

    兄弟!我不久才遇到和你一样的问题,我也是商品表,真是太巧了,错误提示和你一样,这是因为我某些字段用到了默认值,当你在网格中先增加若干个记录,然后才在DBGRID行输入数量,单价内容后,实际上数据已经POST了,如果没有再次开关数据集,或是刷新,就是这样的,把字段默认值取消就好了。
    祝你好运!
      

  13.   

    前几天就是这个提示:'the specified row could not be located for updating:some values may have been changed since it was last read’
    也是做商品表,记得太深了,怎么会这么巧合?怎么会?
      

  14.   

    procedure TForm1.addbuttonclick()
    var
    s1:string;
    begin
     dbgrid1.setfocus;
     dbgrid1.editormode:=true;
     s1:=edit1.text;
      if table1.findkey([s1]) then 
         begin
            DATASOUR2.DATASET:=ADOtable1;
            DBGRID1.DATASOURE:=DATASOURCE2;        adotable1.append;        adotable1.fieldbyname('商品代码').asstring:=
                       table1.fieldbyname('商品代码').asstring;
            adotable1.fieldbyname('数量').asinteger:=
                        table1.fieldbyname('数量').asinteger;
            adotable1.fieldbyname('单价').asfloat:=
                        table1.fieldbyname('单价').asfloat;        adotable1.Post;
            adotable1.edit;
          END;
    END;
      

  15.   

    商品表实际上并不进行其他另外的操作,只是用来进行判断。它的主键是药品代码。
    jinhuobiao是需要进行插入,计算,更新,删除的表。我以前没有设置主键。现在也设置了。不过我有一点没有搞懂,为什么一定要设置主键?它的作用我以前没有看出来,请告诉我主键到底用什么作用?
      

  16.   

    给adotable1设置主键,应该可以。
      

  17.   

    你设置主键后问题是否解决?因为ado提交时要根据主键查找数据库中记录,如果没查到就不能将数据提交,并且报出异常
      

  18.   

    不是给adotable1设置主键而是给数据库中的商品表
      

  19.   

    to hunter_zxy(hunter) :
    为什么还要给商品表设置主键,它已经有主键了呀,并且现在编辑的是adotable1,错误也是adotable1报的错!
      

  20.   

    我说的是adotable1绑定的表要添加主键
      

  21.   

    来迟了,不知道搞定没有?
    你查询->显示->赋值给另一个表?
      

  22.   

    真诚的感谢你们!
    我想说的是:
    搞定啦!!!
    谢谢,请容许我向你们关心和以后还会关心的朋友们表示诚挚的敬意。
    我爱你们。
    祝你们的工作顺利。
    请到http://www.csdn.net/expert/topic/1000/1000208.xml?temp=.8877527
    我很想多表示我的一番心意,真的,我是诚心的。
      

  23.   

    你上面的做法有点类似SQL Server中的触发器功能,而要用好触发器,主键是一个非常重要的东西,我觉得你的这种方法还不如直接交由SQL Server的触发器来完成比较好,delphi中的数据感知控件最好不要直接进行编辑,这样会和SQL Server内部的关联起冲突,不过你解决了问题还是要恭喜你了