MaximoAccess

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

Obrigado

Administração do MaximoAccess

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 100%

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

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

    Mensagem  zcarloslopes em 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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3209
    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 em 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 100%

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

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

    Mensagem  zcarloslopes em 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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3209
    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 em 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 100%

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

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

    Mensagem  zcarloslopes em 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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3209
    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 em 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 100%

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

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

    Mensagem  annissima em 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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3209
    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 em 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 100%

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

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

    Mensagem  annissima em 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 100%

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

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

    Mensagem  zcarloslopes em 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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3209
    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 em 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: 3/12/2020, 16:03