【发布时间】:2013-05-30 19:22:43
【问题描述】:
这就是我的情况。
我必须使用一些遗留代码。这段代码给了我一个查询对象,我必须附加一些行。基本上,我需要复制1行N次(N不是常数),然后手动调整一些数据。
现在,至少 IMO 我正在做的事情确实不是正确的做事方式。我更愿意返回一个不需要在 CF 端进行修改并在数据库上生成正确数据集的查询对象。但是,唉,我无法访问原始查询:(
所以这是我的破解。我决定编写一个复制查询行的通用函数,然后我可以在添加副本后手动设置所需的任何单元格。
请看下面:
private function duplicateQueryRow(
required query originalQuery,
required numeric rowNum
) {
queryAddRow(arguments.originalQuery, 1);
for (local.i = 1; local.i LTE listLen(originalQuery.columnList); local.i += 1) {
columnName = listGetAt(originalQuery.columnlist, i);
querySetCell(originalQuery, columnName, originalQuery[columnName][rowNum], originalQuery.recordcount);
}
}
问题:
假设某些列是 NULL。
例如,假设 ACOLUMN 列在第 5 行的值为 NULL。
当我这样做时,最后一行的 ACOLUMN 值将是“”,因为 CF 不处理 NULL。现在,如果我执行select distinct ACOLUMN from QUERY_NAME,我将得到第 5 行和自 NULL <> [empty string] 以来的最新行。
我确实有一个解决方案,它在下面:
private function duplicateQueryRow(
required query originalQuery,
required numeric rowNum
) {
queryAddRow(arguments.originalQuery, 1);
for (local.i = 1; local.i LTE listLen(originalQuery.columnList); local.i += 1) {
columnName = listGetAt(originalQuery.columnlist, i);
if (originalQuery[columnName][rowNum] NEQ "") {
querySetCell(originalQuery, columnName, originalQuery[columnName][rowNum], originalQuery.recordcount);
}
}
}
这行得通,因为现在不会复制 NULL,但我只是不相信这是正确的....
想知道是否有人有更好的解决方案?或者至少看看这个功能是否有问题。我想的要求是对于一个给定查询和要复制的 rowNumber 的函数将返回查询,并在末尾带有查询的 rowNumber 行的副本。
提前致谢!
【问题讨论】: