Partilhar via


Update e UpdateIf funções

Aplica-se a: Aplicativos de tela Aplicativos orientados por modelos

Atualiza os registos numa origem de dados.

Descrição

Update Função

Use a Update função para substituir um registro inteiro em uma fonte de dados. Em contraste, as UpdateIf funções e Patch modificam um ou mais valores em um registro, deixando os outros valores sozinhos.

Numa coleção, todo o registo tem de corresponder. As coleções permitem duplicar registos, pelo que vários registos podem ter correspondência. Pode utilizar o argumento RemoveFlags.All para atualizar todas as cópias de um registo. Caso contrário, apenas uma cópia do registo é atualizada.

Se a origem de dados gerar o valor de uma coluna automaticamente, o valor dessa coluna terá de ser reafirmado.

UpdateIf Função

Use a UpdateIf função para modificar um ou mais valores em um ou mais registros que correspondam a uma ou mais condições. Cada condição pode ser uma fórmula que resulta num valor true ou false e pode referenciar as colunas da origem de dados por nome. A função avalia a condição de cada registo e modifica qualquer registo para o qual o resultado seja true.

Para especificar uma modificação, utilize um registo de alteração com novos valores de propriedade. Se fornecer esta alteração de registo inline com chavetas, as fórmulas de propriedade poderão referenciar propriedades do registo que está a ser modificado. Pode utilizar este comportamento para modificar registos com base numa fórmula.

Semelhante ao UpdateIf, você também pode usar a função Patch para alterar colunas específicas de um registro sem afetar outras colunas.

Ambos Update e UpdateIf retornar a fonte de dados modificada como uma tabela. Tem de utilizar uma ou outra função numa fórmula de comportamento.

Delegação

Essas funções não delegam a uma fonte de dados. No entanto, UpdateIf e RemoveIf funcionam localmente para simular a delegação até um limite de 500/2000 registros. Reduzem progressivamente os registos para além do limite de não delegação de 500/2000 registos. Os registros que atendem à condição If são coletados. Geralmente, um máximo de 500/2000 registros são coletados separadamente e, em seguida, modificados por execução. No entanto, mais registros podem ser atualizados se o cache de dados local existente for grande, pois a função pode ter acesso a mais registros para avaliação. Somente a parte inicial da fonte de dados será recuperada e, em seguida, a função será aplicada. Isto pode não representar o quadro completo. Um aviso pode aparecer durante a criação para lembrá-lo dessa limitação.

Sintaxe

Update(DataSource_, OldRecord, NewRecord [, RemoveFlags.All ] )

  • DataSource – Obrigatório. A origem de dados que contém o registo que pretende substituir.
  • OldRecord – Obrigatório. O registo a substituir.
  • NewRecord – Obrigatório. O registo de substituição. Esta operação não é um registo de alteração. O registro inteiro é substituído e as propriedades ausentes contêm espaço em branco.
  • RemoveFlags.All — Opcional. Numa coleção, o mesmo registo pode aparecer mais do que uma vez. Especifique o argumento RemoveFlags.All para atualizar todas as cópias do registo.

UpdateIf(DataSource_, Condição1, ChangeRecord1 [, Condição2, ChangeRecord2, ... ] )

  • DataSource – Obrigatório. A origem de dados que contém um ou mais registos que pretende modificar.
  • Condições – Obrigatório. Uma fórmula que avalia como true um ou mais registos que pretende modificar. Pode utilizar nomes de colunas de DataSource na fórmula. Caso várias Condições sejam aprovadas, somente o ChangeRecord relacionado à primeira Condição avaliada como true será aplicado.
  • ChangeRecord(s) – Obrigatório. Para cada condição correspondente, um registo de alteração dos novos valores de propriedade a aplicar aos registos de DataSource que satisfaçam a condição. Se fornecer o registo inline com chavetas, poderão ser utilizados valores de propriedade do registo existente nas fórmulas de propriedade.

Exemplos

Nestes exemplos, vai remover um ou mais registos de uma origem de dados denominada IceCream e que começa com os dados nesta tabela:

Exemplo de IceCream.

Fórmula Descrição Resultado
Update( Sorvete,
LookUp( Sorvete, Flavor="Chocolate" ), { ID: 1, Sabor: "Chocolate Hortelã", Quantidade:150 } )
Substitui um registo da origem de dados. Substituir um registo.

A origem de dados IceCream foi modificada.
UpdateIf( Sorvete, Quantidade > 175, { Quantidade: Quantidade + 10 } ) Modifica registos com Quantidade superior a 175. O campo Quantidade é incrementado em 10 e não é modificado mais nenhum campo. Modificar registos.

A origem de dados IceCream foi modificada.
Update( Sorvete,
LookUp( Sorvete, Sabor = "Morango" ),
{ ID: 3, Sabor: "Redemoinho de Morango"} )
Substitui um registo da origem de dados. A propriedade Quantity ainda não foi fornecida no registo de substituição, razão pela qual essa propriedade estará blank nos resultados. Substituir o registo quando a quantidade não for fornecida.

A origem de dados IceCream foi modificada.
UpdateIf( Sorvete, verdadeiro, { Quantidade: 0 } ) Define o valor da propriedade Quantity para todos os registos da origem de dados como 0. Definir quantidade para todos para 0.

A origem de dados IceCream foi modificada.

Passo a passo

  1. Importe ou crie uma coleção denominada Inventárioe exiba-a numa galeria tal como descrito em Mostrar dados numa galeria.

  2. Atribua o nome ProductGallery à galeria.

  3. Adicione um controlo de deslize com o nome UnitsSold e defina a propriedade Max para esta expressão:
    ProductGallery.Selected.UnitsInStock

  4. Adicione um botão e defina a respetiva propriedade OnSelect a esta fórmula:
    UpdateIf(Inventário, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})

  5. Prima F5, selecione um produto na galeria, especifique um valor com o controlo de deslize e, em seguida, selecione o botão.

    Ao número de unidades em stock do produto especificado é subtraída a quantidade que especificou.