table3.edit;
   table3.FieldByName('贷').AsFloat:=-table2.Fields[3].AsFloat;
   y4:=y4+table2.Fields[3].AsFloat;
   table3.FieldByName('日期').asstring:=table2.Fields[1].asstring;
   table3.FieldByName('凭证').AsString:=table2.Fields[2].AsString;   table3.Post;
总是出现“健列信息不足或不正确。更新影响到多行。”
但有些时候,也可以正常运行,请问这是个什么错误,什么情况会出现,已经困惑我好长时间了,分数不够可以再加,多谢高手了!
使用的是ado

解决方案 »

  1.   

    table3.FieldByName('贷').AsFloat:=-table2.Fields[3].AsFloat;
    y4:=y4+table2.Fields[3].AsFloat;
    是不是table2.fields[3]空的时候就会报错?好像不应该为空(字符null)才对
      

  2.   

    table3.FieldByName('贷').AsFloat:=-table2.Fields[3].AsFloat;
    :=-table2.Fields[3].AsFloat;   这部分中前面的'-'是什么意思?
    你试试这种方法行不行:
    Table3.FieldValues['贷'] := Table2.Fields[3].asFloat;
      

  3.   

    1.ADO补丁更新过吧
    2.post命令最终会生成一条UPDATE语句,估计你这条update语句更新到了多行记录。这样的话你可以打开你所用数据库的SQL跟踪器捕获一下看看,如ms sql server的事件探测器。
      

  4.   

    数据库有相同的记录,我也试过,我是在SQL里面的,然后想删除其中一同相同的记录也不行,比较麻烦
      

  5.   

    可以在插入前判断是否重复try
         ... .Execute;
        except on E: Exception do
          begin
             if Pos('PRIMARY KEY', E.Message) > 0 then
              Application.MessageBox('重复,请修改!', '提示', MB_OK)
            else if Pos('FOREIGN KEY', E.Message) > 0 then
              Application.MessageBox('违反外键,请修改后!', '提示', MB_OK)        else
              Application.MessageBox(Pchar(E.Message), '提示', MB_OK);
          end;
        end;
      

  6.   

    我认为是你数据库没有建立主键.
    还有
    table3.FieldByName('贷').AsFloat:=-table2.Fields[3].AsFloat 可读性比较差
    最好改为 table3.FieldByName('贷').AsFloat:=table2.Fields[3].AsFloat * -1
      

  7.   

    强烈建议你在更新数据库时先用Table.Locate进行定位后再进行edit时基本上就没有问题了!
      

  8.   

    添加了一个id主键字段,倒是不报这个错误了,但又有了一个新的"List index out of bounds(8)"
      

  9.   

    请问table.locate怎么来用, DoorKey(剑客) 兄能否給个例子