adoquery1查询表t_sell_rec,返回结果显示在dbgrid1中,按钮button1:删除dbgrid1中选种的一条记录,combobox1.item:a、b、c、d;button2:更新t_sell_rec中显示在dbgrid1中记录的字段sell_dollar_type的值,我的代码如下:
for i:=1 to ADOQuery1.RecordCount do
begin
ADOQuery2:= TADOQuery.Create(self);
ADOQuery2.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataFile+';Persist Security Info=False;';
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:= 'update t_sell_rec set [sell_dollar_type]= :tt_a where ([coustom_id]='''+ADOQuery1.FieldByName('coustom_id').AsString+''')';
ADOQuery2.Parameters.ParamByName('tt_a').Value:=trim(combobox1.text) ADOQuery2.ExecSQL;
end;
可是运行后,更改了所有coustom_id对应的sell_dollar_type值,晕,已经连续搞了6个小时了!各位大虾快久久me!
for i:=1 to ADOQuery1.RecordCount do
begin
ADOQuery2:= TADOQuery.Create(self);
ADOQuery2.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataFile+';Persist Security Info=False;';
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:= 'update t_sell_rec set [sell_dollar_type]= :tt_a where ([coustom_id]='''+ADOQuery1.FieldByName('coustom_id').AsString+''')';
ADOQuery2.Parameters.ParamByName('tt_a').Value:=trim(combobox1.text) ADOQuery2.ExecSQL;
end;
可是运行后,更改了所有coustom_id对应的sell_dollar_type值,晕,已经连续搞了6个小时了!各位大虾快久久me!
解决方案 »
- 请问有没有类似QQ里 显示我的好友,通讯录的功能的控件
- 调度算法问题~!!!!!!!!!!
- ActiveX中的控件.
- 我在winme上用delphi6的database desktop,输入中文怎么是乱码?
- 怎样把程序的sqlserver数据库文件做成安装文件打包用用户
- 100分紧急求教 DELPHI中怎样用OUTLOOKAPPLICATION 发邮件,最好有源码
- 如果做一个类似与qq登录时,在右小角,图标可以来回变的效果?
- 请教:在数据网格中编辑数据后移动到其他记录,如何给出是否保存数据的提示?具体该怎么控制?谢谢!
- 等着大家来救命!快来!快来!快来!
- record类型怎么会有方法?
- 文件拖放操作的问题
- 请问在QUICKREP中如何画虚线啊!
在你的for循环中,ADOQuery1.FieldByName('coustom_id').AsString的值均会等于当前行的coustom_id值,那自然会将数据库中所有记录的sell_dollar_type均更新掉。不然系统就有问题,我们的程序还能干吗?不信,你试试将SQL语句显示出来看看:
var
SQLStr : string
i : integer;
begin
ADOQuery2:= TADOQuery.Create(self);
ADOQuery2.Connection := ADOQuery1.Connection;
for i :=1 to ADOQuery1.RecordCount do
begin
ADOQuery2.Close;
SQLStr := 'update t_sell_rec set [sell_dollar_type]= '
+ trim(combobox1.text) + ' where ([coustom_id]= '''
+ ADOQuery1.FieldByName('coustom_id').AsString + ''')';
ShowMessage(SQLStr);
ADOQuery2.SQL.Text:= SQLStr;
ADOQuery2.ExecSQL;
end;
ADOQuery2.Free;
end;
end;
ADOQUERY1.NEXT;
ADOQuery2.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataFile+';Persist Security Info=False;';
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:= 'update t_sell_rec set [sell_dollar_type]= :tt_a where ([coustom_id]=:tt_id)';
ADOQuery2.Prepare;ADOQuery1.First;
while not ADOQuery1.Eof do
begin
ADOQuery2.Parameters.ParamByName('tt_a').Value:=trim(combobox1.text);
ADOQuery2.Parameters.ParamByName('tt_id').Value:=ADOQuery1.FieldByName('coustom_id').AsString;
ADOQuery2.ExecSQL;
ADOQuery1.Next;
end;
整个规划就有问题了。以上也只是权宜之计吧,比你原来的代码肯定要快一点。
最后别忘记了ADOQuery2.Free;
for i:=1 to ADOQuery1.RecordCount do
begin
ADOQuery1.edit;
ADOQuery1.FieldByName('sell_dollar_type').Value:=t_typ;
ADOQuery1.updatebatch(arall);
//ADOQuery1.post
ADOQuery1.Next;
end;
那些从dbgrid1中删除的数据也同时被更新了!还是错误!
把你删除的代码贴出来看看。一般来说,即使是假删除,ADOQUERY1里也没有这条记录了,否则GRID里会显示的,这样更新也就不存在这个问题了,除非你COLUMN_ID不是唯一索引.
ADOQuery1.locktype:=ltBatchOptimistic;
ADOQuery1.Cancel;
if ADOQuery1.RecordCount>0 then ADOQuery1.Delete;