每次INSERT还是跑到DBGRID的最下面(100分)

  • 主题发起人 主题发起人 youngyu
  • 开始时间 开始时间
Y

youngyu

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TDataModuleXS.ADOQueryXSBeforeInsert(DataSet: TDataSet);
begin
InsertOrderNo:=ADOQueryXs.FieldByName('orderno').asinteger;

end;

procedure TDataModuleXS.ADOQueryXSAfterInsert(DataSet: TDataSet);
Var MyLocate:Boolean;
MyIDKey:integer;
begin
MyIDKey:=ADOQueryXs.FieldByName('Id').asinteger;
ADOQueryXs.FieldByName('orderno').asinteger:=InsertOrderNo;
ADOQueryXs.first;
while not ADOQueryXs.Eof do
begin
If ADOQueryXs.fieldbyname('orderno').asinteger>=InsertOrderNo then
begin
If ADOQueryXs.FieldByName('Id').asinteger<>MyIDKey Then
begin
ADOQueryXs.edit;
ADOQueryXs.fieldbyname('orderno').asinteger:=ADOQueryXs.fieldbyname('orderno').asinteger+1;
end;
end;
ADOQueryXs.Next;
end;

// ADOQueryXs.Refresh;

end;

每次INSERT还是跑到DBGRID的最下面。
Id为自增主键,
orderno已建立索引,
重新开启后才见到想排的次序。

注:不能重新再ORDER,因为此时还没有提交。其实本来就没有ORDER BY ORDERNO,因为
orderno已建立索引.
 
刷新一下看看
 
ADOQueryXs.Refresh; 没有作用
 
ADOQueryXS.Sort := 'Orderno ASC';
 
ADOQueryXS.Close;
ADOQueryXS.Open;
 
ADOQueryXs.requery;
我就是这么解决的
 
procedure TDataModuleXS.ADOQueryXSBeforeInsert(DataSet: TDataSet);
begin
[red] ADDOQUeryXs.disablecontrols;[/red]
InsertOrderNo:=ADOQueryXs.FieldByName('orderno').asinteger;

end;

procedure TDataModuleXS.ADOQueryXSAfterInsert(DataSet: TDataSet);
Var MyLocate:Boolean;
MyIDKey:integer;
begin
MyIDKey:=ADOQueryXs.FieldByName('Id').asinteger;
ADOQueryXs.FieldByName('orderno').asinteger:=InsertOrderNo;
ADOQueryXs.first;
while not ADOQueryXs.Eof do
begin
If ADOQueryXs.fieldbyname('orderno').asinteger>=InsertOrderNo then
begin
If ADOQueryXs.FieldByName('Id').asinteger<>MyIDKey Then
begin
ADOQueryXs.edit;
ADOQueryXs.fieldbyname('orderno').asinteger:=ADOQueryXs.fieldbyname('orderno').asinteger+1;
end;
end;
ADOQueryXs.Next;
end;
[red] ADDOQUeryXs.enablecontrols;[/red]

// ADOQueryXs.Refresh;

end;
 
只有qianwt 的方法
ADOQueryXS.Sort := 'Orderno ASC';
解决这一问题,
但后面不能加 ADOQueryXs.Refresh;

另外的看上去也有道理,可能是环境不同吧。
谢谢大家。
 

Similar threads

后退
顶部