Nesse artigo vamos explicar para que serve os campos S_T_A_M_P_ e I_N_S_D_T_, e como habilitá-los na sua base.
Esses dois campos, são para controle interno nas tabelas do Protheus, abaixo uma breve descrição de cada um deles:
- I_N_S_D_T_: armazena a data e hora de quando um registro é inserido em uma tabela
- S_T_A_M_P_: armazena a data e hora de quando um registro é alterado em uma tabela
Abaixo o passo a passo de como ativar:
- Pare os serviços do Protheus
- Vá na pasta do seu DBAccess
- Abra o arquivo dbaccess.ini e dentro dele, nos ambientes que você tiver, adicione UseRowInsDt=1 e UseRowStamp=1 (para ativar o insdt e Stamp respectivamente). Abaixo um print de exemplo:
- Suba os serviços do Protheus
- Se a tabela que você quer que esses campos sejam criados, já existir, faça um backup dela e drope. Senão, basta abrir alguma tela que irá ser criado a tabela já com os campos
- Agora ao fazer alguma manutenção na tabela, os dados serão gravados, conforme print abaixo
Referências:
- TDN – Boas práticas para utilização dos campos S_T_A_M_P_ e I_N_S_D_T_ do TOTVS
- TDN – Implementação – Campo de controle adicional no DBAccess – I_N_S_D_T_
- TDN – Implementação – Campo de controle adicional no DBAccess – S_T_A_M_P_
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Sabe me dizer se existe alguma forma de criar este campos sem realizar o drop da tabela ? tenho tabela com mais de 3540 milhões registros.
Bom dia Carlos, tudo joia?
Eu nunca precisei sem utilizar o DROP, mas o que você pode fazer então, é o seguinte.
1. Pegue uma tabela que você não tenha ainda, na base de vocês
2. Utilize o mini fórmulas (https://terminaldeinformacao.com/2018/02/13/funcao-para-executar-formulas-protheus-12/) ou algum outro “executador” de programas
3. Abra o DbMonitor e dê um trace na conexão (https://terminaldeinformacao.com/2021/05/27/como-rastrear-conexoes-pelo-dbmonitor-e-dbaccess/)
4. Dê um DbSelectArea nesse alias, e veja se nas queries vai ter algum comando de como ele cria essas colunas
OU
1. (se for SQL Server), Tente dar um sp_help com o nome da tabela que já tem o campo criado
2. Veja o tipo do campo e as configurações
Ai você pega esse comando / configurações, da um ALTER TABLE na sua coluna, adicionando o campo exatamente igual na outra tabela
Obs.: Faça isso primeiro na base de testes
Abraços.
Eu criei um programa para criar os campos S_T_A_M_P_ e I_N_S_D_T_ sem a necessidade de “dropar a tabela” e “apendar os dados”. Basta criar vários “dbSelectArea()” em sequencia igual o exemplo abaixo:
#INCLUDE “TOTVS.CH”
#INCLUDE “TOPCONN.CH”
/*/{Protheus.doc} TESTE
Realiza a criação dos campos S_T_A_M_P_ e I_N_S_D_T_ sem a necessidade de “dropar” e “apendar” as tabelas…
@type function
@version 12.1.2210
@author Sangar Zucchi
@since 04/03/2024
@see https://tdn.totvs.com/pages/viewpage.action?pageId=563943271
@see https://tdn.totvs.com/display/tec/TCConfig
/*/
User Function TESTE()
Private oMainWnd
// Montando o ambiente em caso de execução do código direto via VSCode ou chamada direta. Caso for chamar via menu, comentar o código “RPC” abaixo:
// Realizando o login na Empresa 01 / Filial 0101
RpcClearEnv()
RpcSetType(3)
RpcSetEnv(“01″,”0101″,””,””,””,””,{})
// Conectando ao BD
TCLink()
// Consultando S_T_A_M_P_ e I_N_S_D_T_ para novas tabelas
xRet := TCConfig( “GETUSEROWSTAMP” )//Consulta se a criação da coluna S_T_A_M_P_ para novas tabelas está habilitada, retorna “ON” ou “OFF”.
xRet := TCConfig( “GETUSEROWINSDT” )//Consulta se a criação da coluna I_N_S_D_T_ para novas tabelas está habilitada, retorna “ON” ou “OFF”.
// Consultando S_T_A_M_P_ e I_N_S_D_T_ para abertura de tabelas
xRet := TCConfig( “GETAUTOSTAMP” )//Consulta se a criação automática da coluna S_T_A_M_P_ na abertura da tabela está habilitada, retorna “ON” ou “OFF”.
xRet := TCConfig( “GETAUTOINSDT” )//Consulta se a criação automática da coluna I_N_S_D_T_ na abertura da tabela está habilitada, retorna “ON” ou “OFF”.
// Habilitando S_T_A_M_P_ e I_N_S_D_T_ para novas tabelas
xRet := TCConfig( “SETUSEROWSTAMP=ON” )//Permite ligar ou desligar a criação da coluna interna S_T_A_M_P_ para novas tabelas.
xRet := TCConfig( “SETUSEROWINSDT=ON” )//Permite ligar ou desligar a criação da coluna interna I_N_S_D_T_ para novas tabelas.
// Habilitando S_T_A_M_P_ e I_N_S_D_T_ para abertura de tabelas
xRet := TCConfig( “SETAUTOSTAMP=ON” )//Permite habilitar a criação automática da coluna S_T_A_M_P_ na abertura da tabela.
xRet := TCConfig( “SETAUTOINSDT=ON” )//Permite habilitar a criação automática da coluna I_N_S_D_T_ na abertura da tabela.
// Abrindo as tabelas que desejo criar os campos S_T_A_M_P_ e I_N_S_D_T_ automaticamente sem necessidade de “DROPAR” e “APENDAR” elas:
dbSelectArea(“SF1”)
dbSelectArea(“SD1”)
// Desabilitando S_T_A_M_P_ e I_N_S_D_T_ para novas tabelas
xRet := TCConfig( “SETUSEROWSTAMP=OFF” )//Permite ligar ou desligar a criação da coluna interna S_T_A_M_P_ para novas tabelas.
xRet := TCConfig( “SETUSEROWINSDT=OFF” )//Permite ligar ou desligar a criação da coluna interna I_N_S_D_T_ para novas tabelas.
// Desabilitando S_T_A_M_P_ e I_N_S_D_T_ para abertura de tabelas
xRet := TCConfig( “SETAUTOSTAMP=OFF” )//Permite habilitar a criação automática da coluna S_T_A_M_P_ na abertura da tabela.
xRet := TCConfig( “SETAUTOINSDT=OFF” )//Permite habilitar a criação automática da coluna I_N_S_D_T_ na abertura da tabela.
// Desconectando do BD
TCUnlink()
Return
Bom dia Sangar, tudo joia?
Opa, excelente contribuição.
Muito obrigado pelo comentário.
Um grande abraço.