Atualizar, inserir e o caractere ? em DBEXECUTE

Este tópico descreve o comportamento de atualização e inserção de DBEXECUTEs e o uso do caractere ? .

Suponha você tenha uma tabela SQL vazia chamada Itens com duas colunas: ID e Nome. ID é a chave primária.

Você tem essa fórmula em uma célula desprotegida:

=DBEXECUTE("configdb", "SELECT items.id,items.name FROM items WHERE ID=1","INSERT into items (ID,Name) VALUES (1,?)")

No modo de Exibição, você especifica 1 na célula e pressiona Enter.

Como a tabela está vazia e não contém uma ID com o valor 1, a instrução Inserir é executada. A instrução Insert cria esta linha na tabela:

Número da linha ID Nome
1 1 1

Ao inserir 1, você especificou a ID. O caractere ? faz com que esse valor seja inserido na coluna Nome.

Agora, você especifica 2 na célula. Como a ID 1 está presente, a instrução Inserir não é executada. Em vez disso, a linha que contém o ID 1 é atualizada conforme mostrado nesta tabela:

Número da linha ID Nome
1 2 1

Como a instrução Inserir não é executada, a coluna Nome não é atualizada.

Agora, você especifica 3 na célula. Como a ID 1 não está presente, a instrução Inserir é executada e uma nova linha é adicionada:

Número da linha ID Nome
1 1 3
2 2 1

Os valores 1 e 3 resultam desta parte da fórmula: VALUES (1,?).

Se você especificar 4, a ID 1 estará presente outra vez e a linha que contém a ID 1 será atualizada.

Número da linha ID Nome
1 2 1
2 4 3

Se você especificar 5, será adicionada mais uma linha:

Número da linha ID Nome
1 1 5
2 2 1
3 4 3