Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
RESOLVE POINTER
|
RESOLVE POINTER ( umPonteiro ; nomeVar ; numTabela ; numCampo ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
umPonteiro | Ponteiro |
![]() |
Ponteiro do qual recuperar o objeto referenciado | |||||
nomeVar | String |
![]() |
Nome da variável referenciada ou da string vazia | |||||
numTabela | Inteiro longo |
![]() |
Número de tabela referenciada ou elemento array ou 0 ou -1 | |||||
numCampo | Inteiro longo |
![]() |
Número de campo referenciado ou 0 | |||||
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 referenciado | Parâmetros | |||
nomVar | numTabela | numCamp | ||
Nada (NIL pointer) | "" (string vazia) | 0 | 0 | |
Variável | Nome da variável | -1 | 0 | |
Array | Nome do array | -1 | 0 | |
Elemento de array 2D | Nome do array | número do elemento coluna | 0 | |
Tabela | "" (string vazia) | número da tabela | 0 | |
Campo | "" (string vazia) | número da tabela | número do campo |
Notas:
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).
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
` ...
Ver o exemplo do comando DRAG AND DROP PROPERTIES.
Este é um exemplo de ponteiro a um array 2D:
ARRAY TEXT(atCities;100;50)
C_POINTER($city)
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"
_o_DRAG AND DROP PROPERTIES
Field
Get pointer
Is a variable
Is nil pointer
Table
Produto: 4D
Tema: Linguagem
Número
394
Criado por: 4D v6
Modificado: 4D v15
Manual de linguagem 4D ( 4D v20)
Manual de linguagem 4D ( 4D v20.1)
Manual de linguagem 4D ( 4D v20.2)
Manual de linguagem 4D ( 4D v20.3)
Manual de linguagem 4D ( 4D v20.4)
Manual de linguagem 4D ( 4D v20.5)
Manual de linguagem 4D ( 4D v20.6)