Saltar para o conteúdo principal
Versão: 20 R10 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

AltStyle によって変換されたページ (->オリジナル) /