有两个Access数据表ADOTable1和ADOTable2,ADOTable1表有键值、ADOTable2表无键值,为何以下删除表记录的程序第一段正常,而删除ADOTable2的程序段报错:
“键列信息不足或不正确。更新影响到多行”,请问这是何原因?      
with ADOTable1 do
begin
  if RecordCount>0 then
  begin
    first;
    while not eof do delete;
  end;
end;
with ADOTable2 do
begin
  if RecordCount>0 then
  begin
    first;
    while not eof do delete;
  end;
end;

解决方案 »

  1.   


    adoTable.Connection.Execute('Delete   From   ..   Where   ...');   
      

  2.   


    这样试试
    with ADOTable2 do 
    begin 
      if RecordCount>0 then 
      begin 
        Last; 
        while not bof do delete; 
      end; 
    end;
    或者执行sQL语句
      

  3.   

    //用adotable时一定要带上主键,先检查你的数据库有主键吗
    //删除的时候是需要从后往前删。
    with Adotable1 do 
    begin
      Last;
      while not bof do 
      begin
        Delete;
        prior;
      end;
    end;//另外全部删除可以用如下方法
    AdOTable1.Connection.Execute('Delete from '+AdoTable1.TableName);
    adotable1.refresh;
      

  4.   

    可以使用delete from tablename的方法删除所有记录
      

  5.   

    +
     adoTable2  在刪除前,先   AdoTable2.ReQuery  下,如果還是出錯,有可能是這個表沒有主鍵。
      

  6.   

    这样删除也可以:
    及ADOTable1.open;
      ADOTable1.edit;
    kk:=ADOTable1.Recorcount;
    for kk:=1 to kk do
      ADOTable1.delete;
      

  7.   

    我现在改为用ADOQuery来删除没有主键的表是可以了,不过没有主键的表修改记录内容时用以下方法时仍然报错:    ...edit;
       ...修改记录内容;
        ...post;
      

  8.   

    基本上不提倡使用没有主键的表,或者你在录入或修改表内容通过代码保证不会出现完全相同的记录。如果你是从adoquery查询数据中选择记录,然后直接通过adoquery修改,就可能出现错误,因为表中存在完全相同的记录在修改记录时,最好使用update 这样可以修改所有记录
      

  9.   

    在修改记录时,最好使用update 这样可以修改所有满足条件的记录