MaximoAccess

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

Obrigado

Administração do MaximoAccess

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


    Excluir dados em Loop

    avatar
    juliobertoso
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 89
    Registrado : 23/10/2017

    Excluir dados em Loop Empty Excluir dados em Loop

    Mensagem  juliobertoso em 9/1/2020, 19:53

    Boa tarde pessoal,

    estou quebrando a cabeça para excluir dados de uma tabela em Loop e preciso muito da visão e ajuda de vocês. Tenho um formulário "frmOcorrencia" e dentro dele tenho um SubFormulário  "SUB2_Ocorrencia" no formato Folha de Dados, preciso que ao clicar no botão excluir, o sistema corra a tabela e verifique se o campo "OC" do form "SUB2_Ocorrencia" é igual ao campo [_ID] do frmOcorrencia ai ele exclua todos os dados, mas meu código abaixo não esta funcionando.


    Código:

    Private Sub btoExcluir_Click()
     On Error Resume Next


    If MsgBox("Este procedimento irá excluir este registro definitivamente ? ", vbYesNo + vbQuestion, "Aviso") = vbYes Then


        Dim rs As DAO.Recordset

        'Corre a Tabela

        Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_LogFretes_AberturaOcorrencia")

        'EOF = End Of File
        Do Until rs.EOF 'faça até o fim do arquivo
        'faz a comparação
        If Form_frm_SUB2_Ocorrencia.OC = Form_frmOcorrencia.[_ID] Then
      
        rs.Fields("OC").Value = ""
        rs.Fields("TransportadoraContratada").Value = ""
        rs.Fields("FreteContratoado").Value = ""
        rs.Fields("Diferenca").Value = ""
        rs.Fields("DataOcorrencia").Value = ""
        rs.Fields("TextoOcorrencia").Value = ""
        
        
        End If
        rs.MoveNext

        Loop
        
        'fechar conexão
        rs.Clone
        
      
        'libera memória
        Set rs = Nothing
       End If
    End Sub
    alozs
    alozs
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 199
    Registrado : 07/02/2018

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  alozs em 9/1/2020, 20:25

    tenta usar esse código

    Código:

    Dim strSQL As String
        strSQL = "DELETE * FROM tbl_LogFretes_AberturaOcorrencia WHERE OC = " & _ID
        CurrentDb.Execute strSQL

    caso não consiga poste parte do BD
    avatar
    juliobertoso
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 89
    Registrado : 23/10/2017

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  juliobertoso em 9/1/2020, 20:47

    alozs,

    não deu certo, o procedimento apaga apenas a primeira linha

    Detalhe que esqueci de informar

    OC esta na tabela tbl_LogFretes_AberturaOcorrencia (SUB2_Ocorrencia), os campos abaixo também

    rs.Fields("OC").Value = ""
    rs.Fields("TransportadoraContratada").Value = ""
    rs.Fields("FreteContratoado").Value = ""
    rs.Fields("Diferenca").Value = ""
    rs.Fields("DataOcorrencia").Value = ""
    rs.Fields("TextoOcorrencia").Value = ""


    _ID esta em outra tabela, tblFretes (frmOcorrencia)
    alozs
    alozs
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 199
    Registrado : 07/02/2018

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  alozs em 9/1/2020, 21:01

    se puder postar parte do bd é melhor para analisar
    Jungli
    Jungli
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 677
    Registrado : 07/05/2010

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  Jungli em 9/1/2020, 22:43

    Boa noite,

    Tente assim:

    Código:
    '// Desativa os avisos do sistema
       DoCmd.SetWarnings False
    '// Questiona ao usuário sobre a exclusão do registro
       If MsgBox("Este procedimento irá excluir este registro definitivamente ? ", vbYesNo + vbQuestion, "Aviso") = vbYes Then
       
       '// Abre o Recordset
           Dim rs As DAO.Recordset: Dim jSQL As String
           jSQL = "SELECT * FROM tbl_LogFretes_AberturaOcorrencia WHERE " & _
                                "tbl_LogFretes_AberturaOcorrencia.[OC]=" & Form_frmOcorrencia.[_ID].Value
           Set rs = CurrentDb.OpenRecordset(jSQL)
       '// Loop
           'EOF = End Of File
           While (Not rs.EOF)
               rs.Delete
               rs.MoveNext
           Wend
       '// Fechar conexão
           rs.Clone
       '// Libera memória
           Set rs = Nothing
       '// Formulário Principal ==========================================
       '   Deverá apagar o registro principal ou seja a venda!
           DoCmd.RunCommand acCmdSelectRecord
           DoCmd.RunCommand acCmdDeleteRecord
       '// Informa ao usuário
           MsgBox "Venda excluída com sucesso!", vbInformation, "Atenção"
       Else
           Exit Sub
       End If


    .................................................................................
    "Somos o que repetidamente fazemos.
    A excelência, portanto, não é um feito,
    mas um hábito."

    Aristóteles
    avatar
    juliobertoso
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 89
    Registrado : 23/10/2017

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  juliobertoso em 10/1/2020, 12:58

    Jungli

    tentei como você informou e tentei mudando uma parte do código, conforme baixo
    Código:
          jSQL = ("SELECT * FROM tbl_LogFretes_AberturaOcorrencia WHERE [OC] = " & Form_frmOcorrencia.[_ID].Value)
           Set rs = CurrentDb.OpenRecordset(jSQL)

    para ambos retorna o erro "erro em tempo de execução 3464 - tipos de dados incompatível com a expressão de critério"

    tentei conforme o primeiro código, mas incluindo no Loop o rs.Delete, o comando exclui, porém exclui todos os dados da tabela, ou seja, não faz a comparação no If e exclui tudo
    Código:
    Private Sub btoExcluir_Click()
     On Error Resume Next

    If MsgBox("Este procedimento irá excluir este registro definitivamente ? ", vbYesNo + vbQuestion, "Aviso") = vbYes Then
        Dim rs As DAO.Recordset
        
    'Corre a Tabela
        Set rs = CurrentDb.OpenRecordset("SELECT * FROM tbl_LogFretes_AberturaOcorrencia")

        'EOF = End Of File
        Do Until rs.EOF 'faça até o fim do arquivo
        'faz a comparação
        If Form_frm_SUB2_Ocorrencia.OC = Form_frmOcorrencia.[_ID] Then
      
        rs.Fields("OC").Value = ""
        rs.Fields("TransportadoraContratada").Value = ""
        rs.Fields("FreteContratoado").Value = ""
        rs.Fields("Diferenca").Value = ""
        rs.Fields("DataOcorrencia").Value = ""
        rs.Fields("TextoOcorrencia").Value = ""
            
        End If
        rs.MoveNext
        rs.Delete

        Loop
        
        'fechar conexão
        rs.Clone
        
        'libera memória
        Set rs = Nothing
       End If
    End Sub
    Jungli
    Jungli
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 677
    Registrado : 07/05/2010

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  Jungli em 10/1/2020, 20:00

    Boa tarde,

    Esse erro 3464, acontece porque você tem campos com tipos de dados diferentes,

    ex.: OC integer e _ID tipo texto

    você terá que fazer essa correção na sua base de dados


    .................................................................................
    "Somos o que repetidamente fazemos.
    A excelência, portanto, não é um feito,
    mas um hábito."

    Aristóteles

    Conteúdo patrocinado

    Excluir dados em Loop Empty Re: Excluir dados em Loop

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 18/1/2020, 20:44