MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Compartilhe

    Henrique Bachour
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 16/11/2015

    [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Henrique Bachour em Ter 17 Nov 2015, 13:40

    Olá, parceiros!

    Estou lutando há dias para construir um código que atualize um registro de uma tabela considerando os valores passados para cada campo de chave da mesma.

    Mas, todos os códigos tentados resultam no mesmo: são alterados todos os registros que possuem anteriormente o mesmo valor no campo alterado de um único registro.

    Explicando melhor:
    Há um Formulário principal (FM_CADASTROOBRA) que exibe em lista os dados da Tabela OBRACOMODO num subformulário (SF_OBRACOMODO).
    Quando eu dou duplo clique numa linha desse subformulário, eu abro um formulário popup (FM_OBRACOMODO) com os dados da linha dispostos num formulário normal.
    O usuário altera os dados que quiser, por exemplo o campo Forms!FM_OBRACOMODO!CDPAV.
    Ao fechar o Formulário Popup (FM_OBRACOMODO) o código abaixo é executado.
    Mas, a retornar o controle para o Formulário principal, todos os registros que possuíam anteriormente o mesmo valor que tinha o campo CDPAV, também são alterados na tabela e, logicamente no Subform.
    Em suma, as condições definidas na cláusula WHERE não estão sendo respeitadas.

    Agradeço muitíssimo qualquer ajuda que vier.

    Abs
    Henrique


    Seguem as partes principais de dois dos Códigos já tentados e que produziram o mesmo efeito:

    CurrentDb.Execute "UPDATE OBRACOMODO " & _
      "Set [OBRACOMODO].[CDPAV]=(""" & Forms!FM_OBRACOMODO!CDPAV & """), [OBRACOMODO].[CDPAD]=(""" & Forms!FM_OBRACOMODO!CDPAD & """),[OBRACOMODO].[CDREV] = (""" & Forms!FM_OBRACOMODO!CDREV & """) WHERE [OBRACOMODO].[CDOBRA] = " & Forms!FM_OBRACOMODO!CDOBRA & " And [OBRACOMODO].[SQCOM] = " & Forms!FM_OBRACOMODO!SQCOM & ""


    *****************************

    Set rst = dbs.OpenRecordset("SELECT * FROM OBRACOMODO WHERE CDOBRA = " & Forms!FM_OBRACOMODO!CDOBRA & _
       "AND CDCOM = " & Forms!FM_OBRACOMODO!CDCOM & _
       "AND SQCOM = " & Forms!FM_OBRACOMODO!SQCOM)

           rst.Edit
           rst!CDPAV = Forms!FM_OBRACOMODO!CDPAV
           rst!CDPAD = Forms!FM_OBRACOMODO!CDPAD
           rst!CDREV = Forms!FM_OBRACOMODO!CDREV
           rst!AREA = Forms!FM_OBRACOMODO!AREA
           rst!PEDIR = Forms!FM_OBRACOMODO!PEDIR
           rst!CDREB = Forms!FM_OBRACOMODO!CDREB
           rst!ARREB = Forms!FM_OBRACOMODO!ARREB
           rst.Update

    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1095
    Registrado : 21/01/2012

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Cláudio Más em Ter 17 Nov 2015, 13:52

    Olá,

    Seria melhor usar a chave primária.
    No exemplo abaixo, é o campo chamado ID, que deve estar presente no sub-formulário, mesmo que invisível:

    WHERE [OBRACOMODO].[ID] = " & Forms!FM_OBRACOMODO!SF_OBRACOMODO.Forms!ID

    Henrique Bachour
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 16/11/2015

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Henrique Bachour em Ter 17 Nov 2015, 14:03

    Cláudio,

    Todos os campos da chave primária da tabela estão na cláusula Where e possuem valor no momento que o código é executado.

    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1095
    Registrado : 21/01/2012

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Cláudio Más em Ter 17 Nov 2015, 14:25

    Então a chave primária é composta?
    A tabela não tem um campo Numeração Automática?

    A cláusula WHERE não deveria estar referenciando os campos no sub-formulário SF_OBRACOMODO?

    Se puder enviar uma cópia do arquivo somente com os objetos envolvidos, facilita com a solução.

    Henrique Bachour
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 16/11/2015

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Henrique Bachour em Ter 17 Nov 2015, 15:58

    Cláudio,

    Conforme foi explicado no primeiro email, a cláusula WHERE referencia os campos do formulário POPUP onde o código é executado, AO FECHAR.

    Durante o debuging posso ver os valores sendo passados pelos campos. Não é esse o problema.

    A Chave da tabela é composta pelos campos abaixo:

    CDOBRA
    CDCOM
    SQCOM

    O campo SQCOM é de numeração automática mas isso também não importa pois estou atualizando registro já existente e não incluindo registros.


    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1095
    Registrado : 21/01/2012

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Cláudio Más em Ter 17 Nov 2015, 17:46

    Henrique,

    O campo numeração automática talvez seja até mais importante para atualização de registros existentes, pois garante que estará atualizando um único registro nesse caso.

    Entendi que a instrução UPDATE referencia os campos do formulário POPUP para atualização dos valores daquele registro, mas a identificação do registro a ser atualizado está no sub-formulário SF_OBRACOMODO. Esse formulário se mantém aberto após abrir o POPUP?

    Pode até continuar insistindo na chave composta, mas certamente deverá buscar a identificação do registro a ser atualizado no sub-formulário SF_OBRACOMODO, e utilizar essa identificação na cláusula WHERE.

    Conforme minha mensagem anterior, a sintaxe é a seguinte:

    WHERE [OBRACOMODO].[SQCOM ] = " & Forms!FM_OBRACOMODO!SF_OBRACOMODO.Forms!SQCOM

    Henrique Bachour
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 16/11/2015

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Henrique Bachour em Ter 17 Nov 2015, 18:46

    Obrigado, Cláudio... já encontrei o erro: o campo que eu estava alterando era o único que estava acoplado no formulário POPUP.


    COMO FAÇO PARA DAR A QUESTÃO COMO RESOLVIDA?


    Última edição por Henrique Bachour em Ter 17 Nov 2015, 18:50, editado 1 vez(es)

    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1095
    Registrado : 21/01/2012

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Cláudio Más em Ter 17 Nov 2015, 18:48

    De nada.

    Henrique Bachour
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 16/11/2015

    Re: [Resolvido]UPDATE em Tabela não respeita as condições do WHERE

    Mensagem  Henrique Bachour em Qua 18 Nov 2015, 11:27

    Obrigado, Cláudio... já encontrei o erro: o campo que eu estava alterando era o único que estava acoplado no formulário POPUP.

      Data/hora atual: Dom 04 Dez 2016, 06:00