我现在也改的只有afterPost一个方法了,代码如下
procedure TXLXX.DataSetQYLJSJJ2AfterPost(DataSet: TDataSet);
var
nId : Integer;
sId : WideString;
begin
DataSetQYLJSJJ2.AfterPost := nil;
with DataSetQYLJSJJ2 do
begin
sId := DataSet.FieldByName('QYLJID').Text;
nId := DataSet.FieldByName('XH').AsInteger;
DataSet.First;
while not DataSet.Eof do
begin
if (sId <> DataSet.FieldByName('QYLJID').Text)
and (nId <= DataSet.FieldByName('XH').AsInteger) then
begin
Dataset.Edit;
DataSet.FieldByName('XH').AsInteger := DataSet.FieldByName('XH').AsInteger + 1;
DataSet.Post;
end;
DataSet.Next;
end;
end;
DataSetQYLJSJJ2.AfterPost := DataSetQYLJSJJ2AfterPost;
end;
运行以后,按保存后的确是+1了,但是弹出来一个对话框,又是重复键的那个
请问该怎么收拾
真郁闷啊!!!!!!!!!!!!!!!!!!!!!!
是不是因为我的数据集跨了两个表啊还是怎么搞的
如果写在beforePost中,这样写应没有问题。另外,楼主最好想好思路,然后再设计。不然会步步为坚的。
以下的思路是:当保存当前记录后,就查一遍数据集,以调整序号。
procedure TMainForm.DataSetBroker1BeforePost(DataSet: TDataSet);
var
nId : Integer;
sId : WideString;
begin
DataSetBroker1.BeforePost := nil;
with dATAsETbROKER1 do
begin
sId := DataSet.FieldByName('YQID').Text;
nId := DataSet.FieldByName('ZD').AsInteger;
DataSet.First; //从第一条开始
while not DataSet.Eof do
begin
if (sId <> DataSet.FieldByName('YQID').Text)
and (nId < DataSet.FieldByName('ZD').AsInteger) then
begin
Dataset.Edit;
DataSet.FieldByName('ZD').AsInteger := DataSet.FieldByName('ZD').AsInteger + 1;
DataSet.Post;
end;
DataSet.Next;
end;
DataSet.Edit;
end;
DataSetBroker1.BeforePost := DataSetBroker1BeforePost;
end;
嗯,我昨天单独做了个功能测试了一下,结果运行很好,也可以增加删除修改。方法就只写了beforePost里面的那些,具体是
procedure TXLXX.DataSetQYLJCSSJJBeforePost(DataSet: TDataSet);
var
nId : Integer;
sId : WideString;
xId : WideString;
begin
DataSetQYLJCSSJJ.BeforePost := nil;
with DataSetQYLJCSSJJ do
begin
sId := DataSet.FieldByName('QYLJID').Text;
nId := DataSet.FieldByName('XH').AsInteger;
xId := DataSet.FieldByName('XLID').Text;
DataSet.First;
while not DataSet.Eof do
begin
if (sId <> DataSet.FieldByName('QYLJID').Text)
and (nId <= DataSet.FieldByName('XH').AsInteger)
and (xID = DataSet.FieldByName('XLID').Text) then
begin
Dataset.Edit;
DataSet.FieldByName('XH').AsInteger := DataSet.FieldByName('XH').AsInteger + 1;
DataSet.Post;
end;
DataSet.Next;
end;
DataSet.Edit;
end;
DataSetQYLJCSSJJ.BeforePost := DataSetQYLJCSSJJBeforePost;
end;