在AX编程最佳实践中,这是最好的方法:
什么时候使用它们?
答案 0 :(得分:9)
首先,AX始终在内部使用查询,X ++选择被转换为查询构造调用,这些调用在运行时执行。查询在运行时在第一个queryRun.next()
或datasource.executeQuery()
上转换为SQL。因此,使用其中一个没有性能差异。
表单也使用查询,通常它是自动构造的,因为属性AutoQuery
具有Yes默认值。您可以在executeQuery
方法中使用X ++选择,但我会考虑这种不好的做法,因为用户没有可用的过滤器或排序选项。始终在表单中使用查询,更喜欢使用自动查询。如果需要,使用init
在this.queryBuildDatasource()
方法中添加范围或排序。唯一的例外是总是使用AOT查询的列表页。
在RunBase
类中,我更喜欢使用查询,因为用户可以选择更改查询。您可能会在内部循环中使用简单的X ++ select,但如果可能,请考虑将其包含在预构建的查询中。
否则,作为程序员的主要目标(除了解决问题之外)是最小化代码行数。
AOT中定义的查询从零代码行开始,这些代码行对它们有利。因此,如果存在多个静态定义的范围,链接或复杂连接,请使用AOT查询。你不能打败:
QueryRun qr = new QueryRun(queryStr(MyQuery))
qr.query().dataSourceTable(tableNum(MyTable)).findRange(fieldNum(MyTable,MyField)).value('myValue');
使用:
Query q = new Query();
QueryRun qr = new QueryRun(q);
QueryBuildDataSource ds = q.addDataSource(tableNum(MyTable));
QueryBuildRange qbr = ds.addRange(fieldNum(MyTable,MyField));
qbr.value('myValue');
qbr.locked(true);
因此,在静态情况下,更喜欢使用AOT查询,然后在运行时根据需要更改查询。另一方面,如果您的表仅在运行时已知,则不能使用AOT查询,也不能选择X ++,并且您需要在运行时构建查询。表浏览器就是一个很好的例子。
X ++还剩下什么?
delete_from
,update_recordset
和insert_recordset
会浮现在脑海中。答案 1 :(得分:2)
在数据库中选择记录的主要技巧如下:
这些技术基本相同。它们都在一个可以访问的表变量中从数据库中提供一组记录。
在以下时间使用select语句:
在以下情况下使用查询:
在以下情况下在AOT中构建查询: