我作了一个功能,主窗体里面有2个相关数据集DataSetBrokertan主数据集,DataSetBrokerming是从数据集。(我没有在信息层建主从关系,是在代码里面作的过滤用的usefilter)。。DataSetBrokerming(从)控制的是一个datagrid。
我点击下面的“导入设备明细按钮”弹出从数据集,从数据集也有相应的主从关系,“检验报告”tab页面的数据集是主窗体DataSetBrokertan的从数据集,“检验明细”tab页用的是窗体里面的Tsqldataset。
主窗体里面的DataSetBrokerming引用的数据集里面的数据表和从窗体Tsqldataset引用的数据表是一张物理表。。我所作的目的就是弹出从数据集,修改Tsqldataset里面一些选中数据里面的2个字段的值,然后在从窗体关闭的时候刷新主窗体的DataSetBrokerming,刷新grid。。。
现在遇到的问题是:当我在从数据集选中多条(大于三条)数据的时候,点击按钮修改数据,可是循环修改完成,每次都是只有其中的一部分作了数据修改,跟踪了一下,循环一半就停止了。。不知道为什么,有人说是数据延时。。我也弄不明白。。我想知道怎么解决比较好。。
主窗体弹出按钮的代码:
procedure TRKMX.Button1Click(Sender: TObject);
begin
with TDCCT.Create(Context) do
try
MainID:=DataSetBrokertan.DataSet.FieldByName('id').AsInteger;
ShowModal;
with Tsqldataset(DataSetBrokerming.DataSet) do
begin
close;
UserFilter := 'ACCENTANCE_NOTIFY_LIST.rkdbh = '+inttostr(MainID);
open;
end;
Finally
Free;
end;
end;
从窗体的Tsqldataset的过滤和确定按钮(就是可是保存数据库的循环按钮)代码:
procedure TDCCT.DataSetBrokerCheckOutAfterScroll(DataSet: TDataSet);
var
JYID:integer;
begin
JYID:= DataSetBrokerCheckOut.DataSet.FieldByName('id').AsInteger;
with TSqlDataSet(DataSource.DataSet) do
begin
Close;
UserFilter := 'ACCENTANCE_NOTIFY_LIST.ysdh = '+inttostr(JYID);
Open;
end;
end;
procedure TDCCT.Button1Click(Sender: TObject);
begin
with DataSource.DataSet do
begin
First;
while not Eof do
begin
if FieldByName('选择').asString = 'True' then
begin
Edit;
FieldByName('rkbz').AsInteger := 2;
FieldByName('kcsl').AsInteger := FieldByName('sssl').AsInteger;
showmessage(inttostr(Mainid));
FieldByName('rkdbh').AsInteger := MainID;
Post;
end;
Next;
end;
DataSetSBMX.ApplyUpdates;
end;