Delphi – 在DBGrid中恢复实际行

Delphi – 在DBGrid中恢复实际行,第1张

概述D6教授. 以前我们使用DBISAM和DBISAMTable.处理RecNo,它可以很好地修改(删除,编辑等). 现在我们替换为不处理RecNo的ElevateDB,很多时候我们使用Queries而不是Tables. 查询必须重新打开以查看修改. 但是如果我们重新打开查询,我们需要重新定位到最后一条记录. 定位是不够的,因为Grid在另一行中显示它. 这是非常令人不安的事情,因为在修改记录进入另一 D6教授.

以前我们使用DBISAM和DBISAMtable.处理RecNo,它可以很好地修改(删除,编辑等).

现在我们替换为不处理RecNo的ElevateDB,很多时候我们使用QuerIEs而不是tables.

查询必须重新打开以查看修改.

但是如果我们重新打开查询,我们需要重新定位到最后一条记录.
定位是不够的,因为GrID在另一行中显示它.
这是非常令人不安的事情,因为在修改记录进入另一行之后,你很难遵循它,并且用户讨厌这个.

我们发现此代码:

function TBaseDBGrID.GetActRow: integer;begin Result := -1 + Row;end;procedure TBasepDBGrID.SetActRow(aRow: integer);var bm : TBookMark;begin if IsDataSourceValID(DataSource) then with DataSource.DataSet do begin  bm := GetBookmark;  disableControls;  try   MoveBy(-aRow);   MoveBy(aRow);   //GotoBookmark(bm);  finally   FreebookMark(bm);   EnableControls;  end; end;end;

最初的例子是使用moveby.这与QuerIEs工作正常,因为我们无法看到query在后台重新打开,视觉控件不会改变行位置.

但是当我们有EDBtable或live / Sensitive query时,MoveBy使用起来很危险,因为如果有人删除或追加新行,我们可以重新定位到错误的记录中.

然后我尝试使用BookMark(见注释).但是这种技术不起作用,因为它在另一个Row位置显示记录……

那么问题:如何在DBGrID中强制行位置和记录?

或者,在基础DataSet刷新后,哪种DBGrID可以重定位到记录/行?

我搜索用户友好的解决方案,我理解他们,因为我试图使用这个跳过DBGrID,并且使用非常糟糕,因为我的眼睛在更新后试图找到原始记录时出现… 总结

以上是内存溢出为你收集整理的Delphi – 在DBGrid中恢复实际行全部内容,希望文章能够帮你解决Delphi – 在DBGrid中恢复实际行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1279322.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存