使用 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
触发器未运行,但 OnBeforeInsert
或 OnAfterInsert
事件始终运行。
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');
Modify
和 ModifyAll
函数不会向您请求确认;运行修改时不会发出警告。
Delete 和 DeleteAll 语句
与 Modify
函数一样,您需要先从数据库中检索记录,然后才能删除记录。 Delete
和 DeleteAll
函数接受 RunTrigger
参数。
customer.Get('4711');
customer.Delete(true);
DeleteAll
函数可同时删除多条记录。
customer.SetRange("Salesperson Code", 'PS');
customer.DeleteAll();
Delete
和 DeleteAll
函数不会向您请求确认;删除完成后不会发出警告。