locked
Está excluindo sempre o primeiro da tabela. RRS feed

  • Pergunta

  •  

    Boa tarde pessoal,

     

    Estou com uma dificuldade que é a seguinte: Através de um form eu faço uma busca e seleciono um registro do resultado da busca, então executo o código abaixo para tentar excluir o registro.

    O fato é que o aplicativo está excluindo sempre o primeiro registro da tabela. Se o registro escolhido para exclusão não for o primeiro, o aplicativo está substituindo o primeiro registro pelo registro selecionado.

     

    Code Snippet

     

    Dim excluir, resposta

        resposta = MsgBox("Você tem certeza que deseja excluir o registro selecionado?", vbYesNo + vbQuestion, "Exclusão?")
           
            If resposta = vbNo Then
                Exit Sub
               
            Else:

                Dim Código As String
                Código = Forms!Registro_Ocorrências!Código.Value
               
                Set rst = CurrentDb.OpenRecordset("select * FROM TbRegistros WHERE TbRegistros.Código=" & Código & "")
                rst.Delete
               
                Forms!Registro_Ocorrências.Requery
                Forms!Registro_Ocorrências.Consulta_Registros_Subform.Requery
           
                MsgBox "Registro excluído com sucesso!", , "Exclusão!"

            End If

     

     

     

    Tentei també o seguinte código:

     

    Code Snippet

     

    Dim excluir, resposta

        resposta = MsgBox("Você tem certeza que deseja excluir o registro selecionado?", vbYesNo + vbQuestion, "Exclusão?")
           
            If resposta = vbNo Then
                Exit Sub
               
            Else:

     

                Dim Código As String
                Código = Forms!Registro_Ocorrências!Código.Value

               

                Dim db As Database
                Dim strsql As String
                Set db = CurrentDb
                strsql = "delete FROM TbRegistros WHERE TbRegistros.Código=" & Código & ""
                db.Execute strsql

     

     

                Forms!Registro_Ocorrências.Requery
                Forms!Registro_Ocorrências.Consulta_Registros_Subform.Requery
           
                MsgBox "Registro excluído com sucesso!", , "Exclusão!"

            End If

     

     

    Alguém pode me dizer se o problema está no código ou nas propriedades da tabela ou do form?

     

    Muito obrigado!

    terça-feira, 9 de dezembro de 2008 16:12

Todas as Respostas

  • Ola Wagner,

    Olhando rapidamente, notei que você definiu Código como String, mas na consulta (sql) está usando como Número.

    Luciano

    quarta-feira, 10 de dezembro de 2008 10:19
  • Olá Luciano,

     

    Obrigado pela dica.

    Mas ainda assim o Aplicativo está respondendo da mesma forma. Excluido sempre o primeiro da tabela.

    Olhei nas propriedades da tabela e do form mas não consegui identificar o que pode estar causando essa anormalidade no comportamento esperado.

     

    quarta-feira, 10 de dezembro de 2008 16:46
  • Ola Wagner,

    Os 03 tipos abaixo funcionariom.

     

    Code Snippet

    Option Compare Database
    Option Explicit
    Dim tbl As Recordset
    Function teste()
        Call apaga_registro_3("a")
    End Function
    Function apaga_registro_1(v_txt As String)
        Set tbl = CurrentDb.OpenRecordset("SELECT tbl_01.texto " & _
                                          "FROM tbl_01 " & _
                                          "WHERE (((tbl_01.texto)= '" & v_txt & "'));")
        If tbl.EOF = False Then
            With tbl
                .Delete
            End With
        End If
        tbl.Close
        Set tbl = Nothing
        CurrentDb.Close
    End Function
    Function apaga_registro_2(v_txt As String)
        Set tbl = CurrentDb.OpenRecordset("SELECT tbl_01.texto " & _
                                          "FROM tbl_01 " & _
                                          "WHERE (((tbl_01.texto)= '" & v_txt & "'));")

        tbl.Delete
        tbl.Close
        Set tbl = Nothing
        CurrentDb.Close
    End Function
    Function apaga_registro_3(v_txt As String)
        CurrentDb.Execute "DELETE tbl_01.texto " & _
                          "FROM tbl_01 " & _
                          "WHERE (((tbl_01.texto)='" & v_txt & "'));"

    End Function

     

     

    quarta-feira, 10 de dezembro de 2008 17:08
  • Bom dia Luciano!

     

    Primeiro gostaria de agradecer a sua presteza e disposição em achar uma solução.

     

    Utilisei os três exemplos de código que você me passou e, os três funcionaram para a exclusão, porém, o comportamento está sendo o mesmo.

    Deixa eu explicar com mais detalhes pra ver se você consegue pegar algum furo no processo:

     

    Tenho uma tabela chamada "TbRegistros". Em um Form eu utilisei um SubForm como Grid para carregar o resultado das consultas (extraídas dessa tabela). Na primeira coluna desse SubForm eu coloquei um link para detalhar o registro em campos abaixo. Coloquei um campo que captura o código(ID) do registro selecionado e é dai que eu capturo o ID para jogar no fonte, com aquele exemplo que mencionei.

     

    Acredito que tenha alguma configuração da Tabela ou do Form ou SubForm que esteja fazendo com que o Aplicativo se comporte dessa forma.

     

    Mais uma vez... muito obrigado!

     

    quinta-feira, 11 de dezembro de 2008 12:33
  • Wagner, se puder mandar um bd de exemplo do que ocorre, pois, não estou entendendo o problema.

    Luciano

    sexta-feira, 12 de dezembro de 2008 13:11
  • Marco,

     

    o código está correto.

     

    Pause a execução na linha

    strsql = "delete FROM TbRegistros WHERE TbRegistros.Código=" & Código & ""

    e veja se 'Código' contém o valor que você espera.

     

    sábado, 13 de dezembro de 2008 02:02
    Moderador
  • Bom dia Luiz,

     

    Pausei a execução e verifiquei que o valor do código está correto.

    Acredito que o problema deva estar nas propriedades da Tabela de orígem ou no Form ou no SubForm.

    Tem algum e-mail que eu possa passar uma parte desse BD pra você ver se consegue identificar o problema?

     

    Obrigado!
    segunda-feira, 15 de dezembro de 2008 12:07
  • Olá Wagner,

    não vou nem pedir que me mande o BD porque neste final de ano sei que vou acabar nem abrindo, tamanha é a quantidade de trabalho em que estou envolvido.

    Para chegar à solução, continue executando o código linha a linha e abrindo a tabela para ver o que acontece.

    Se foi disparado o comando "Delete from tabela where codigo=5", não é possível o Access ter apagado o registro de código 1. Se aconteceu do registro 1 ser apagado, o comando foi disparado em outro lugar.

    Verifique também na configuração dos relacionamentos se não tem alguma exclusão em cascata que possa estar causando este resultado não desejado.


    domingo, 21 de dezembro de 2008 12:07
    Moderador