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

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 381
    Registrado : 28/10/2010

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  zcarloslopes 14/5/2020, 11:46

    Bom dia a todos,

    Preciso da vossa ajuda para o seguinte:

    Ao alterar uma ComboBox desvinculada necessito correr uma instrução dependendo do OldValue da mesma.

    Alguma ideia?

    Obrigado


    Última edição por zcarloslopes em 15/5/2020, 09:12, editado 1 vez(es)
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3324
    Registrado : 21/04/2011

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  Marcelo David 14/5/2020, 11:57

    Bom dia. Se é desvinculada, OldValue não estará disponível, pois essa propriedade é para campos vinculados/acoplados.

    O que pode fazer é criar uma variável (visível em todo o form) que armazene o valor inicial e assim poderá usar essa valor
    com a mesma aplicabilidade.


    .................................................................................
    Marcelo David | [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 381
    Registrado : 28/10/2010

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  zcarloslopes 14/5/2020, 12:04

    Obrigado Marcelo David pelo retorno,

    Sei disso, mas cada vez que eu altero a combo, vou precisar de verificar o valor antes de alterar, como poderei guardar o OldValue com essa variável (visível em todo o form)?

    Estou a tentar resolver o problema com a propriedade Tag, pode ser que entretanto aparece outra solução.


    Obrigado
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3324
    Registrado : 21/04/2011

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  Marcelo David 14/5/2020, 12:12

    Acho até melhor usar a Tag.

    Poderia ser assim:

    Evento antes de atualizar da sua combo:
    Me.SuaCombo.Tag = Me.SuaCombo

    Dessa forma, todas as vezes que alterar esse campo,
    a propriedade tag terá o valor antes da alteração.

    OU esse código, poderá por no evento antes de salvar seus
    dados. Depende de como está seu aplicativo.


    .................................................................................
    Marcelo David | [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 381
    Registrado : 28/10/2010

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  zcarloslopes 14/5/2020, 15:11

    Obrigado Marcelo David pelo retorno,

    Está quase a funcionar, mas tem um pequeno problema a ultrapassar..

    Está assim:
    Código:
    Private Sub cboX_GotFocus()

    Me!cboX.Tag = Nz(Me!cboX, "")

    End Sub
    No evento antes de atualizar:
    Código:
    Dim lngValue As Long
    Dim ValorAntigo As String
    Dim ValorNovo As String

    ValorAntigo = Me.cboX.Tag
    ValorNovo = Me.cboX.Value

    If ValorAntigo <> ValorNovo And ValorAntigo = "xxx" Then

        lngValue = MsgBox("Isto via fazer xxxxxx!!" & vbCrLf & "QUER CONTINUAR?", vbYesNoCancel + vbQuestion, "Confirmação")
        
        Select Case lngValue
            Case vbYes
            
               'Faz o que tem que fazer

            Case vbNo
            
                Cancel = True
                'Me.Undo
                'Me.cboX = ValorAntigo
                
            Case vbCancel
            
                'Não faz nada
                
        End Select
    End If

    Me!cboX.Tag = Nz(Me!cboX, "")
    O problema é que no "Case vbNo" só me aceita "Cancel = True" mas não regressa ao valor anterior.
    Alguma ideia de como resolver isto? Preciso mesmo da confirmação por parte do user...

    Obrigado
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3324
    Registrado : 21/04/2011

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  Marcelo David 14/5/2020, 17:25

    Vamos lá!
    Ao invés de usar as variáveis, como mencionei anteriormente,
    tente o seguinte no vbNo (apague o código que tem lá e ponha o seguinte)

    Cancel = True
    SendKeys "{ESC}"
    SendKeys "{ESC}"


    .................................................................................
    Marcelo David | [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev
    annissima
    annissima
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 169
    Registrado : 24/10/2017

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  annissima 14/5/2020, 18:43

    Já tentou o comando .undo?

    Código:
    If (verificar condição) then
    me!textbox.undo
    end if

    Vi algo sobre isso mas não estou encontrando pra postar aqui
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3324
    Registrado : 21/04/2011

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  Marcelo David 14/5/2020, 18:45

    Bom tarde annissima,
    Undo só funciona em campos acoplados.


    .................................................................................
    Marcelo David | [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev
    annissima
    annissima
    Intermediário
    Intermediário

    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 169
    Registrado : 24/10/2017

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  annissima 14/5/2020, 18:49

    Hmmm que legal rsrs

    Bom.. eu não sou nenhuma expert, aliás to looonge disso...
    Então eu faço gambiarras rs

    Nesse caso, eu faria assim:

    1. ao clicar, copiar o valor para uma segunda caixa nao acoplada, invisível...
    me.1 = me.2

    2. ao sair, verificar se os valores são da forma que vc deseja...

    se sim, fazer o que vc precisa, se não, pegar o que vc salvou na caixa invisível e colar na sua combo.

    Será que da certo?
    avatar
    zcarloslopes
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 381
    Registrado : 28/10/2010

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  zcarloslopes 15/5/2020, 09:11

    Obrigado annissima e Marcelo David pelo retorno,

    annissima, a sua ideia poderia até funcionar, mas acabei por não testar.

    Marcelo David, o SendKeys "{ESC}" também não funcionou, e ainda me cancelava outras acções.

    Resolvi voltando à sua primeira dica de usar as variáveis no topo do código do form que deixo aqui para quem precisar:

    Criar as variáveis no  topo do código do form:
    Código:
    Option Compare Database
    Option Explicit

    Private OldComboValue As Variant
    Private CheckChangeBack As Boolean
    Ao Receber foco:
    Código:
    Private Sub cboX_GotFocus()

    OldComboValue = Nz(Me!cboX.Value, "")

    End Sub
    Antes de atualizar:
    Código:
    Private Sub cboX_BeforeUpdate()
    Dim lngValue As Long
    Dim ValorAntigo As String
    Dim ValorNovo As String

    ValorAntigo = OldComboValue
    ValorNovo = Me.cboX.Value

    If ValorAntigo <> ValorNovo And ValorAntigo = "xxx" Then

        lngValue = MsgBox("Isto via fazer xxxxxx!!" & vbCrLf & "QUER CONTINUAR?", vbYesNoCancel + vbQuestion, "Confirmação")
        
        Select Case lngValue
            Case vbYes
            
               'Faz o que tem que fazer

            Case vbNo
            
                CheckChangeBack = True '<------ valida para cancelar no AfterUpdate
                
            Case vbCancel
            
                'Não faz nada
                
        End Select
    End If
    End Sub
    Depois de Atualizar:
    Código:
    Private Sub cboX_AfterUpdate()

    If CheckChangeBack = True Then
        CheckChangeBack = False
        Me.cboX.Value = OldComboValue '<--- se for verdadeiro volta ao valor anterior
    Else
        OldComboValue = Nz(Me.cboX.Value, "")
    End If

    End Sub
    Obrigado
    Marcelo David
    Marcelo David
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3324
    Registrado : 21/04/2011

    [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada Empty Re: [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada

    Mensagem  Marcelo David 15/5/2020, 13:20

    Ótimo que resolveu e obrigado por compartilhar a solução!


    .................................................................................
    Marcelo David | [Resolvido]Comparar .Value vs .OldValue em Combobox desvinculada LinkedIn_Icon.jpg.original LinkedIn
    https://www.freetool.dev

      Data/hora atual: 20/6/2021, 00:58