再次提问!100分,关于ADO编辑时出错的问题!各位请进!!!

skyflyzy 2002-03-30 09:28:11
主要是想编一段自动去除一张表中所有记录和所有字段的前后导空格的过程!
用的是ADO+Access 97 ,部份代码如下:
Tx:Array[1..18] of string;
for i:=1 to DataSource1.DataSet.RecordCount do
begin
ADOQuery1.Edit;
for a:=1 to 18 do //共18个字段
begin
if Trim(ADOQuery1.Fields[a-1].Text)='' then Tx[a]:=' ' else Tx[a]:=Trim(ADOQuery1.Fields[a-1].Text);
end;
DataSource1.DataSet.SetFields([Tx[1],Tx[2],Tx[3],Tx[4],Tx[5],Tx[6],Tx[7],Tx[8],Tx[9],Tx[10],Tx[11],Tx[12],Tx[13],Tx[14],Tx[15],Tx[16],Tx[17],Tx[18]]);
DataSource1.DataSet.RecNo:=DataSource1.DataSet.RecNo+1;
end;
运行时,提示:'键列信息不足或不正确,更新影响到过多的行.'
请问是什么问题?又该如何解决?
望能得到指定!!!

也可发到我的信箱是:cadcamzy@hotmail.com
谢谢!!!
...全文
18 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fredfei 2002-03-30
  • 打赏
  • 举报
回复
“键列信息不足或不正确,更新影响到过多的行”

表示你的表有重复记录,你可以加一个标识列(ID),来区分这些重复的行
lvloj 2002-03-30
  • 打赏
  • 举报
回复
1.如果数据库的字段是自动增长型,就不能更改,还有如果是整型或文本或
二进制,等类型,用Fields[a-1].Text代替是否可靠?(我没有试过^_^)
如果用Fields[a].AsString或许要好些。

2.还有:
if Trim(ADOQuery1.Fields[a-1].Text)='' then Tx[a]:=' ' else Tx[a]:=Trim(ADOQuery1.Fields[a-1].Text); 完全等同于

Tx[a]:=Trim(ADOQuery1.Fields[a-1].Text);

注:如果用SQL写,我想会更好,更快。
UPDATE table SET field1=TRIM(field1),……, field18=TRIM(field18);
这里当然要注意我所说的第一点.
skyflyzy 2002-03-30
  • 打赏
  • 举报
回复
不好意思,也错了,上面代码中,
DataSource1.DataSet.RecNo:=DataSource1.DataSet.RecNo+1;
应为ADOQuery1.Next;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧