问题很常见,让我们看看OpenEdge中每个问题在代码可读性,灵活性和性能方面的优缺点。
静态查询:
+ readability: convenient `buffer.field` notation
+ performance: higher (supposedly, need comments)
-/+ "global scope" allows to handle all previously used buffers, but could lead
to ambiguousness, so you'll have to clarify it with a table
name (table.field instead of field)
- flexibility: you cannot alternate predicate-expression much,
even IF function is not recommended (can affect performance)
动态查询:
+ flexibility: you can build predicate-expression completely runtime
+ flexibility: you can work with each field not specifying its name,
f.e. you can process all fields of certain record in cycle
+ flexibility: are reusable (need comments on this point)
+/- "local scope" allows to use only buffers specified in `SET-BUFFERS` method
- readability: a little more code to write
- performance: slightly slower (not sure)
欢迎加入和更正。以及任何相关阅读的链接。
答案 0 :(得分:4)
静态查询的过滤条件可以“动态”更改,如下所示:
DEFINE QUERY q-name FOR table-name.
DEFINE VARIABLE h-qry AS HANDLE NO-UNDO.
h-qry = QUERY q-name:HANDLE.
h-qry:QUERY-PREPARE("for each table-name where table-name.field-name = 1").
从这里查询被视为与任何普通静态查询相同。
可读性:“buffer-handle:buffer-field(”field-name“):buffer-value”construct指动态缓冲区 - 在动态查询中使用静态缓冲区是完全可以接受的(通过BUFFER表名: HANDLE),因此动态查询缓冲区可以用于静态缓冲区,并不总是需要使用它的句柄来取消引用字段。
性能:上次进行比较时,对于相同的查询条件,动态查询比静态查询慢。好处是它们比静态查询更灵活。
可重用性:一旦设置了动态查询的缓冲区结构,AFAIK就无法更改。它可以使用与静态查询相同的新过滤条件重新打开。