运行以下代码,第一次运行时可以实现添加和删除,但是第二次点击就出错,重新打开后点击就有可以实现相关的功能,求助?

zhongzhen2014 2014-09-11 04:30:09
procedure TForm1.Button10Click(Sender: TObject);
var
StrSQL,Todata:string;
begin
StrSQL:='select * from Output';
ClientDataSet2.CommandText:=StrSQL;
ClientDataSet1.open;
ClientDataSet1.first;
while not ClientDataSet1.eof do
begin
if ClientDataSet1.Fields[9].AsBoolean = True then
begin
ClientDataSet1.Edit;
ClientDataSet1.FieldByName('运维班核对人').AsString:=loginForm.edit2.Text;
ClientDataSet1.Post;
end;
if ClientDataSet1.Fields[11].AsBoolean = True then
begin
Todata:=datetostr(Date());
ClientDataSet1.Edit;
ClientDataSet1.FieldByName('监控核对人').AsString:=loginForm.edit2.Text;
ClientDataSet1.FieldByName('核对日期').AsString:=Todata;
ClientDataSet1.Post;
end;
if ClientDataSet1.Fields[9].AsBoolean = True then
begin
if ClientDataSet1.Fields[11].AsBoolean = True then
begin
ClientDataSet2.Open;
ClientDataSet2.Append;
ClientDataSet2.FieldByName('序号').AsString:=ClientDataSet1.FieldByName('序号').AsString;
ClientDataSet2.FieldByName('点号').AsString:=ClientDataSet1.FieldByName('点号').AsString
ClientDataSet2.ApplyUpdates (0);
ClientDataSet1.Delete;
ADOquery2.Close;
ADOquery2.SQL.Clear;
ADOquery2.SQL.Add('select * from Input');
ADOquery2.Open;
with DataSetProvider1.DataSet.FieldByName( '序号' ) do
ProviderFlags := ProviderFlags + [ pfInKey ];
ClientDataSet1.ApplyUpdates (0);
end;
end;
ClientDataSet1.Next;
end;
end;
出现的错误是违反了PRIMARY KEY约束。不能在对象DBO.Input中插入重复键。求帮忙
...全文
334 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongzhen2014 2014-09-14
  • 打赏
  • 举报
回复
引用 4 楼 mathsfan 的回复:
打错了 ClientDataSet1.Last;然后往前滚啊ClientDataSet1.Prior;
这样做的话单击后没有反应了。
zhongzhen2014 2014-09-14
  • 打赏
  • 举报
回复
引用 4 楼 mathsfan 的回复:
打错了 ClientDataSet1.Last;然后往前滚啊ClientDataSet1.Prior;
这样做最后一条删不掉。
mathsfan 2014-09-12
  • 打赏
  • 举报
回复
打错了 ClientDataSet1.Last;然后往前滚啊ClientDataSet1.Prior;
mathsfan 2014-09-12
  • 打赏
  • 举报
回复
ClientDataSet1.Last;然后往下滚啊ClientDataSet1.Prior; procedure TForm1.Button10Click(Sender: TObject); var StrSQL,Todata:string; begin StrSQL:='select * from Output'; ClientDataSet2.CommandText:=StrSQL; ClientDataSet1.open; ClientDataSet1.Last; while not ClientDataSet1.eof do begin if ClientDataSet1.Fields[9].AsBoolean = True then begin ClientDataSet1.Edit; ClientDataSet1.FieldByName('运维班核对人').AsString:=loginForm.edit2.Text; ClientDataSet1.Post; end; if ClientDataSet1.Fields[11].AsBoolean = True then begin Todata:=datetostr(Date()); ClientDataSet1.Edit; ClientDataSet1.FieldByName('监控核对人').AsString:=loginForm.edit2.Text; ClientDataSet1.FieldByName('核对日期').AsString:=Todata; ClientDataSet1.Post; end; if ClientDataSet1.Fields[9].AsBoolean = True then begin if ClientDataSet1.Fields[11].AsBoolean = True then begin ClientDataSet2.Open; ClientDataSet2.Append; ClientDataSet2.FieldByName('序号').AsString:=ClientDataSet1.FieldByName('序号').AsString; ClientDataSet2.FieldByName('点号').AsString:=ClientDataSet1.FieldByName('点号').AsString ClientDataSet2.ApplyUpdates (0); ClientDataSet1.Delete; ADOquery2.Close; ADOquery2.SQL.Clear; ADOquery2.SQL.Add('select * from Input'); ADOquery2.Open; with DataSetProvider1.DataSet.FieldByName( '序号' ) do ProviderFlags := ProviderFlags + [ pfInKey ]; ClientDataSet1.ApplyUpdates (0); end; end; ClientDataSet1.Prior; end; end;
zhongzhen2014 2014-09-11
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你的删除有问题,你这样删不干净,你最好倒着来,从后往前删
能不能说的具体点,谢谢大神。
bdmh 2014-09-11
  • 打赏
  • 举报
回复
你的删除有问题,你这样删不干净,你最好倒着来,从后往前删

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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