为什么会出现“数据集不是新建或编辑状态”这个异常
为什么会出现“数据集不是新建或编辑状态”这个错误
我提个问题,各位高手帮我看看为什么会出现“数据集不是新建或编辑状态”这个错误。
“新建”按钮放在窗体中,数据集组件放在TDataMoudal,TDataMoudal的名字是:DMMain。
我把“字段赋值”的代码放在主、从表的DMMain里主、从表数据集的BeforePost事件里。
procedure TfmHiddenRecord.fmHRBtnNew26Click(Sender: TObject);
begin
DMMain.dsHiddenMaster.DataSet.Append;
fmHRedCode0.Text := '0000'+ IntToStr(DMMain.dsHiddenMaster.DataSet.RecordCount + 1);
end;
procedure TDMMain.DMADOtbHiddenMasterBeforePost(DataSet: TDataSet);
begin
IF DMMain.dsHiddenMaster.DataSet.State = dsInsert Then
begin
隐患编号 := ……;
检查日期 := ……;
被检单位 := ……;
负责人 := ……;
检查人 := ……;
检查单位意见 := ……;
整改期限 := ……;
end;
end;
procedure TDMMain.DMADOtbHiddenDetailsBeforePost(DataSet: TDataSet);
var
HiddenLines, MeasureLines: Integer;
begin
IF DMMain.dsHiddenDetails.DataSet.State = dsInsert Then
begin
For HiddenLines := 0 to RichEdit1.Lines.Count - 1 Do
begin
DMMain.dsHiddenDetails.DataSet.Append;
父编号 := ……;
编号 := ……;
隐患内容 := RichEdit1.Lines.Strings[MeasureLines];
For MeasureLines := 0 to RichEdit2.Lines.Count - 1 Do
begin
整改措施 := RichEdit2.Lines.Strings[MeasureLines];
end;
end;
end;
procedure TfmHiddenRecord.fmHRBtnSave30Click(Sender: TObject);
begin
IF (主表 = dsInsert) And (从表 = dsInsert) Then
begin
主表.Post;
从表.Post;
end;
end;
每当点击“保存”,就会出现“从表数据集不是新建或编辑状态”,为什么?应该怎么改?
------解决方案--------------------
建议楼主要多看看书,新建/修改遵循这样的规则,总不会错
append/edit;
赋值
post/cancel;
post/cancel前可以判断是否是在编辑状态,可以这样
if dataset.state in [dsInsert,dsEdit] then
------解决方案--------------------
你的DMADOtbHiddenDetailsBeforePost使用循环了,当循环到最后时,编辑状态会自动变为非编辑状态
所以建议不要在BeforePost里使用循环插入,建议在按保存按钮时使用循环插入数据表的方式比较好!
------解决方案--------------------
procedure TfmHiddenRecord.fmHRBtnSave30Click(Sender: TObject);
begin
IF (主表 = dsInsert) And (从表 = dsInsert) Then
begin
主表.Post;
从表.Post;
end;
end;
——————————————————————————————
问题在这里,从表要先保存,两条语句交换顺序试试:
从表.Post;
主表.Post;
------解决方案--------------------
不能在BeforePost中设置状态...
正确的做法是用TDataSource.AutoEdit := true;
或是在编辑前用TDataSet.Edit方法.
我提个问题,各位高手帮我看看为什么会出现“数据集不是新建或编辑状态”这个错误。
“新建”按钮放在窗体中,数据集组件放在TDataMoudal,TDataMoudal的名字是:DMMain。
我把“字段赋值”的代码放在主、从表的DMMain里主、从表数据集的BeforePost事件里。
procedure TfmHiddenRecord.fmHRBtnNew26Click(Sender: TObject);
begin
DMMain.dsHiddenMaster.DataSet.Append;
fmHRedCode0.Text := '0000'+ IntToStr(DMMain.dsHiddenMaster.DataSet.RecordCount + 1);
end;
procedure TDMMain.DMADOtbHiddenMasterBeforePost(DataSet: TDataSet);
begin
IF DMMain.dsHiddenMaster.DataSet.State = dsInsert Then
begin
隐患编号 := ……;
检查日期 := ……;
被检单位 := ……;
负责人 := ……;
检查人 := ……;
检查单位意见 := ……;
整改期限 := ……;
end;
end;
procedure TDMMain.DMADOtbHiddenDetailsBeforePost(DataSet: TDataSet);
var
HiddenLines, MeasureLines: Integer;
begin
IF DMMain.dsHiddenDetails.DataSet.State = dsInsert Then
begin
For HiddenLines := 0 to RichEdit1.Lines.Count - 1 Do
begin
DMMain.dsHiddenDetails.DataSet.Append;
父编号 := ……;
编号 := ……;
隐患内容 := RichEdit1.Lines.Strings[MeasureLines];
For MeasureLines := 0 to RichEdit2.Lines.Count - 1 Do
begin
整改措施 := RichEdit2.Lines.Strings[MeasureLines];
end;
end;
end;
procedure TfmHiddenRecord.fmHRBtnSave30Click(Sender: TObject);
begin
IF (主表 = dsInsert) And (从表 = dsInsert) Then
begin
主表.Post;
从表.Post;
end;
end;
每当点击“保存”,就会出现“从表数据集不是新建或编辑状态”,为什么?应该怎么改?
------解决方案--------------------
建议楼主要多看看书,新建/修改遵循这样的规则,总不会错
append/edit;
赋值
post/cancel;
post/cancel前可以判断是否是在编辑状态,可以这样
if dataset.state in [dsInsert,dsEdit] then
------解决方案--------------------
你的DMADOtbHiddenDetailsBeforePost使用循环了,当循环到最后时,编辑状态会自动变为非编辑状态
所以建议不要在BeforePost里使用循环插入,建议在按保存按钮时使用循环插入数据表的方式比较好!
------解决方案--------------------
procedure TfmHiddenRecord.fmHRBtnSave30Click(Sender: TObject);
begin
IF (主表 = dsInsert) And (从表 = dsInsert) Then
begin
主表.Post;
从表.Post;
end;
end;
——————————————————————————————
问题在这里,从表要先保存,两条语句交换顺序试试:
从表.Post;
主表.Post;
------解决方案--------------------
不能在BeforePost中设置状态...
正确的做法是用TDataSource.AutoEdit := true;
或是在编辑前用TDataSet.Edit方法.