读书人

ADOQuery 修改记录如何变成新增加记录?

发布时间: 2012-03-24 14:00:46 作者: rapoo

ADOQuery 修改记录怎么变成新增加记录???
D7+SQL2k编程,选择DBGrid表中某条记录后修改某字段,保存后该记录没变,反而在库里新添加了记录,新增加的记录该字段变成了刚刚修改的记录,代码有错吗?什么原因???
Try
MDADO.Edit;
MDADO.FieldByName('A').AsString:=Trim(Edit20.Text);
MDADO.FieldByName('B').AsString:=Trim(Edit14.Text);
MDADO.FieldByName('C').AsString:=Trim(Memo3.Text);
MDADO.FieldByName('D').AsString:= Trim(Memo2.Text);
MDADO.Post;
Except
Application.MessageBox('数据库数据录入出现异常,请重新修改。','数据库系统错误',48);
MDADO.Cancel;
Exit;
end;

例子:如选择的记录如下,要修改字段D为6
A B C D
1 2 3 4
修改后
A B C D
1 2 3 4-->原记录没变
'' '' '' 6 -->多出来






[解决办法]
程序没有错
在执行上述代码之前,没有定位,
你可以这样修改
MDADO.close;
MDADO.sql.clear;
MDADO.sql.add('select * from [table] where D = :para');
MDADO.parameter.parabyname('para').value := 4;
MDADO..open;
MDADO.first;
..........
执行后面即可.


[解决办法]
如果不是批量修改,单条记录的修改还是用sql语句吧
with query do
begin
close;
sql.text := 'update table set aa=:aa where key=:key';
parameters.parambyname('aa')....
....
execsql;
end;
[解决办法]
建议你再增加个AdoQuery
adoquery2.sql.clear;
adoquery2.sql.add('update ..where a='+adoquery1.fieldByName('a').asstring);
adoquery2.ExecSQL;
adoquery1.refresh;
[解决办法]

Try
MDADO.Locate('D',4,[]); //用来定位记录
MDADO.Edit;
MDADO.FieldByName('A').AsString:=Trim(Edit20.Text);
MDADO.FieldByName('B').AsString:=Trim(Edit14.Text);
MDADO.FieldByName('C').AsString:=Trim(Memo3.Text);
MDADO.FieldByName('D').AsString:= Trim(Memo2.Text);
MDADO.Post;
Except
Application.MessageBox('数据库数据录入出现异常,请重新修改。','数据库系统错误',48);
MDADO.Cancel;
Exit;
end;
[解决办法]
try
if MDADO.eof or MDADO.bof or MDADO.isempty then
begin
showmessage('请选择记录');
exit;
end;
[解决办法]
你要修改一条记录,得先定位到这条记录
一条记录总该有一个(或多个结合)可以用来作唯一标志的字段吧

读书人网 >.NET

热点推荐