Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/327912/newLayout.css

...

Pagetitle
TCSetField
TCSetField

...

Função: TCSetField

Altera

...

o

...

tratamento,

...

do

...

tipo

...

de

...

dado

...

ou

...

precisão,

...

para

...

um

...

campo/coluna

...

retornada

...

através

...

de

...

uma

...

query.

Sintaxe

Bloco de código
collapsefalse
TCSetField( <
cAlias>
 cAlias >, <
cCampo>
 cField >, <
cTipo>
 cType >, [
nTamanho
 nSize ], [
nDecimais
 nPrecision ] )
--> NIL

Parâmetros

...

Nome

Tipo

Descrição

Obrigatório

Referência

cAlias

...

caractere

Indica o alias da query.

X

...


cField

...

caractere

Indica o nome do campo/coluna de retorno.

X

...


cType

...

caractere

Indica o tipo de dado a ser retornado através deste campo/coluna, que pode ser: D (Data), N

...

(Numérico) ou L

...

(Lógico).

X

...


nSize

...

numérico

Indica o tamanho do campo.

...

Valor padrão: 0 (zero).



nPrecision

numérico

...

Indica a quantidade de decimais do campo.

...

Valor padrão: 0 (zero

...

...

)

...

.



Observações

Ao realizar a abertura de uma query, através da função TCGenQry

...

, todos os campos numéricos são retornados com a precisão/tamanho 15,8 (máximo de 15 dígitos, sendo 8 decimais), e os demais campos

...

são tratados e retornados como tipo "C" (caractere).

Desta forma, após abrir uma query sobre uma tabela de dados do ERP, podemos utilizar a função TCSetField

...

para realizar as adequações de precisão de retorno para campos numéricos,

...

conversão automática

...

de tipos de retorno para os campos que não sejam

...

explicitamente "C" ou "M" (memo).

Por exemplo, um campo do tipo "D"

...

, em uma tabela de dados do ERP, é criado no banco de dados

...

pelo DBAccess como sendo um campo CHAR ou VARCHAR, mas é tratado

...

automaticamente pelo DBAccess para que as

...

variáveis AdvPL usadas para ler e gravar este campo sejam do

...

tipo "D"

...

.

...

Ao executar uma query nesta tabela e

...

retornar o conteúdo desta coluna, ela será interpretada no AdvPL como uma variável do tipo "C"

...

, com tamanho 8.

...

Como sabemos que o conteúdo desta coluna é efetivamente uma data, gravada como string no formato AAAAMMDD, podemos utilizar a função TCSetField

...

para que esta coluna seja tratada no alias de retorno com o tipo de dado "D" do AdvPL.

  • Caso cAlias seja inválido, será apresentada a mensagem de erro fatal "TCSetField- Alias does not exist cAlias".
  • Caso seja passado em cType valor diferente de "D", "L" e "N", o comando será ignorado e será apresentada uma mensagem de warning no log de console do Application Server: "TCSetField with type different from 'D', 'L' and 'N' - statement ignored.".
  • nSize especifica a quantidade total de dígitos de um campo "N", e seu valor deve estar entre 1 e 18. Caso o valor não esteja nesse intervalo, será apresentada a mensagem de erro fatal: "WARNING - TCSetField - Invalid field len: nSize".
  • nPrecision indica a quantidade de casas decimais de um campo "N" e seu valor deve estar entre 0 (zero) e nSize - 1. Caso não esteja nesse intervalo, será apresentada a mensagem de erro fatal: "WARNING - TCSetField - Invalid field dec: nPrecision".
  • Para um campo "D", nSize e nPrecision não serão utilizados e terão sempre os valores 8 em nSize e 0 em nPrecision, independente dos valores passados nos parâmetros.
  • Para um campo seja "L", nSize e nPrecision não serão utilizados e terão sempre os valores 1 em nSize e 0 em nPrecision, independente dos valores passados nos parâmetros.
  • Para campos diferentes de "D", "L" e "N", nSize e nPrecision não são utilizados, não alterando a definição atual do campo.
  • Se o campo retornado em uma query seja do tipo "C" e o conteúdo armazenado não seja "T" ou "F" (para campos "L") ou uma data no formato "AAAAMMDD" (para campos "D"), a alteração do tipo do campo para "D" fará com que o alias retorne uma data vazia, a alteração do tipo do campo para "N" fará com que o alias retorne 0 (zero), e a alteração do tipo do campo para "L" fará com que o alias retorne .F. (falso).

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
' date do AdvPL.
// Obtém a estrutura atual da tabela 
CT2aStru
CT2
aStru := CT2->(
dbStruct
 DBStruct() )

// Monta uma query para busca de 
dadoscQuery
dados
cQuery := "SELECT * FROM " + RetSqlName( 'CT2' ) + " WHERE 
CT2_FILIAL= '" + xFilial( 'CT2' )
cQuery += "' AND CT2_USRF = '000010' ORDER BY CT2_FILIAL, CT2_USRN
"
cQuery := ChangeQuery( cQuery )

// Abre o cursor sob o alias "CT2TMP"
dbUseArea( .T., 'TOPCONN', TCGenQry( , , cQuery ), 'CT2TMP', .F., .T. )

// Partindo da estrutura da tabela original, define

// tratamento de tipos implícitos nas colunas de retorno

// Apenas para colunas de tipos D (data), L ( logico ) e/ou N (numérico)
nT := len( aStru )
For nI := 1 to nT
  
If ( aStru[nI][2] $ 'DNL' )

    TCSetField( 'CT2TRB', aStru[
ni
nI, 1], aStru[
ni
nI, 2], aStru[
ni
nI, 3], aStru[
ni
nI,4] )
  
EndifNext
Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server
Veja Também
Endif
Next

Veja também