不是啊,我循环时用的是adotable1.next;
现在用的是access数据库,原来做asp时用SQL数据库也遇到过,把数据导入到sql 数据库中之后,到数据库里进行修改,有些记录就修改不了,出现同样的错误信息。
怎么解决啊?

解决方案 »

  1.   

    是不是某条记录建立了索引 
    在其他table里也用过 ?
    在Oracle下我遇见过类似的问题  不知道你的情况是否如此。
      

  2.   

    ADOTable的KeyField设置不正确。
    因为ADO更新数据时,默认以键列字段和修改的字段为条件修改数据。如表A结构: ID: Integer not null primary key, Name: Varchar(30) not null
    当使用ADOTable来修改这个表时,它会自动生成类似于SQL语句来更新数据:
    KeyField设置为ID:
      修改ID: Update A set ID=[newid] where ID=[oldid];
      修改Name: Update A set Name=[newname] where ID=[oldid] and Name=[oldname];KeyField设置为Name:
      修改ID: Update A Set ID=[newid] where Name=[oldname] and ID=[oldid];
      修改Name: Update A Set Name = [newname] where Name=[oldname];请注意当KeyField设置为Name时生成的SQL语句,由于Name的值不一定唯一(重命的现象时有发生),这样查询出来的数据有多条,就是说要更新很多条数据。ADO会提出警告,避免出现这样的情况。要解决问题很简单,就是把你的KeyField设置为表的主键即可。
    当然,也可以修改ADOTable的动态属性,以修改ADO生成SQL语句的规则。
      

  3.   

    用create语句建立表时怎样设置主键?
    另外,怎样修改adotable的动态属性?
      

  4.   

    不明白你究竟想做什么,如果你想更新表的信息,那么你想更新的数据是什么,如果仅仅是adotable2联接的表,那么adotable2联接的表的总记录数与adotable1联接的表的总记录数是否一致,如果相同则可以执行,但还要看你表结构的设计是否允许这样的操作;否则如果adotable2联接的表的总记录数大于adotable1联接的表的总记录数,那么你将会在adotable1联接的表中写入2个相同的数据,如果你在该字段上建立了主键或是索引的话,就会出现这样的错误信息:‘键列信息不正确。更新影响到过多的行’。仅供参考!
      

  5.   

    不是了,我只是从adotalbe2表中提取了一个值,adotable2不循环的,只当是个变量就行了。
    现在的问题是adotable1是动态建立的,所以我才问怎样用sql语句设置它的主键。或者是怎样修改adotable1的动态属性。
      

  6.   

    以一个学生表为例建表:
    Create table student
    (
      --学生ID,主键
      stuID int primary key not null,
      --学生姓名
      stuName char(10) not null,
      --学生性别,缺省值为0(男)
      stuSex smallint default 0
    check(stuSex >= 0 and stuSex <= 1),
      --学生年龄,规定不能大于20岁
      stuAge int not null
    check(stuAge <= 20),
      --学生班级
      stuClass int,
      --学生家庭住址
      stuAddress char(50)
    );关于你所说的adotable的动态属性,我不知道你指的是什么?暂时就这样吧,希望能够对你有所帮助!呵呵
      

  7.   

    事例:
    create table table1
    {Sno CHAR(8) NOT NULL UNIQUE,
     Sname char(20)
    }
      

  8.   

    多谢,不过我想更简单一点,把主键设为自动计数,access中有这个类型,但是我不知道这个类型是什么,还请赐教。
    :)
      

  9.   

    你的问题是没有足够的信息来确定一行,Access里面的这个类型就叫作自动编号
      

  10.   

    自动编号型。
    在sql server中是int型,另外要设置标识为是,递增量为1。
      

  11.   

    this data type is 'AutoNumber'. in the design view.
      

  12.   

    用autonumber不行啊,字段错误。
    我用的就是access,怎样在程序里设置自动编号?
      

  13.   

    在SQL Server中使用Identity [(Seed, Increment)]设计自动编号,其中Seed表示基数,Increment表示自动增加的大小;而在Access中就是使用的AutoNumber,看看帮助就知道了,嘻嘻