报告中的最大字节数超出了在Quickbase中使用API​​ do_query时出错

时间:2016-04-18 12:15:00

标签: c# quickbase

我在C#中使用QBApiWrap.QuickbaseApiWrapper.DoQuery来从我的表中获取记录。以前它一直很好。现在记录数已增加到30,000,我收到以下错误:

  

错误代码:75

     

Errtext:报告太大

     

Errdetails:超出报告的最大字节数

如何在单个数据集中获取所有记录?

我以下面的方式查询:

     DataSet dsEmployee = My_Integration.QBApiWrap.QuickbaseApiWrapper.DoQuery(dbIdEmployee, ticket, "","3.6.7.8.21.15");

2 个答案:

答案 0 :(得分:0)

Quickbase对查询超出的单个响应的大小有一个记录限制。要避免此错误,您需要减少查询返回的记录数。如果您实际上没有在程序中使用所有返回的记录,则应构建查询,以便排除未使用的记录。实际上,如果您需要该表中的所有记录,则需要批量下载它们,然后合并数据集。

不幸的是,我从未编写过C#,因此我无法帮助您解决语法问题,但是要批量下载记录,您可以在表DBID上使用API_GetSchema来获取下一个记录ID(table.original) .next_record_id)。此编号是创建下一条记录的记录ID。因此,您知道所有记录ID都小于该数字。使用0的下限和20,000的上限,可以查询记录ID大于下限且小于上限的记录。将结果与现有数据集合并,将两个边界增加20,000并重复,直到下限超过下一个记录ID编号。最后,您应该拥有一个可以与Quickbase表一起扩展的数据集和代码。

答案 1 :(得分:0)

我也遇到了一个问题,该报告只有4个字段,但记录超过12万。您可以结合使用API​​_DoQueryCount和API_DoQuery选项“ num-n(n为要返回的记录数”和“ skip-n(n为要跳过的记录数”)来获取查询将返回的记录总数。在下面的伪代码中对记录进行分页:

maxRecords = {API_DoQueryCount}
retrievedRecords = 0
recordChunk = 1000
myCSV = path\to\csv
tempRecords = ""
while (retrievedRecords < maxRecords)
  tempRecords = API_DoQuery&query="yourQuery"&options=num-{recordChunk}.skip-{retrievedRecords}
  myCSV += tempRecords
  retrievedRecords += 1000

虽然上面的示例过于简化,并且省去了XML到CSV的转换步骤,但我认为它为您提供了如何实现的初步思路。

此外,我们的报告在超过110,000条记录后的某个时间停止返回记录,因此看起来它们可能已经扩大了以前的限制。我还将考虑一次返回多少记录,并使用可以找到的最大安全数字来减少您的应用程序必须发出的请求数量,以便其执行更快。