Detectar Campo S_T_A_M_P

Olá gostaria de saber como posso em advpl sabe se o campo S_T_A_M_P está na base de dados pois o fieldpos não funcionou

Att.

Vinicius, você pode usar a função TcSqlExec para executar um comando SQL buscando o campo. Caso o comando dê erro, você saberá que aquele campo não existe.

Exemplo:


nResult := TcSqlExec('SELECT TOP 1 S_T_A_M_P_ FROM ' + RetSqlName('SF1'))

If(nResult < 0)

    ConOut('Campo S_T_A_M_P_ não existe na tabela ' + RetSqlName('SF1') + '.')

Else

    ConOut('Campo S_T_A_M_P_ existe na tabela ' + RetSqlName('SF1') + '!')

EndIf

preciso de uma solucao interna mesmo da totvs, não posso fazer 1 versão para cada banco pra verificar isso, quem sabe não tem alguma fw da vida

Olá,

O campo S_T_A_M_P_ é um campo reservado do DBAccess, por isso o FieldPos não enxerga o mesmo, ele segue o mesmo conceito do campo R_E_C_N_O_.

Um possibilidade é utilizar a função TCStruct, que retorna a estrutura real da tabela do SGBD, permitindo assim você ver todos os campos da tabela, inclusive os campos reservados.

A TCStruct é semelhante a DBStruct, a diferença é que a DBStruct baseia-se na workarea padrão do Protheus, já a TCStruct lê diretamente o banco.

Documentação: https://tdn.totvs.com/display/tec/TCStruct


Boas práticas sobre essa coluna que tem diversos links sobre essa implementação:

https://tdn.totvs.com/pages/viewpage.action?pageId=563943271

obrigado daniel