A tipagem fraca do AdvPL pode gerar erros em tempo de execução que só aparecem quando o usuário está utilizando o sistema. Estes erros, como 'type mismatch', 'invalid typecast', 'variable does not exist' e 'invalid field name', ocorrem quando o tipo de dado de uma variável ou expressão não é o esperado.

Type Mismatch

Ocorre quando uma expressão AdvPL tenta realizar operações (comparação, cálculo) com tipos de dados incompatíveis. Exemplos incluem somar uma string a um número ou comparar uma data a um booleano. Operadores de comparação aceitam tipos diferentes se um for NIL. Soma e subtração permitem Data com Numérico, resultando em Data.

Type Mismatch in Array Subscriptor

Acontece ao tentar acessar um elemento de um array usando um índice que não seja numérico.

cId := "123"
aTeste[cId] := 10

Invalid Typecast

Erro fatal quando uma estrutura de controle (FOR, IF, WHILE, CASE) recebe um tipo de variável inesperado. Por exemplo, inicializar um contador FOR com um booleano ou usar uma expressão de caractere em um IF.

  • For nVar := nInicio TO nFinal [STEP nPasso]
  • For dVar := dInicio TO dFinal [STEP nPasso]
  • While lVar
  • If lVar
  • Case lVar

Variable Does Not Exist

Ocorre ao referenciar uma variável que não foi declarada, não existe ou não está visível no escopo atual. Se for um nome de campo, verifique se a tabela está aberta ou use o alias (Alias->campo). Variáveis LOCAIS e STATIC não são visíveis em macro-execução.

Invalid Field Name

Reproduzido ao referenciar um campo (YYYY) de uma tabela ou cursor (XXX) que não existe na estrutura do arquivo aberto.

XXX->YYYY

Argument N Error

Ocorre quando uma função espera um tipo de argumento em uma posição específica e recebe outro. Por exemplo, passar um número para uma função que espera uma string.

  • str("12",3) - Argumento #0, esperado N->C, função Str
  • val(10) - Argumento #0, esperado C->N, função Val
  • ascan(cString,cInfo) - Argumento #0, esperado B->C, função ascan

Fontes oficiais

Paginas publicadas pela TOTVS na Developer Network.