MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Renomear campo via VBA

    Compartilhe

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    [Resolvido]Renomear campo via VBA

    Mensagem  ivandetomini em 17/8/2017, 15:25

    Bom dia!

    Peço ajuda dos colegas:

    Estou com a seguinte necessidade: preciso renomear as colunas de uma tabelas com base nas informações nos campos.
    Pesquisando por aqui encontrei o seguinte código

    CurrentDb.TableDefs("dbo_Precos").Fields("DataColeta").Name = "DataColeta2"

    Isso atende parcialmente minha necessidade, nos campos cujos valores são fixos; porém o novo nome, no exemplo aqui citado "DataColeta2", deve ser informação colhida no campo. Isso porque cada vez que a tabela é atualizada as informações também são atualizadas
    Não consegui carregar essa informação, portanto peço ajuda dos colegas para resolver isso, se possivel.

    Abraços,

    Ivan
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: [Resolvido]Renomear campo via VBA

    Mensagem  Alexandre Neves em 18/8/2017, 14:31

    Boa tarde, e bem-vindo ao fórum
    As informações podem estar actualizadas sem alterar nome do campo. Não entendi a necessidade de alteração
    Pode explicar?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Re: Renomear campo via VBA

    Mensagem  ivandetomini em 18/8/2017, 15:24

    Bom dia.

    A tabela possui os campos "Campo1", "Campo2", "Campo3".
    Preciso que os novos nomes sejam o conteúdo desses campos, que mudam a cada vez que a tabela é atualizada.
    Se eu usar o código abaixo, por exemplo:
    [i]CurrentDb.TableDefs("dbo_Precos").Fields("DataColeta").Name = "DataColeta2"[i]
    O novo nome será o que eu definir  = que não pode ser fixo, já que essas informações mudam com frequencia.
    O anexo tem o exemplo dessa necessidade.

    Obrigado pela ajuda.
    Anexos
    BD_Tst.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (39 Kb) Baixado 3 vez(es)
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: [Resolvido]Renomear campo via VBA

    Mensagem  Alexandre Neves em 18/8/2017, 15:31

    Continuo a não ver necessidade de renomear os campos
    Pelo uso de apenas uma linha, desperdiça espaço e basta ter um array para guardar as informações. Neste exemplo, nem é adequada a nomeação de campos com número inicial
    Porque não cria um array e tem toda a flexibilidade de uso?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1237
    Registrado : 05/02/2010

    Renomear campo via VBA

    Mensagem  good guy em 18/8/2017, 15:31

    Olá ivan,

    Não entendi exatamente o que você pretende, mas vou disponibilizar aqui este código que serve para alterar valores de um determinado campo da sua tabela.

    Código:

    Private Sub cmdLocalizar_Click()
    Dim ws As DAO.Workspace
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim Trans As Boolean
    Dim sMens As String
    Dim sNome As String
    Dim tNome As String

    On Error GoTo Erro

    Trans = False
    Set ws = DBEngine.Workspaces(0) ‘Referir-se ao Workspace padrão
    Set db = CurrentDb ‘Banco de Dados corrente
    Set rs = db.OpenRecordset(“Teste”, dbOpenDynaset) ‘Verificar sempre na propriedade do formulário qual é o tipo de conjunto de registros e utilizar o acesso apropriado, caso contrário ocorrerá um erro indicado por uma mensagem de texto

    ws.BeginTrans
    Trans = True

    sNome = InputBox(“Digite o nome a alterar:”, “Alterar?”)  ‘Substituir por uma caixa de texto
    tNome = InputBox(“Digite o novo nome: “, “Alterar?”)
    ‘Substituir por uma caixa de texto como alternativa

    rs.MoveFirst ‘Garantir que iniciará no primeiro registro

    Do Until rs.EOF’Faça enquanto não chegar ao final da Tabela
    If rs.Fields(“Cidade”) = sNome Then
    ‘Me!Cidade = rs.Fields(“Cidade”) ‘ Ou rs!Cidade

    sMens = MsgBox(“Confirma alteração?”, vbYesNo, “Confirmação”)

    If sMens = vbYes Then
    rs.Edit ‘Abre para alterações
    rs.Fields(“Cidade”) = tNome
    rs.Update
    End If
    End If
    rs.MoveNext ‘Mover para o próximo registro
    Loop

    If MsgBox(“Salvar alterações?”, vbQuestion + vbYesNo, “Salvar”) = vbYes Then
    ws.CommitTrans ‘Salva alterações
    Me.Requery
    Else
    ws.Rollback ‘Desfaz alterações
    End If

    Sair:
    rs.Close
    Set db = Nothing
    Set ws = Nothing
    Exit Sub

    Erro:
    MsgBox “Erro”
    If Trans = True Then
    Exit Sub
    End If

    Resume Sair
    End Sub

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Renomear campo via VBA

    Mensagem  ivandetomini em 18/8/2017, 16:00

    Obrigado pelo Código,
    Não é o valor do campo que preciso trocar, é o nome:

    CAMPO1 CAMPO2 CAMPO3 CAMPO4 CAMPO5
    Material DESCR. 01.08.17 02.08.17 03.08.17

    O nome do campo1 passaria a ser Material, campo2 = DESCR. campo3 = 01.08.17 e assim por diante.

    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1237
    Registrado : 05/02/2010

    Renomear campo via VBA

    Mensagem  good guy em 18/8/2017, 16:41

    Ok Ivan,

    Uma solução muito usada é criar uma consulta ao renomear o campo com Alias (Apelido) pelo modo SQL:

    Ex: SELECT CABEÇALHO.Campo1 AS Material, CABEÇALHO.Campo2 AS DESCR ...
    FROM CABEÇALHO;


    Uma segunda solução é a que você já preparou, mas vou apenas dar uma pincelada no código com o método Array citado pelo Alexandre que funfará muito bem.

    Código:

    Private Sub cmdRenomear_Click()
    Call RenomearTabela       'Chame a sub-rotina que faz a alteração na tabela de cada campo
    Me.RecordSource = "SELECT * FROM CABEÇALHO"     'Deixe o formulário desacoplado da tabela para com o método recordsource trazer a tabela

    'Renomeie os rótulos de cada campo no formulário e com VBA renomeie cada campo com o nome que você deseja
    With Me
    .lblCampo1.Caption = "Material"
    .lblCampo2.Caption = "Descrição"
    ....
    End With
    End Sub

    Sub RenomearTabela()
    On Error GoTo TrataErro
    Dim varTrata As Variant
    Dim varCampo1 As Variant
    Dim varCampo2 As Variant
    Dim intI As Integer
    Dim frm As Form

    varCampo1 = "Material"
    varCampo2 = "TxtBreveMaterial"
    .....

    varTrata = Array(varCampo1, varCampo2)

    Set frm = Forms!CABEÇALHO

    For intI = LBound(varTrata) To UBound(varTrata)
          frm!txtNomedoCampo = varTrata(intI)                       'Coloquei uma caixa de texto no formulário para verificar a mudança do nome do campo.
          CurrentDb.TableDefs("CABEÇALHO").Fields("Campo1").Name = varCampo1
          CurrentDb.TableDefs("CABEÇALHO").Fields("Campo2").Name = varCampo2
    Next intI



    Exit Sub
    TrataErro:
    MsgBox Err.Description, vbCritical, "Você já renomeou este campo"
    End Sub





    Última edição por good guy em 18/8/2017, 17:27, editado 3 vez(es)

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Renomear campo via VBA

    Mensagem  ivandetomini em 18/8/2017, 17:01

    O raciocinio é esse mesmo. Consegui esse codigo para fazer isso via VBA:

    CurrentDb.TableDefs("CABEÇALHO").Fields("Campo6").Name = "aqui deve ser o valor que estiver no campo6, que muda diariamente"

    Não quero toda vez que atualizar a tabela ter que mudar o valor depois de =
    Acho que deve ser algo simples, mas me falta experiencia.
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1237
    Registrado : 05/02/2010

    Renomear campo via VBA

    Mensagem  good guy em 18/8/2017, 17:25

    Olá Ivan,

    Veja como deve ficar a sub-rotina com a função Array:

    Código:

    Sub RenomearTabela()
    On Error GoTo TrataErro
    Dim varTrata As Variant
    Dim varCampo1 As Variant
    Dim varCampo2 As Variant
    Dim intI As Integer
    Dim frm As Form

    varCampo1 = "Material"
    varCampo2 = "TxtBreveMaterial"
    .....

    varTrata = Array(varCampo1, varCampo2)

    Set frm = Forms!CABEÇALHO

    For intI = LBound(varTrata) To UBound(varTrata)
          frm!txtNomedoCampo = varTrata(intI)                       'Coloquei uma caixa de texto no formulário para verificar a mudança do nome do campo. Deixe-a com a propriedade visible = False
          CurrentDb.TableDefs("CABEÇALHO").Fields("Campo1").Name = varCampo1
          CurrentDb.TableDefs("CABEÇALHO").Fields("Campo2").Name = varCampo2
    Next intI



    Exit Sub
    TrataErro:
    MsgBox Err.Description, vbCritical, "Você já renomeou este campo"
    End Sub

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Renomear campo via VBA

    Mensagem  ivandetomini em 18/8/2017, 17:51

    Quase la...
    Deu um erro dizendo que o Access não pode localizar o formulario CABEÇALHO.
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1237
    Registrado : 05/02/2010

    Renomear campo via VBA

    Mensagem  good guy em 18/8/2017, 18:03

    Por isso mesmo vc deve criar um formulário com os campos justificados, com acesso à tabela CABEÇALHO e nomeie este formulário como CABEÇALHO a título de teste temporariamente e depois desacople este formulário à tabela. Preste atenção quanto às orientações de criação de controles que eu passei acima no código da sub-rotina. Em seguida, crie um segundo formulário com outro nome a seu gosto acoplado à tabela agora com os campos renomeados.


    Última edição por good guy em 18/8/2017, 18:50, editado 1 vez(es)

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Renomear campo via VBA

    Mensagem  ivandetomini em 18/8/2017, 18:10

    Sim eu criei o formulario, mas mesmo assim da erro.
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1237
    Registrado : 05/02/2010

    Renomear campo via VBA

    Mensagem  good guy em 18/8/2017, 19:12

    Olá Ivan,

    Trata-se de uma importação de dados, não é? Teste agora pelo arquivo. Abra o formulário "CABEÇALHO" que acionará a sub-rotina RenomearTabela. Após a renomeação dos campos na tabela, adicione os campos pela barra de ferramentas, Adicionar Campos Existentes, no formulário "cabeçalho".
    Anexos
    BD_Tst.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (41 Kb) Baixado 4 vez(es)

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Re: [Resolvido]Renomear campo via VBA

    Mensagem  ivandetomini em 19/8/2017, 00:47

    Prezados.
    Acho que está ficando complicado para este ser.
    Toda semana baixo um arquivo de texto, em que as datas são diferentes. Eu achei que seria fácil pegar a primeira linha da tabela e transformar em títulos de coluna, mas ficou demasiado complicado para mim
    Eu achei melhor tratar o arquivo no Excel e depois importar para o access, aí a primeira linha fica como cabeçalho no formato que eu desejo.
    Agradeço imensamente a ajuda aqui prestada, e vou guardar os códigos, tenho certeza que me serão úteis
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: [Resolvido]Renomear campo via VBA

    Mensagem  Alexandre Neves em 19/8/2017, 18:42

    Boa tarde,
    Se tiver dado por concluída a dúvida, marque o "Resolvido" na zona inferior direita do formulário do fórum


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    ivandetomini
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 29/01/2012

    Renomear campo via VBA

    Mensagem  ivandetomini em 21/8/2017, 16:25

    Boa tarde,
    Mais uma vez agradeço a ajuda.
    Saudações

      Data/hora atual: 17/11/2018, 03:08