【问题标题】:Progress 4GL - PaginationProgress 4GL - 分页
【发布时间】:2014-11-10 19:35:54
【问题描述】:

在 PHP 和 MySQL 中,我可以像这样对数据进行分页:

select * from customers LIMIT $start, $limit;

结果将返回我请求的页面。使用 Progress 4GL 可以做这样的事情吗?

  • 我不使用 -> select from customers
  • 我使用 -> for each customers

但是如何为该查询搜索设置限制和页面?

分页示例:

我的数据库中有 20.000 个客户。在我进行的每次搜索中,我都想将结果分开。我想发送给应用程序的限制是 100 行,每行 1000。当用户按下第 2 页时,它会返回另外 100 行(但不是旧的 100 行)。

这有意义吗?


更新

我正在使用 Adob​​e 的一项名为 Flex 的技术。 Flex 语言不直接连接到数据库,它依赖于后端语言来做到这一点。

所以我使用的是 Flex 和 Progress 4GL。我的 flex 应用程序有一个数据网格(如 4GL 中的浏览器)来显示从我的 4GL 数据库中检索到的数据。

问题是数据库很大,所以我需要对数据进行分页。每次用户单击另一个页面时,Flex 应用程序都必须与 Progress 4GL 通信以检索其他页面数据。但是,每次单击按钮都是一次不同的调用,因此 Progress 不会知道上一个查询。

如何使用查询从第 1 页转到第 7 页?

【问题讨论】:

  • 你需要更具体一点,因为有很多方法可以做你想做的事,解决方案取决于你正在做的事情的具体背景和它的要求。
  • 嗨蒂姆,感谢您的回答。我已经更新了主题。如果可以,请立即查看。
  • 查询将是要走的路。我添加了一个 Progress KB 的链接,用于将记录批处理到 dotNet 代码,我认为这将有助于您的 flex 应用程序。
  • 有几种方法。最简单的方法是使用起始值和计数。计数达到后休息。然后,如果您想获取下一个块调用具有新起始值的相同代码(这将是 > 然后是上一个结果的最后一个值。

标签: pagination progress-4gl


【解决方案1】:

【讨论】:

  • 感谢蒂姆的回答。在 .p 文件中,定义并打开了一个查询:OPEN QUERY lvQuery FOR EACH Customer NO-LOCK。但是每次用户单击按钮时,flex 应用程序都会调用这个 .p 文件。由于我的数据集很大,每次我请求这个 .p 文件时不会花费大量时间来做:“为每个客户”?
  • 与 SQL 不同,进度查询在打开查询时并未完全解析。数据库引擎会根据需要查找记录。
  • 知道了!但是,看到代码似乎限制了将返回的数据量以及何时请求它带来下一页。但是,如果我在第 2 页并想转到第 7 页怎么办?我该如何设置?
  • 您需要计算偏移量以获得第 7 页的开头,或者通读中间记录才能到达那里。幸运的是,如果进度查询是给出了一个很好的索引来遵循。另外,如果这是您正在寻找的答案,您需要标记它并给它一个upvote pls and thx!
  • 是的,我会投票给你答案。请再做一件事。如果我得到浏览器最后一个寄存器的 ROWID,那么我可以设置如下内容:“REPOSITION q1 TO ROWID r-rowid NO-ERROR。REPOSITION q1 FORWARD 50。”如果我每页设置 10 个寄存器,那么 50 代表 5 页。但是您的第一个提示是计算偏移量,我该怎么做,然后将查询设置为直接转到页面?这种方式似乎更快。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2017-07-18
  • 2012-03-19
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多