MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


2 participantes

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    avatar
    fabio_niglio
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 17/11/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  fabio_niglio 15/12/2016, 12:24

    Bom dia pessoal preciso de uma ajuda num tema:

    Estou montando m formulario onde eu tenho um código que o vendedor usa para determinar suas vendas e mais uns campos com informações revelantes a este código. Estou acrescentando dois campos de data de vigencia inicio e data de vigencia fim. Enquanto o vendedor puder utilizar este codigo vou deixar a data fim numa data bem distante (31/12/2050), pois não tem uma data certa de finalização do contrato do uso do código.

    Desenvolvi um formulario para cadastra novos e poder editar essas informações que veem com esse código mas preciso armazenar o histórico dessa informação. Quando a pessoa fizer uma alteração essa data de vigencia final vai ser fechada para uma data próxima a data atual, enquanto as modificações vão estar em outra linha com uma data de inicio no dia seguinte a data finalizada e os campos se mantem o mesmo e sua data fim vai se tornar a data distante.

    Preciso criar um código vba para armazenar essa linha antes de alterar colocar um botão que quando a pessoa falar que aquele código vai ser modificado vou armazenar a informação antes da modificação dos campos. Nem todos os campos precisam ser alterados, pode ser 1 campo ou todos os outros relacionados ao código.

    Uma parte do código que eu implementei

    Private Sub btnSalvar_Click()
    Dim msg
    end_date = effective_end

    If (iata_code = agency_iata_code) And (iata_effective_end = effective_end) Then


    msg = MsgBox("Registro não foi Salvo!", vbExclamation + vbOKOnly + vbDefaultButton2, "AVISO")

    Else

    iata_effective_end = Date
    DoCmd.RunCommand acCmdSaveRecord

    msg = MsgBox("Registro salvo com Sucesso!", vbExclamation + vbOKOnly + vbDefaultButton2, "AVISO")
    DoCmd.Close

    End If
    End Sub


    Obrigado,
    Jair Martins
    Jair Martins
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 78
    Registrado : 23/03/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  Jair Martins 15/12/2016, 18:17

    Olá, Fabio.

    Não entendi a sua dúvida.
    Tem como postar o form e a origem dos dados?


    Abs.
    avatar
    fabio_niglio
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 17/11/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  fabio_niglio 15/12/2016, 18:49

    Oi Jair
    Desculpa nao consegui carregar a imagem total aqui preciso dar um jeitod e diminuir a qualidade
    Então tenho este formularios com os campos

    codigo iata
    agency category,
    agency group
    agency name
    base
    office id
    ....
    effective start (data começo da vigencia)
    effective end (data fim da vigencia)

    Eu preciso que nesse formulario aconteça apenas edição. O código iata no caso aqui é unico para cada registro mas ele tem um tempo de vigencia. Cada vigencia vai ter informações relacionados a este iata. Preciso armazenar essa informação
    por exemplo um codigo IATA 99, que começou a valer na data 01/01/2016 e vai até 31/12/2050 (data final) deixei a data longe como se tivesse a vigencia aberta.
    Quando a pessoa fosse fazer um ajuste neste registro, ele guardaria essa informação IATA 99, finalizando a data de vigencia. Os campos de data são separados de inicio e de fim. Colocando a data final por exemplo 15/12/2016.
    Preciso guardar com essa data de encerramento e teria uma copia do IATA 99 mas com algumas informações nos campos do meio que são diferentes.

    A origem dos dados vem de uma tabela (final) agency com os campos no mesmo nome.



    Jair Martins
    Jair Martins
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 78
    Registrado : 23/03/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  Jair Martins 16/12/2016, 13:10

    Bom dia, Fabio.

    Peço perdão pela minha limitada capacidade de compreensão. Pelo que entendi, você quer armazenar estes mesmos dados que estão no form, só que "finalizando a data de vigência", que, imagino seja atribuir a data atual ao campo Data Final no momento em que o registro foi atualizado, é isso?
    Você disse que estes dados já estão armazenados num tabela, certo?
    Você quer armazenar novamente estes dados em outra tabela ou simplesmente atualizar o registro com a data corrente?

    Abs.
    avatar
    fabio_niglio
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 17/11/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  fabio_niglio 16/12/2016, 13:17

    Quero mantes os dados na mesma tabela, tando o dado que não foi modificado os campos quanto o que foi modificado.

    Quando fizer a modificação o registro mais antigo teria a sua data fechada para o dia anterior ao dia de hoje. E o registro modificado teria uma a data inicio com a data de hoje e a data fim de vigencia aberto (31/12/2050)

    Registro : codio iata 99, data inicio: 01/01/2016,  data fim 31/12/2050

    quando modificar:
    Registro antigo : codigo iata 99  ,(campos inalterados), data inicio: 01/01/2016 ,data fim 15/12/2016 (dia anterior)
    Registro novo : codigo iata 99, (alguns campos alterado), data inicio: 12/12/2016, data fim 30/12/2050 (vigencia aberta)

    Acho que agora deve ta um pouco melhor para visualizar,

    Abs.
    Jair Martins
    Jair Martins
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 78
    Registrado : 23/03/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  Jair Martins 16/12/2016, 19:15

    Olá, Fabio.

    Como não foi informado qual o campo que é a chave primária da tabela, nem o tipo e o tamanho deste campo, vou considerar o "office id" como sendo este campo e que ele seja autonumeração, do tamanho long, portanto.

    O primeiro passo é congelar os dados inalterados, alterando apenas a DataFinal para a data corrente menos um dia. Vamos então utilizar uma tabela temporária que será atualizada sempre que um registro estiver em foco. Então, no evento No Atual do form, digite o seguinte código com as devidas substituições:

    Dim strSQL As String
    Dim lngId As Long

    lngId = Me.cadId

    DoCmd.SetWarnings False

    strSQL = "SELECT NomeDaTabela.[codigo iata], NomeDaTabela.[agency category], NomeDaTabela.[agency group], NomeDaTabela.[agency name], NomeDaTabela.[base], NomeDaTabela.[effective start], Date()-1 AS NovaData INTO NomeDaTabelaTemporaria" _
    & " FROM NomeDaTabela WHERE (((NomeDaTabela.[office id] =" & lngId & "));"

    DoCmd.RunSQL strSQL

    DoCmd.SetWarnings True


    Não vamos mexer no registro alterado, esperando que a alteração não seja na Data Final.

    O próximo passo é incluir na tabela de armazenamento o registro salvo na tabela temporária.
    No evento Após Atualizar do form, digite o código:

    Dim strSQL As String

    strSQL = "INSERT INTO NomeDaTabela.[codigo iata], [agency category], [agency group], agency name], [base], [effective start], [effective end] )" _
    & " SELECT NomeDaTabelaTemporaria.[codigo iata], NomeDaTabelaTemporaria.[agency category], NomeDaTabelaTemporaria.[agency group], NomeDaTabelaTemporaria.[agency name], NomeDaTabelaTemporaria.[base], NomeDaTabelaTemporaria.[effective start], NomeDaTabelaTemporaria.NovaData" _
    & " FROM NomeDaTabelaTemporaria;"

    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True

    Isto deve resolver o seu requisito. O único porém é que o novo registro será o que tem os dados inalterados, menos a DataFinal, que recebeu outro valor.


    Abs.
    avatar
    fabio_niglio
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 17/11/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  fabio_niglio 17/12/2016, 16:49

    o Office_id não é a chave primaria, eu criei um chamado ID_IATA, que funciona como uma numeração automatica, esse outro campo vai ser uma outra informação desse codigo IATA

    Eu vou fazer o teste Jair para ve com esta.

    Então a principio o fato de tirar da tabela e colocar novamente não vai me afetar porque quando gero uma consulta desse banco eu busco informações considerando duas regras que a data inicio seja <= [data atual] e a data fim seja >=[data fim] eu consulto apenas os códigos iatas que estão vigentes atualmente e mantenho o histórico para caso precise procurar as vigencias como eram no passado eu altero colocando no lugar da [data atual], uma data a minha escolha.

    Obrigado na segunda feira vou fazer o teste e aviso aqui.

    =)

    abs.
    avatar
    fabio_niglio
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 17/11/2016

    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  fabio_niglio 19/12/2016, 12:54

    Jair eu apliquei essa regra e esta dando um erro!!!

    Ele fala que não posso usar o 'Me' desta forma.


    Public Function Salva_registro_antigo()

    Dim strSQL As String
    Dim lngId As Long

    lngId = Me.cadId - dando erro nesta linha


    DoCmd.SetWarnings False

    strSQL = "SELECT (final) employee_agency.[agency_iata_code], (final) employee_agency.[executive] ,(final) employee_agency.[agency_group], (final) employee_agency.[coordinator], (final) employee_agency.[base], (final) employee_agency.[begin_date], Date()-1 AS NovaData INTO Tabela_TMP" _
    & " FROM employee_agency WHERE (((employee_agency.[agency_iata_code] =" & lngId & "));"

    DoCmd.RunSQL strSQL

    DoCmd.SetWarnings True


    End Sub
    End Function


    Pode me ajudar?

    abraço

    Conteúdo patrocinado


    [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados Empty Re: [Formulario]Armazenando dados historicos não modificados e adicionando a linha com os campos modificados

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/4/2024, 05:13