如何解决QUERY-PREPARE() 加载时间过长这是最好的选择吗?
每个 it-codigo 都有 1 个或多个 es-codigo。我正在尝试找到 it-codigo 输入的所有 es-codigo,但是花费的时间太长了。我在我的代码中做错了什么吗?对于我所看到的,一切都很好,除非我不知道我做错了什么。在这种情况下,QUERY-PREPARE() 是最佳选择吗?
DEF VAR qEstrutura AS CHAR.
IF pi-cod-emitente <> 0 THEN DO:
qEstrutura = " WHERE item-cli.cod-emitente = " + QUOTER(pi-cod-emitente).
END.
IF pc-it-codigo <> "" THEN DO:
IF qEstrutura = "" THEN
qEstrutura = " WHERE estrutura.it-codigo = " + QUOTER(pc-it-codigo).
ELSE
qEstrutura = qEstrutura + " AND estrutura.it-codigo = " + QUOTER(pc-it-codigo).
END.
IF pc-item-cli <> "" THEN DO:
IF qEstrutura = "" THEN
qEstrutura = " WHERE item-cli.item-do-cli = " + QUOTER(pc-item-cli).
ELSE
qEstrutura = qEstrutura + " AND item-cli.item-do-cli = " + QUOTER(pc-item-cli).
END.
cQuery = cQuery + " FOR EACH item-cli,".
cQuery = cQuery + " EACH estrutura ".
cQuery = cQuery + qEstrutura + " BREAK BY estrutura.es-codigo".
QUERY qConsulta:QUERY-PREPARE(cQuery).
QUERY qConsulta:QUERY-open().
GET FirsT qConsulta.
do while AVAILABLE item-cli:
IF QUERY qConsulta:FirsT-OF(1) THEN DO:
CREATE tt-estrutura.
ASSIGN
tt-estrutura.it-codigo = estrutura.it-codigo
tt-estrutura.es-codigo = estrutura.es-codigo
.
GET NEXT qConsulta.
END.
END.
QUERY qConsulta:QUERY-CLOSE().
FOR EACH tt-estrutura:
disP tt-estrutura.
END.
解决方法
我相信 QUERY-OPEN() 需要时间。不是 QUERY-PREPARE()。
您的查询仅对第二个表执行选择 (WHERE) 和排序 (BY)。这使得很难利用指标。 OpenEdge ABL 查询引擎不支持翻转缓冲区序列。尝试扭转查询:
对于每个 estrutura WHERE ......,第一个 item-cli。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。