Saltar para o conteúdo principal
Versão: 20 R7 BETA

RESOLVE POINTER

RESOLVE POINTER ( umPonteiro ; nomeVar ; numTabela ; numCampo )

ParâmetroTipoDescrição
umPointerPointerPonteiro do qual recuperar o objeto referenciado
nomeVarTextNome da variável referenciada ou da string vazia
numTabelaIntegerNúmero de tabela referenciada ou elemento array ou 0 ou -1
numCampoIntegerNúmero de campo referenciado ou 0

Descrição

O comando RESOLVE POINTER recupera a informação do objeto referenciado pela expressão de ponteiro ponteiro e a devolve nos parâmetros nomVar, numTabela, e numCamp.

Dependendo da natureza do objeto referenciado, RESOLVE POINTER devolve os seguintes valores:

Objeto referenciadoParâmetros
nomVarnumTabelanumCamp
Nada (NIL pointer)"" (string vazia)00
VariávelNome da variável-10
ArrayNome do array-10
Elemento de array 2DNome do arraynúmero do elemento coluna0
Tabela"" (string vazia)número da tabela0
Campo"" (string vazia)número da tabelanúmero do campo

Notas:

  • Se o valor que passa em ponteiro não for uma expressão de tipo ponteiro, será gerado um erro de sintaxe.
  • O comando RESOLVE POINTER não funciona com ponteiros a variáveis locais. Na verdade, por definição muitas variáveis locais com o mesmo nome poderiam existir em diferentes lugares, de maneira que não é possível para o comando encontrar a variável correta.

Exemplo 1

Em um formulário, você cria um grupo de 100 variáveis editáveis chamadas v1, v2... v100. Para fazer isto, você realiza os seguintes passos:

a. Cria uma variável editável que chama v.

b. Define as propriedades do objeto.

c. Associa o seguinte método ao objeto:

 FazerAlgo(Self) // FazerAlgo é um método de projeto de seu banco

d. Neste ponto, pode duplicar a variável tantas vezes como seja necessária, ou utilizar a funcionalidade Duplicar sobre matriz no editor de formulários.

e. No método FazerAlgo, é necessário conhecer o índice da variável para a qual se chama o método, escreve:

 RESOLVE POINTER($1;$vsNomVar;$vlNumTabela;$vlNumCampo)
 $vlNomVar:=Num(Substring($vsNomVar;2))

Note que construindo seu formulário desta maneira, você escreve os métodos para as 100 variáveis apenas uma vez; não necessita escrever FazerAlgo (1), FazerAlgo (2)...,FazerAlgo (100).

Exemplo 2

Por propósitos de depuração, necessita verificar que o segundo parâmetro ($2) de um método é um ponteiro a uma tabela. Ao começo deste método, escreve:

  // ...
 If(◊DebugOn)
    RESOLVE POINTER($2;$vsNomVar;$vlNumTabela;$vlNumCampo)
    If(Not(($vlNumTabela>0) & ($vlNumCampo=-1) & ($vsNomVar="")))
  // ATENÇAO: O ponteiro nao é uma referência a uma tabela
       TRACE
       End
    End if
  // ...

Exemplo 3

Ver o exemplo do comando DRAG AND DROP PROPERTIES.

Exemplo 4

Este é um exemplo de ponteiro a um array 2D:

 ARRAY TEXT(atCities;100;50)
 var $city : Pointer
 atCities{1}{2}:="Rome"
 atCities{1}{5}:="Paris"
 atCities{2}{6}:="New York"
  // ...outros valores
 $city:=->atCities{1}{5}
 RESOLVE POINTER($city;$var;$rowNum;$colNum)
  //$var="atCities"
  //$rowNum="1"
  //$colNum="5"

Ver também

Field
Get pointer
Is a variable
Is nil pointer
Table

Propriedades

Número do comando394
Thread-seguro