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

Maximum number of bytes in report exceeded Error while using API do_query in Quickbase

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

Errcode : 75

Errtext : Report too large

Errdetails : Maximum number of bytes in report exceeded

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

我正在通过以下方式查询:

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

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

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

我刚刚 运行 解决了这个问题,还有一份只有 4 个字段但超过 12 万条记录的报告。您可以使用 API_DoQueryCount 结合 API_DoQuery 选项“num-n(n 是到 return 的记录数)来获取查询的记录总数 return ”和“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}.skp-{retrievedRecords}
  myCSV += tempRecords
  retrievedRecords += 1000

虽然上面的示例过于简化并且省略了 XML 到 CSV 的转换步骤,但我认为它可以让您初步了解如何完成此操作。有关如何使用 DoQuery 选项的更多信息,请参阅 documentation

此外,我们的报告在超过 110,000 条记录后的某个时候停止 returning 记录,因此他们似乎已经扩大了之前的限制。我还会研究一下您一次 return 有多少条记录,并使用您能找到的最大安全数字来减少您的应用程序必须发出的请求数,以便它执行得更快。