adotable1.fields[1].value:=adotable2.fields[3].asinteger;
adotable1.post;
在循环写的过程中,写到某条记录时会出现错误信息:
‘键列信息不正确。更新影响到过多的行’。
这是怎么回事?
17 个解决方案
#1
按你的条件选择的纪录有多行
#2
不是啊,我循环时用的是adotable1.next;
现在用的是access数据库,原来做asp时用SQL数据库也遇到过,把数据导入到sql 数据库中之后,到数据库里进行修改,有些记录就修改不了,出现同样的错误信息。
怎么解决啊?
现在用的是access数据库,原来做asp时用SQL数据库也遇到过,把数据导入到sql 数据库中之后,到数据库里进行修改,有些记录就修改不了,出现同样的错误信息。
怎么解决啊?
#3
是不是某条记录建立了索引
在其他table里也用过 ?
在Oracle下我遇见过类似的问题 不知道你的情况是否如此。
在其他table里也用过 ?
在Oracle下我遇见过类似的问题 不知道你的情况是否如此。
#4
没有建立索引,而且表之间没有关系。这是为什么呢?
而且很怪,有些记录可以写入,有些就不行。
而且很怪,有些记录可以写入,有些就不行。
#5
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语句的规则。
因为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语句的规则。
#6
用create语句建立表时怎样设置主键?
另外,怎样修改adotable的动态属性?
另外,怎样修改adotable的动态属性?
#7
不明白你究竟想做什么,如果你想更新表的信息,那么你想更新的数据是什么,如果仅仅是adotable2联接的表,那么adotable2联接的表的总记录数与adotable1联接的表的总记录数是否一致,如果相同则可以执行,但还要看你表结构的设计是否允许这样的操作;否则如果adotable2联接的表的总记录数大于adotable1联接的表的总记录数,那么你将会在adotable1联接的表中写入2个相同的数据,如果你在该字段上建立了主键或是索引的话,就会出现这样的错误信息:‘键列信息不正确。更新影响到过多的行’。仅供参考!
#8
不是了,我只是从adotalbe2表中提取了一个值,adotable2不循环的,只当是个变量就行了。
现在的问题是adotable1是动态建立的,所以我才问怎样用sql语句设置它的主键。或者是怎样修改adotable1的动态属性。
现在的问题是adotable1是动态建立的,所以我才问怎样用sql语句设置它的主键。或者是怎样修改adotable1的动态属性。
#9
以一个学生表为例建表:
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的动态属性,我不知道你指的是什么?暂时就这样吧,希望能够对你有所帮助!呵呵
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的动态属性,我不知道你指的是什么?暂时就这样吧,希望能够对你有所帮助!呵呵
#10
事例:
create table table1
{Sno CHAR(8) NOT NULL UNIQUE,
Sname char(20)
}
create table table1
{Sno CHAR(8) NOT NULL UNIQUE,
Sname char(20)
}
#11
多谢,不过我想更简单一点,把主键设为自动计数,access中有这个类型,但是我不知道这个类型是什么,还请赐教。
:)
:)
#12
你的问题是没有足够的信息来确定一行,Access里面的这个类型就叫作自动编号
#13
自动编号型。
在sql server中是int型,另外要设置标识为是,递增量为1。
在sql server中是int型,另外要设置标识为是,递增量为1。
#14
this data type is 'AutoNumber'. in the design view.
#15
用autonumber不行啊,字段错误。
我用的就是access,怎样在程序里设置自动编号?
我用的就是access,怎样在程序里设置自动编号?
#16
个人认为不要在表中将某字段设计为自动计数,因为在使用的过程中,数值一旦超过整数范围将会引发错误,难以控制,导致程序调试困难
#17
在SQL Server中使用Identity [(Seed, Increment)]设计自动编号,其中Seed表示基数,Increment表示自动增加的大小;而在Access中就是使用的AutoNumber,看看帮助就知道了,嘻嘻
#1
按你的条件选择的纪录有多行
#2
不是啊,我循环时用的是adotable1.next;
现在用的是access数据库,原来做asp时用SQL数据库也遇到过,把数据导入到sql 数据库中之后,到数据库里进行修改,有些记录就修改不了,出现同样的错误信息。
怎么解决啊?
现在用的是access数据库,原来做asp时用SQL数据库也遇到过,把数据导入到sql 数据库中之后,到数据库里进行修改,有些记录就修改不了,出现同样的错误信息。
怎么解决啊?
#3
是不是某条记录建立了索引
在其他table里也用过 ?
在Oracle下我遇见过类似的问题 不知道你的情况是否如此。
在其他table里也用过 ?
在Oracle下我遇见过类似的问题 不知道你的情况是否如此。
#4
没有建立索引,而且表之间没有关系。这是为什么呢?
而且很怪,有些记录可以写入,有些就不行。
而且很怪,有些记录可以写入,有些就不行。
#5
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语句的规则。
因为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语句的规则。
#6
用create语句建立表时怎样设置主键?
另外,怎样修改adotable的动态属性?
另外,怎样修改adotable的动态属性?
#7
不明白你究竟想做什么,如果你想更新表的信息,那么你想更新的数据是什么,如果仅仅是adotable2联接的表,那么adotable2联接的表的总记录数与adotable1联接的表的总记录数是否一致,如果相同则可以执行,但还要看你表结构的设计是否允许这样的操作;否则如果adotable2联接的表的总记录数大于adotable1联接的表的总记录数,那么你将会在adotable1联接的表中写入2个相同的数据,如果你在该字段上建立了主键或是索引的话,就会出现这样的错误信息:‘键列信息不正确。更新影响到过多的行’。仅供参考!
#8
不是了,我只是从adotalbe2表中提取了一个值,adotable2不循环的,只当是个变量就行了。
现在的问题是adotable1是动态建立的,所以我才问怎样用sql语句设置它的主键。或者是怎样修改adotable1的动态属性。
现在的问题是adotable1是动态建立的,所以我才问怎样用sql语句设置它的主键。或者是怎样修改adotable1的动态属性。
#9
以一个学生表为例建表:
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的动态属性,我不知道你指的是什么?暂时就这样吧,希望能够对你有所帮助!呵呵
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的动态属性,我不知道你指的是什么?暂时就这样吧,希望能够对你有所帮助!呵呵
#10
事例:
create table table1
{Sno CHAR(8) NOT NULL UNIQUE,
Sname char(20)
}
create table table1
{Sno CHAR(8) NOT NULL UNIQUE,
Sname char(20)
}
#11
多谢,不过我想更简单一点,把主键设为自动计数,access中有这个类型,但是我不知道这个类型是什么,还请赐教。
:)
:)
#12
你的问题是没有足够的信息来确定一行,Access里面的这个类型就叫作自动编号
#13
自动编号型。
在sql server中是int型,另外要设置标识为是,递增量为1。
在sql server中是int型,另外要设置标识为是,递增量为1。
#14
this data type is 'AutoNumber'. in the design view.
#15
用autonumber不行啊,字段错误。
我用的就是access,怎样在程序里设置自动编号?
我用的就是access,怎样在程序里设置自动编号?
#16
个人认为不要在表中将某字段设计为自动计数,因为在使用的过程中,数值一旦超过整数范围将会引发错误,难以控制,导致程序调试困难
#17
在SQL Server中使用Identity [(Seed, Increment)]设计自动编号,其中Seed表示基数,Increment表示自动增加的大小;而在Access中就是使用的AutoNumber,看看帮助就知道了,嘻嘻