请各位高手帮我看看,为什么点击“保存”按钮后,会出现这样的错误信息:“由于将在索引、主关键字中创建重复的值,请求对表的改变没有成功。改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。”我的代码如下:procedure TfmHiddenRecord.fmHRBtnNew26Click(Sender: TObject);
begin
DMMain.dsHiddenMaster.DataSet.Append;
DMMain.dsHiddenDetails.DataSet.Append;
fmHRedCode0.Text := '0000'+ IntToStr(DMMain.dsHiddenMaster.DataSet.RecordCount + 1);
end;procedure TfmHiddenRecord.fmHRBtnSave30Click(Sender: TObject);
var
HiddenLines, MeasureLines: Integer;
begin
IF (DMMain.dsHiddenDetails.DataSet.State = dsInsert) And
(fmHiddenRecord.fmHRreDetails7.Text = '') Then
begin
MessageBox(0, '隐患内容不能为空' + #13#10 + #13#10 +
'本次操作将被取消!', '提示', mb_OK + mb_IconExclaMation);
fmHiddenRecord.fmHRreDetails7.SetFocus;
Abort;
end; IF (DMMain.dsHiddenDetails.DataSet.State = dsInsert) And
(fmHiddenRecord.fmHRreMeasure8.Text = '') Then
begin
MessageBox(0, '整改措施不能为空' + #13#10 + #13#10 +
'本次操作将被取消!', '提示', mb_OK + mb_IconExclaMation);
fmHiddenRecord.fmHRreMeasure8.SetFocus;
Abort;
end; IF (DMMain.dsHiddenMaster.DataSet.State <> dsInsert) OR (DMMain.dsHiddenDetails.DataSet.State <> dsInsert) Then
Abort
Else
begin
DMMain.dsHiddenMaster.DataSet.FieldByName('隐患编号').AsInteger :=
StrToInt(fmHiddenRecord.fmHRedCode0.Text);
DMMain.dsHiddenMaster.DataSet.FieldByName('检查日期').AsDateTime :=
fmHiddenRecord.fmHRdtExamine1.Date;
DMMain.dsHiddenMaster.DataSet.FieldByName('被检单位').AsString :=
fmHiddenRecord.fmHRcboxUnit2.Text;
DMMain.dsHiddenMaster.DataSet.FieldByName('负责人').AsString :=
fmHiddenRecord.fmHRcboxReceived3.Text;
DMMain.dsHiddenMaster.DataSet.FieldByName('检查人').AsString :=
fmHiddenRecord.fmHRcboxRummager4.Text;
DMMain.dsHiddenMaster.DataSet.FieldByName('检查单位意见').AsString :=
fmHiddenRecord.fmHRedIdea6.Text;
IF fmHiddenRecord.fmHRcboxDeadline5.Text <> '10天' Then
begin
DMMain.dsHiddenMaster.DataSet.FieldByName('整改期限').AsInteger :=
StrToInt(Copy(fmHiddenRecord.fmHRcboxDeadline5.Text, 1,
Pos('天', fmHiddenRecord.fmHRcboxDeadline5.Text) - 1));
end
ELSE
begin
DMMain.dsHiddenMaster.DataSet.FieldByName('整改期限').AsInteger :=
StrToInt(Copy(fmHiddenRecord.fmHRcboxDeadline5.Text, 1,
Pos('天', fmHiddenRecord.fmHRcboxDeadline5.Text) - 1));
end;
For HiddenLines := 0 to fmHiddenRecord.fmHRreDetails7.Lines.Count - 1 Do
For MeasureLines := 0 to fmHiddenRecord.fmHRreMeasure8.Lines.Count - 1 Do
begin
DMMain.dsHiddenDetails.DataSet.Append;
DMMain.dsHiddenDetails.DataSet.FieldByName('父编号').AsInteger :=
StrToInt(fmHiddenRecord.fmHRedCode0.Text);
DMMain.dsHiddenDetails.DataSet.FieldByName('编号').AsString :=
fmHiddenRecord.fmHRedCode0.Text + '-' + '1';
DMMain.dsHiddenDetails.DataSet.FieldByName('隐患内容').AsString :=
fmHiddenRecord.fmHRreDetails7.Lines.Strings[HiddenLines];
DMMain.dsHiddenDetails.DataSet.FieldByName('整改措施').AsString :=
fmHiddenRecord.fmHRreMeasure8.Lines.Strings[MeasureLines];
end;
end;
IF (DMMain.dsHiddenMaster.DataSet.State = dsInsert) And
(DMMain.dsHiddenDetails.DataSet.State = dsInsert) Then
begin
DMMain.dsHiddenDetails.DataSet.Post;
DMMain.dsHiddenMaster.DataSet.Post;
end;
end;
begin
DMMain.dsHiddenMaster.DataSet.Append;
DMMain.dsHiddenDetails.DataSet.Append;
fmHRedCode0.Text := '0000'+ IntToStr(DMMain.dsHiddenMaster.DataSet.RecordCount + 1);
end;procedure TfmHiddenRecord.fmHRBtnSave30Click(Sender: TObject);
var
HiddenLines, MeasureLines: Integer;
begin
IF (DMMain.dsHiddenDetails.DataSet.State = dsInsert) And
(fmHiddenRecord.fmHRreDetails7.Text = '') Then
begin
MessageBox(0, '隐患内容不能为空' + #13#10 + #13#10 +
'本次操作将被取消!', '提示', mb_OK + mb_IconExclaMation);
fmHiddenRecord.fmHRreDetails7.SetFocus;
Abort;
end; IF (DMMain.dsHiddenDetails.DataSet.State = dsInsert) And
(fmHiddenRecord.fmHRreMeasure8.Text = '') Then
begin
MessageBox(0, '整改措施不能为空' + #13#10 + #13#10 +
'本次操作将被取消!', '提示', mb_OK + mb_IconExclaMation);
fmHiddenRecord.fmHRreMeasure8.SetFocus;
Abort;
end; IF (DMMain.dsHiddenMaster.DataSet.State <> dsInsert) OR (DMMain.dsHiddenDetails.DataSet.State <> dsInsert) Then
Abort
Else
begin
DMMain.dsHiddenMaster.DataSet.FieldByName('隐患编号').AsInteger :=
StrToInt(fmHiddenRecord.fmHRedCode0.Text);
DMMain.dsHiddenMaster.DataSet.FieldByName('检查日期').AsDateTime :=
fmHiddenRecord.fmHRdtExamine1.Date;
DMMain.dsHiddenMaster.DataSet.FieldByName('被检单位').AsString :=
fmHiddenRecord.fmHRcboxUnit2.Text;
DMMain.dsHiddenMaster.DataSet.FieldByName('负责人').AsString :=
fmHiddenRecord.fmHRcboxReceived3.Text;
DMMain.dsHiddenMaster.DataSet.FieldByName('检查人').AsString :=
fmHiddenRecord.fmHRcboxRummager4.Text;
DMMain.dsHiddenMaster.DataSet.FieldByName('检查单位意见').AsString :=
fmHiddenRecord.fmHRedIdea6.Text;
IF fmHiddenRecord.fmHRcboxDeadline5.Text <> '10天' Then
begin
DMMain.dsHiddenMaster.DataSet.FieldByName('整改期限').AsInteger :=
StrToInt(Copy(fmHiddenRecord.fmHRcboxDeadline5.Text, 1,
Pos('天', fmHiddenRecord.fmHRcboxDeadline5.Text) - 1));
end
ELSE
begin
DMMain.dsHiddenMaster.DataSet.FieldByName('整改期限').AsInteger :=
StrToInt(Copy(fmHiddenRecord.fmHRcboxDeadline5.Text, 1,
Pos('天', fmHiddenRecord.fmHRcboxDeadline5.Text) - 1));
end;
For HiddenLines := 0 to fmHiddenRecord.fmHRreDetails7.Lines.Count - 1 Do
For MeasureLines := 0 to fmHiddenRecord.fmHRreMeasure8.Lines.Count - 1 Do
begin
DMMain.dsHiddenDetails.DataSet.Append;
DMMain.dsHiddenDetails.DataSet.FieldByName('父编号').AsInteger :=
StrToInt(fmHiddenRecord.fmHRedCode0.Text);
DMMain.dsHiddenDetails.DataSet.FieldByName('编号').AsString :=
fmHiddenRecord.fmHRedCode0.Text + '-' + '1';
DMMain.dsHiddenDetails.DataSet.FieldByName('隐患内容').AsString :=
fmHiddenRecord.fmHRreDetails7.Lines.Strings[HiddenLines];
DMMain.dsHiddenDetails.DataSet.FieldByName('整改措施').AsString :=
fmHiddenRecord.fmHRreMeasure8.Lines.Strings[MeasureLines];
end;
end;
IF (DMMain.dsHiddenMaster.DataSet.State = dsInsert) And
(DMMain.dsHiddenDetails.DataSet.State = dsInsert) Then
begin
DMMain.dsHiddenDetails.DataSet.Post;
DMMain.dsHiddenMaster.DataSet.Post;
end;
end;
DMMain.dsHiddenDetails.DataSet.FieldByName('编号').AsString :=
fmHiddenRecord.fmHRedCode0.Text + '-' + '1';
......这语句在循环中对该字段赋同一个值而引起错误信息。另外,语句“fmHiddenRecord.fmHRedCode0.Text + '-' + '1'”为什么不写成“fmHiddenRecord.fmHRedCode0.Text + '-1'”呢?“fmHiddenRecord.fmHRedCode0.Text”这个值是否随着循环会变?
DMMain.dsHiddenDetails.DataSet.FieldByName('编号').AsString :=
fmHiddenRecord.fmHRedCode0.Text + '-' + '1';每次循环都对编号赋值同一个值,就会造成多笔记录重复编号了