使用 AL 添加、修改或删除数据

已完成

开发人员经常会被要求使用 AL 代码修改数据库中的数据。

以下语句允许修改数据:

  • Insert

  • Modify 和 ModifyAll

  • Delete 和 DeleteAll

Insert 语句

Insert 语句用于将新记录添加到数据库。 在插入数据之前,需要为要存储的每个字段设置值。 除了 modify 和 delete 命令之外,Insert 命令也接受 RunTrigger 布尔参数。 默认情况下参数值为 false

如果参数为 false,则 Insert 命令不会在表级别运行 OnInsert 触发器。 如果您希望运行 OnInsert 触发器,需要将本值设置为 true。 本操作的目的是为了提升性能。

本流程与将值分配给字段一致,因为它同样不在该字段运行 OnValidate 触发器。

var
    customer: Record Customer;
begin
    customer.Init();
    customer."No." := '4711';
    customer.Name := 'John Doe';
    customer.Insert(true);

虽然默认情况下 OnInsert 触发器未运行,但 OnBeforeInsertOnAfterInsert 事件始终运行。

Modify 和 ModifyAll 语句

要更改现有记录的值,您首先需要检索记录。 然后,您可以更新这些值并使用 Modify 函数在数据库中存储更改。

customer.Get('4711');
customer.Name := 'Richard Roe';
customer.Modify();

Insert 函数类似,您需要为 Modify 函数提供 true 值,才能在表级别运行 OnModify 触发器。

如果要同时更新多条记录,可以使用 ModifyAll 函数。 ModifyAll 函数接受 RunTrigger 参数作为此函数的第三个参数。

ModifyAll(Field, NewValue, [RunTrigger]

在以下示例中,首先检索销售员代码字段等于 (PS) 的所有记录,然后用值 (JR) 更新检索到的所有记录。

customer.SetRange("Salesperson Code", 'PS');
customer.ModifyAll("Salesperson Code", 'JR');

ModifyModifyAll 函数不会向您请求确认;运行修改时不会发出警告。

Delete 和 DeleteAll 语句

Modify 函数一样,您需要先从数据库中检索记录,然后才能删除记录。 DeleteDeleteAll 函数接受 RunTrigger 参数。

customer.Get('4711');
customer.Delete(true);

DeleteAll 函数可同时删除多条记录。

customer.SetRange("Salesperson Code", 'PS');
customer.DeleteAll();

DeleteDeleteAll 函数不会向您请求确认;删除完成后不会发出警告。