Usina BRAdvPL Guia
Entrar
← Todos os tópicos
FUNçãOPublicado

TCSetField

TCSetField( <cAlias>, <cField>, <cType>, [nSize], [nPrecision] )

Ajusta o tipo, o tamanho e a precisão de uma coluna retornada por uma query aberta pelo DBAccess.

SQL e TopConnDBAccessQueryTipos de dadosTCGenQryBanco de dados
01 · VISÃO GERAL

Visão geral

Consultas abertas por TCGenQry() retornam campos numéricos, por padrão, com tamanho e precisão 15,8; os demais campos são tratados como caractere. TCSetField() redefine no alias o tratamento de colunas que representam datas, valores lógicos ou números. Isso é especialmente importante para datas do ERP armazenadas fisicamente como CHAR ou VARCHAR no formato AAAAMMDD. A função altera a estrutura lógica do cursor já aberto, não os dados ou a estrutura física da tabela.

02 · SINTAXE

Sintaxe

TCSetField( <cAlias>, <cField>, <cType>, [nSize], [nPrecision] )

Parâmetros

cAlias
CaractereObrigatório

Alias aberto para a query. Um alias inexistente provoca erro fatal.

cField
CaractereObrigatório

Nome da coluna do cursor cujo tratamento será redefinido.

cType
CaractereObrigatório

Tipo AdvPL desejado: D para data, N para numérico ou L para lógico.

nSize
NuméricoOpcional

Quantidade total de dígitos para N, entre 1 e 18. É desconsiderado para D e L.

Padrão: 0
nPrecision
NuméricoOpcional

Casas decimais para N, entre 0 e nSize - 1. É desconsiderado para D e L.

Padrão: 0

Retorno

A documentação não define um valor de retorno para uso pela aplicação. O efeito relevante é a alteração do tratamento da coluna no alias informado.

03 · EXEMPLO PRÁTICO

Ajustar data, lógico e numérico

#Include "TOTVS.ch"
#Include "TopConn.ch"

User Function ExTiposQuery()
    Local cAlias := GetNextAlias()
    Local cQuery := ""
    Local dEmissao
    Local lAtivo
    Local nValor

    cQuery := " SELECT C5_EMISSAO, C5_TIPO, C5_VALOR "
    cQuery += " FROM " + RetSqlName("SC5")
    cQuery += " WHERE D_E_L_E_T_ = '' "
    cQuery := ChangeQuery(cQuery)

    DbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), cAlias, .F., .T.)
    TCSetField(cAlias, "C5_EMISSAO", "D")
    TCSetField(cAlias, "C5_TIPO", "L")
    TCSetField(cAlias, "C5_VALOR", "N", 15, 2)

    dEmissao := (cAlias)->C5_EMISSAO
    lAtivo := (cAlias)->C5_TIPO
    nValor := (cAlias)->C5_VALOR
    (cAlias)->(DbCloseArea())
Return {dEmissao, lAtivo, nValor}
Resultado esperado

As colunas passam a ser lidas com os tipos AdvPL definidos. Confirme o conteúdo lógico e os campos reais do dicionário.

04 · EXEMPLO PRÁTICO

Reaproveitar a estrutura da tabela

Local aEstrutura := CT2->(DBStruct())
Local nCampo

For nCampo := 1 To Len(aEstrutura)
    If aEstrutura[nCampo, 2] $ "DNL"
        TCSetField("CT2TMP", aEstrutura[nCampo, 1], ;
            aEstrutura[nCampo, 2], aEstrutura[nCampo, 3], ;
            aEstrutura[nCampo, 4])
    EndIf
Next nCampo
Resultado esperado

Campos D, N e L da estrutura original orientam o tratamento das colunas equivalentes do cursor CT2TMP.

BOAS PRÁTICAS
  • Execute TCSetField() depois de abrir o cursor e antes de consumir os valores da coluna.
  • Use D somente quando o conteúdo estiver em AAAAMMDD; conteúdo incompatível será lido como data vazia.
  • Use L quando a coluna contiver T ou F; conteúdo incompatível será lido como .F..
  • Para N, informe nSize entre 1 e 18 e nPrecision entre 0 e nSize - 1.
  • DBStruct() pode orientar os ajustes D, N e L quando a query reproduz campos de uma tabela Protheus.
  • Use em TCSetField() exatamente o mesmo alias aberto por DbUseArea()/TCGenQry().
ARMADILHAS COMUNS
  • Conteúdo inválido não é convertido semanticamente: datas incompatíveis viram data vazia, números viram zero e lógicos viram .F..
  • Alias inexistente, tamanho fora de 1 a 18 ou precisão inválida pode causar erro fatal.
  • Tipos diferentes de D, L e N são ignorados e geram warning no console do AppServer.
  • D sempre usa tamanho 8 e precisão 0; L sempre usa tamanho 1 e precisão 0.
  • O exemplo do TDN abre CT2TMP, mas chama TCSetField() com CT2TRB. O exemplo desta página usa CT2TMP de forma consistente.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. TCSetField. TDN — TOTVSTEC. Criado por Adriana Panseri Santos; última alteração por Carlos Sampa Junior em 10 jan. 2018. Acesso em 8 ago. 2026.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR