Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Novo comportamento de conversão de campos Caractere para Memo a partir do DBAccess 20220303 (22.1.1.x)

...

Bloco de código
collapsefalse
TCAlter( < cTable >, < aEstruturaAtual >, < aEstruturaNova >, [ @nErro ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cTable

caractere

Indica o nome da tabela que será alterada.

X


aEstruturaAtual

vetor

Indica o array que contém as informações dos campos atuais da tabela.

X


aEstruturaNova

vetor

Indica o array que contém a nova estrutura desejada para a tabela.

X


nErro

numérico

Caso ocorra algum erro na alteração da estrutura, o número do erro do DBAccess será retornado através desta variável.


X

Retorno

Nome

Tipo

Descrição

lRet

lógico

Retorna .T. se a alterção for realizada com sucesso, caso contrário, retorna .F.

info
Informações
icontrue
titleObservações
Nota
icontrue
titleAtenção

É responsabilidade do programador passar a estrutura atual corretamente. Caso seja passada uma estrutura diferente da atual, pode haver perda de uma ou mais colunas da tabela.

titleAlter table online

A

partir do DBAccess 20.1.1.0 é possível realizar alterações estruturais de forma online, isto é, para inclusão de colunas ou alteração de tamanho de colunas não será necessário acesso exclusivo a tabela, podendo executar a

função

TCAlter mesmo que a tabela esteja em uso por outra conexão.
  • A partir do DBAccess 21.1.1.0 é possível realizar alterações estruturais de forma online para deleção de colunas e alteração de tipo das colunas, não sendo necessário acesso exclusivo a tabela, podendo executar a função TCAlter mesmo que a tabela esteja em uso por outra conexão.
  • ...

    determina internamente as ações a serem tomadas para adequar a estrutura atual para a nova estrutura informada, mantendo os dados na tabela. Nesta operação, dependendo do SGDB em questão, um ou mais índices existentes para a tabela podem ser apagados para que a operação seja completa.

    Ao comparar as estruturas, são determinadas originalmente quatro ações para cada campo da estrutura

    • Coluna Inserida ( existe na nova estrutura, mas não existe na estrutura atual )
    • Coluna Eliminada ( existe na estrutura atual, mas não existe na nova estrutura )
    • Coluna Mantida ( existe em ambas as estruturas, com os mesmos atributos – tipo e tamanhos )
    • Coluna Alterada ( existe em ambas as estruturas, porém com tipo ou tamanho diferentes )
    Nota
    icontrue
    titleAtenção

    Na mudança de atributos em alteração de campo, a única conversão de tipo suportada é N (numérico) para C (caracter). Caso seja realizada uma conversão de tipo não suportada, todos os dados da coluna em questão serão apagados. A partir do DBAccess 20220303 (Build 22.1.1.0) e superiores, será suportada a conversão de campos C (caractere) para M (Memo), sem perder o conteúdo do campo, para os bancos de dados MSSQL, ORACLE e POSTGRES. O conteúdo do campo Caractere será convertido para Memo, apenas eliminando os espaços a direita do conteúdo atual.

    Exemplos

    Bloco de código
    languagecpp
    themeEclipse
    linenumberstrue
    collapsefalse
    USER FUNCTION ex_TCAlter()
      Local cTableNAme := "TTABLE"
      Local nTopErr := NIL
       
      // conecta com o dbaccess
      nStatus := TCLink("POSTGRES/teste","192.168.189.128")
       
      If nStatus < 0
       UserException("TOPCONN - Falha de conexao ["+str(nStatus,4)+"]")
      Endif
       
      // Array com a antiga estrutura
      aStru := {}
      aadd(aStru,{"CPO01","N",8,0})
      aadd(aStru,{"CPO02","N",10,0})
      aadd(aStru,{"CPO03","D",8,0})
       
      // Cria a tabela para o teste
      DbCreate(cTableName,aStru,"TOPCONN")
      // Array com a nova estrutura
      aNewStru := {}
      aadd(aNewStru,{"CPO01","C",8,0})
      aadd(aNewStru,{"CPO02","N",10,0})
      aadd(aNewStru,{"CPO03","D",8,0})
      
      bRet := TCAlter(cTableNAme,aStru,aNewStru, @ nTopErr)
      If !bRet
       MsgInfo(tcsqlerror(),"Erro no TCAlter!")
      Endif
    RETURN
    

    ...