运行以下代码,第一次运行时可以实现添加和删除,但是第二次点击就出错,重新打开后点击就有可以实现相关的功能,
运行以下代码,第一次运行时可以实现添加和删除,但是第二次点击就出错,重新打开后点击就有可以实现相关的功能,求助?
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中插入重复键。求帮忙
------解决思路----------------------
你的删除有问题,你这样删不干净,你最好倒着来,从后往前删
------解决思路----------------------
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;
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中插入重复键。求帮忙
------解决思路----------------------
你的删除有问题,你这样删不干净,你最好倒着来,从后往前删
------解决思路----------------------
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;