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

3 participantes

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 12/9/2021, 22:24

    Olá a todos, estou mais uma vez recorrendo a ajuda de vocês.
    No sistem que estou desenvolvento tenho o cadastro de produtos, que possue informações adicionais em tabelas distintas, composição, estoque e fornecedores.
    Meu problema esta em apagar os registros das tabelas adicionais, pois o código que uso está apagando apenas o primeiro registro encontrado nas tabelas.

    Código:


        If Me.pr06composto = "SIM" Then
        csql = ("SELECT * from pr07composicao where pr07idprod = " & Me.pr06idprod)
        Call Conexao_Open(csql)    'Abre a conexão para a tabela informada
        
        nregistros = rs.RecordCount
        If nregistros > 0 Then
            
        rs.Delete
        
            rs.Close
            cn.Close
            
        End If
        
        Else
      
        csql = ("SELECT * from pr08fornecedores where pr08idprod = " & Me.pr06idprod)
        Call Conexao_Open(csql)    'Abre a conexão para a tabela informada
            
        nregistros = rs.RecordCount
        If nregistros > 0 Then
            
        
        rs.Delete
        
            rs.Close
            cn.Close
            
        End If
        
        End If


    Obrigado pela ajuda!

    Giovanni Paiva
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3074
    Registrado : 22/11/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  DamascenoJr. 13/9/2021, 01:17

    Código:
    If Me.pr06composto = "SIM" Then

        csql = ("SELECT * from pr07composicao where pr07idprod = " & Me.pr06idprod)
        Call Conexao_Open(csql)    'Abre a conexão para a tabela informada
       
        If rs.RecordCount > 0 Then

            do
                rs.Delete
                rs.movenext
            loop until rs.eof
     
            rs.Close
           
        End If
       
        Else
     
        csql = ("SELECT * from pr08fornecedores where pr08idprod = " & Me.pr06idprod)
        Call Conexao_Open(csql)    'Abre a conexão para a tabela informada
           
        If rs.RecordCount > 0 Then
           
            do
                rs.Delete
                rs.movenext
            loop until rs.eof
     
            rs.Close
           
        End If
       
        End If

    cn.Close


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    gtpsp gosta desta mensagem

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  Alexandre Fim 13/9/2021, 02:40

    Apenas passando para deixar minha contribuição.

    Use a instrução DELETE direto, conforme abaixo:

    Código:


       If Me.pr06composto = "SIM" Then
          csql = ("DELETE FROM pr07composicao WHERE pr07idprod = " & Me.pr06idprod)
          Call Conexao_Open(csql)   
        Else
          csql = ("DELETE FROM pr08fornecedores WHERE pr08idprod = " & Me.pr06idprod)
          Call Conexao_Open(csql)   
        End If

       cn.Close




    Boa sorte.

    []'s

    FIM

    gtpsp gosta desta mensagem

    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 13/9/2021, 10:35

    Obrigado Alexandre e Damasceno!

    Alexandre já tinha tentado da forma que voce sugeriu porem apresentou erro, teria que fazer duas conexões uma com select para contar os registros e outra com o delete, porem apagava somente a primeira linha.
    Quanto a sugestão do damasceno  já tinha tentado usar algo semelhante mas a sintaxe que usei gerou erro e ficou em loop infinito, mas da forma que ele colocou funcionou bem!

    Obrigado mais uma vez pela ajuda!

    O código final ficou assim:

    Código:


        'exclui composição OU fornecedor
        
        If Me.pr06composto = "SIM" Then
        csql = ("SELECT * from pr07composicao where pr07idprod = " & Me.pr06idprod)
        Call Conexao_Open(csql)    'Abre a conexão para a tabela informada
        
        nregistros = rs.RecordCount
        If nregistros > 0 Then
            
            Do
                 rs.Delete
                 rs.MoveNext
            Loop Until rs.EOF
            
        
            rs.Close
            cn.Close
            
        End If
        
        Else
      
        csql = ("SELECT * from pr08fornecedores where pr08idprod = " & Me.pr06idprod)
        Call Conexao_Open(csql)    'Abre a conexão para a tabela informada
            
        nregistros = rs.RecordCount
        If nregistros > 0 Then
            
        
              Do
                 rs.Delete
                 rs.MoveNext
            Loop Until rs.EOF
            
        
            rs.Close
            cn.Close
            
        End If
      

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3074
    Registrado : 22/11/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  DamascenoJr. 14/9/2021, 00:08

    Giovanni, a abordagem sugerida pelo Alexandre é melhor. Eu não sugeri dessa maneira por não conhecer bem sua função conexao_open e o que ela pode ou não fazer com o objeto recordset.

    Todavia, você pode obter a quantidade de registros afetados pela execução da instrução sql com a propriedade RecordsAffected do objeto conexão (cn).


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 14/9/2021, 20:53

    Damasceno,

    Com a opção passada pelo Alexandre esta dando msg de erro de sintaxe quando troco o Select pelo Delete.

    Já a sua sugestão rodou normal.

    No conhecimento de vocês pode ter algum problema se manter dessa forma?

    Obrigado!
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  Alexandre Fim 14/9/2021, 21:09

    Giovanni,

    Por gentileza, poste aqui a função "Conexao_Open" para dar uma olhada.


    Valeu
    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 14/9/2021, 21:37

    Alexandre, segue tudo referente a conexão..


    Parametros

    Código:


    'Variaveis de conexão ao servidor MySQL
    Global MyslqServidor As String
    Global MyslqUsuario As String
    Global MyslqSenha As Variant
    Global MyslqDatabase As String
    Global MyslqPorta As String
    Global sErrorMySQL As Double
    Global strFName As String


    'Variaveis de conexão ao banco de dados MySQL
    Global cn As New ADODB.Connection
    Global rs As New ADODB.Recordset
    Global mstream As New ADODB.Stream
    Global cn1 As New ADODB.Connection
    Global rs1 As New ADODB.Recordset
    Global sSQL As String
    Global csql As String




    Conexão

    Código:


    Option Compare Database
    Global sMySQL As String

    '---------------------------------------------------------------------------------------
    '  PROCEDIMENTO: MySQL_Server
    '    DESCRIÇÃO: Carrega os dados para conexão ao servidor MySQL com base na tabela
    '                parametros
    '---------------------------------------------------------------------------------------

    Public Sub MySQL_Server()

        MyslqServidor = DLookup("[Valor]", "_Parametros", "[ID]=8")    'Servidor Web
        MyslqUsuario = DLookup("[Valor]", "_Parametros", "[ID]=10")    'Usuário do banco de dados
        MyslqSenha = DLookup("[Valor]", "_Parametros", "[ID]=11")    'Senha do banco de dados
        MyslqDatabase = DLookup("[Valor]", "_Parametros", "[ID]=12")    'Database
        MyslqPorta = DLookup("[Valor]", "_Parametros", "[ID]=16")    'Porta Database

    End Sub


    '---------------------------------------------------------------------------------------
    '  PROCEDIMENTO: Conexao_Open
    '    DESCRIÇÃO: Realiza a conexão com o servidor MySQL
    '---------------------------------------------------------------------------------------
    Public Sub Conexao_Open(csql)

        Call MySQL_Server    'Carrega parametros do servidor


        If cn.State = 1 Then
            cn.Close
        End If

        If rs.State = 1 Then
            cn.Close
        End If

        cn.Open "Driver={MySQL ODBC 5.3 ANSI Driver};Server=" & MyslqServidor & ";Database=" & MyslqDatabase & ";User=" & MyslqUsuario & "; Password=" & MyslqSenha & "; PORT=" & MyslqPorta & ";Option=3;"
        rs.CursorLocation = adUseClient
        rs.Open csql, cn, adOpenDynamic, adLockOptimistic


    End Sub

    Public Sub Conexao2_Open(csql)

        Call MySQL_Server    'Carrega parametros do servidor


        If cn1.State = 1 Then
            cn1.Close
        End If

        If rs1.State = 1 Then
            cn1.Close
        End If

        cn1.Open "Driver={MySQL ODBC 5.3 ANSI Driver};Server=" & MyslqServidor & ";Database=" & MyslqDatabase & ";User=" & MyslqUsuario & "; Password=" & MyslqSenha & "; PORT=" & MyslqPorta & ";Option=3;"
        rs1.CursorLocation = adUseClient
        rs1.Open sSQL, cn1, adOpenDynamic, adLockOptimistic


    End Sub




    Obrigado!!
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  Alexandre Fim 14/9/2021, 22:17

    Giovanni,

    A instrução DELETE que eu sugeri não vai funcionar porque a conexão utilizada é combinada com abertura de recordset, ou seja, a conexão está "engessada".
    Não é a forma mais correta de utilizar.

    É necessário separar as coisas.
    Abrir conexão é uma coisa e abrir um recordset é outra.

    Ao abrir uma conexão, vc pode utilizar seus métodos para executar determinadas rotinas.

    Minha sugestão:

    Criar uma função somente para abrir conexão com o MySQL:

    Código:


    Public Function fnConn()

        Call MySQL_Server    'Carrega parametros do servidor

        If cn.State = 0 Then
            cn.Open "Driver={MySQL ODBC 5.3 ANSI Driver};" & _
                    "Server=" & MyslqServidor & ";" & _
                    "Database=" & MyslqDatabase & ";" & _
                    "User=" & MyslqUsuario & ";" & _
                    "Password=" & MyslqSenha & ";" & _
                    "PORT=" & MyslqPorta & ";" & _
                    "Option=3;"
        End If
        
        Exit Function

    trata_erro:
        MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "", vbCritical, "Erro"
        Exit Function
        

    End Function





    E a rotina de exclusão de dados poderia ser executada desta forma:
    Código:

       '-- Abre conexão
       Call fnConn
     
       If Me.pr06composto = "SIM" Then
          csql = ("DELETE FROM pr07composicao WHERE pr07idprod = " & Me.pr06idprod)
          cn.Execute csql  '==> executa Instrução DELETE
        Else
          csql = ("DELETE FROM pr08fornecedores WHERE pr08idprod = " & Me.pr06idprod)
      cn.Execute csql  '==> executa Instrução DELETE
        End If

       cn.Close


    Segue exemplo de utilização da conexão:

    Código:


        ' -- função que abre a conexão
        Call fnConn

        ' ------ Usando conexão para abrir recordset de uma query (SELECT) -------
        sSQl = "SELECT * FROM SUA_TABELA"
        rs.Open sSQl, cn, adOpenKeyset, adLockReadOnly
        
        If Not rs.EOF Then
            '-- executar rotina desejada........
            '....
            '...
            
        End If
        '----------------------------------------------------------------------------
        
        
        '--- Excluido registros ----------------------------------------------------
        sSQl = "DELETE FROM SUA_TABELA WHERE CONDIÇÃO....."
        cn.Execute sSQl
        '----------------------------------------------------------------------------
        
        '-- Inserindo dados
        sSQl = "INSERT INTO SUA_TABELA (CAMPO1,CAMPO2) VALUES (VALOR1,VALOR2)"
        cn.Execute sSQl
        '----------------------------------------------------------------------------
        
        '-- Atualizando dados
        sSQl = "UPDATE SUA_TABELA SET CAMPO1 = VALOR1, CAMPO2 = VALOR2 WHERE CONDIÇÃO..."
        cn.Execute sSQl
        '----------------------------------------------------------------------------
        



    OBS: O bd MySQL está em algum provedor na nuvem ou é local?

    Se o servidor de dados for "COMPARTILHADO" é necessário fazer ajustes na conexão, pois o próprio servidor derruba a conexão quando ela está inativa.

    Já me deparei com servidores compartilhados, e pra não gerar erro em uma situação de cadastro /geração de relatório e etc, fiz o seguinte ajuste:

    Código:


       '-- Situação 1= Conexão fechada e o nome de banco de dados for vazio/null
        If cnn.State = 0 And (IsNull(cnn.DefaultDatabase) Or Trim(cnn.DefaultDatabase) = Empty) Then
            '==> Executa função para abrir conexão
        End If
       
       '-- Situação 2= Conexão aberta e nome de banco de dados for vazio/null
       If cnn.State = 1 And (IsNull(cnn.DefaultDatabase) Or Trim(cnn.DefaultDatabase) = Empty) Then
            '==> Executa função para abrir conexão
       End If




    É isso.

    Espero ter ajudado.


    []'s

    FIM

    gtpsp gosta desta mensagem

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3074
    Registrado : 22/11/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  DamascenoJr. 15/9/2021, 01:26

    gtpsp escreveu:No conhecimento de vocês pode ter algum problema se manter dessa forma?
    Funcionar funciona, mas o desempenho não é lá os melhores quando a quantidade de registros for grande.

    Veja no link abaixo um arquivo para "brincar"
    https://www.maximoaccess.com/t34531-sql-x-recordset


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    gtpsp gosta desta mensagem

    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 15/9/2021, 16:40

    Boas,

    Damasceno, obrigado pela informação, ficou muito clara.

    Alexandre, o sistema atual está sendo desenvolvido em bd local, mas ira rodar no provedor do cliente (locaweb).

    Quanto a rotina conectar / excluir funcionou perfeitamente!

    OBS. Não sei se posso tirar a duvida abaixo nesse mesmo post, caso seja necessário abro outro sem problemas!

    Estou adotando sua sugestão para fazer o CRUD, apanhei na parte da manha para entender como setar os dados dos campos quando for string onde tenho que usar ' ' para funcionar, porem quanto a data não estou conseguindo resolver, na hora de setar o valor para o campo fi01datacad ele salva no banco 0000-00-00, tentei usar '#" & fi01datacad &"#', #" & fi01datacad &"# , '#" & Format(fi01datacad, "dd-mm-yyyy") & "#' , '#" & Format(fi01datacad, "yyyy-mm-dd") & "#' e a forma que está no código abaixo inclusive sem o uso das ' ', porem continua salvando zerado.

    Código:


    Public Sub AddRegistro()

        Call fnConn
       
        sSQL = "INSERT INTO fi01bancos " _
        & "(fi01nrbanco ," _
        & "fi01descr ," _
        & "fi01ativo ," _
        & "fi01datacad ," _
        & "fi01idusuariocad )" _
        & "VALUES " _
        & "('" & fi01nrbanco & "' , " _
        & "'" & fi01descr & "' , " _
        & "'" & fi01ativo & "' , " _
        & "'#" & Format(fi01datacad, "mm-dd-yyyy") & "#' , " _
        & "" & TempVars!varIdUsuario & ")"
       
        cn.Execute sSQL
               
        cn.Close
       

    End Sub


    Muito obrigado pela ajuda e atenção!

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  Alexandre Fim 15/9/2021, 16:53

    Giovanni,

    O uso de "#" para formatar data é utilizado somente no Access.

    O correto é:

    Código:


    sSQL = "INSERT INTO fi01bancos " _
        & "(fi01nrbanco ," _
        & "fi01descr ," _
        & "fi01ativo ," _
        & "fi01datacad ," _
        & "fi01idusuariocad )" _
        & "VALUES " _
        & "('" & fi01nrbanco & "' , " _
        & "'" & fi01descr & "' , " _
        & "'" & fi01ativo & "' , " _
        & "'" & Format(fi01datacad, "yyyy-mm-dd") & "' , " _
        & "" & TempVars!varIdUsuario & ")"


    É isso.

    Bos sorte

    []'s


    FIM

    gtpsp gosta desta mensagem

    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 15/9/2021, 18:12

    Alexandre e Damasceno,

    Muito obrigado pela paciência e atenção ao ensinar a quem ainda está gatinhando!!

    Ficou show!!

    Deixo aqui o meu até breve, pois se surgir alguma dúvida irei incomodar.. rsss

    Abaixo seguem os códigos com o novo conceito.


    Carregar a listbox:
    Código:


    Private Sub carregalista()

        Call LimpaCampos
        
        Call fnConn

        sSQL = "select * from fi01bancos order by fi01descr"
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly

        Me!Lista = Null    'Limpa seleção do registro
        Me!Lista.RowSource = ""    'Limpa os dados da caixa de listagem
        Me!Lista.Requery    'atualiza dados da caixa de listagem

        While (Not rs.EOF)

            Me!Lista.AddItem rs.Fields(0).Value & ";" & rs.Fields(1).Value & ";" & rs.Fields(2).Value
            rs.MoveNext    'vai para o proximo registro

        Wend

        rs.Close    'fecha o recorset
        cn.Close    'fecha o banco de dados

    End Sub



    Ao Clicar na listbox carrega os dados para edição
    Código:


    Private Sub lista_Click()
        On Error Resume Next
        
        'carrega os dados do formulário
        Call fnConn

        sSQL = ("select * from fi01bancos WHERE fi01idbanco=" & Me.Lista.Column(0))
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly

                Me.fi01idbanco = rs("fi01idbanco")
                Me.fi01nrbanco = rs("fi01nrbanco")
                Me.fi01descr = rs("fi01descr")
                Me.fi01ativo = rs("fi01ativo")
                Me.fi01datacad = rs("fi01datacad")
                Me.fi01idusuariocad = rs("fi01idusuariocad")
                Me.fi01dataalt = rs("fi01dataalt")

        rs.Close    'Encerra a conexão com o recordeset
        cn.Close    'Encerra a conexão com a base de dados


        'carrega os dados do usuario que editou
        Call fnConn
        sSQL = ("select * from sy05usuarios WHERE sy05idusuario=" & Me.fi01idusuariocad)
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly
        
                Me.fi01idusuariocad = rs("sy05usuario")
                
        rs.Close    'Encerra a conexão com o recordeset
        cn.Close    'Encerra a conexão com a base de dados
        
    End Sub



    Adicionar registros
    Código:


    Public Sub AddRegistro()

        Call fnConn
        
        sSQL = "INSERT INTO fi01bancos " _
        & "(fi01nrbanco ," _
        & "fi01descr ," _
        & "fi01ativo ," _
        & "fi01datacad ," _
        & "fi01idusuariocad )" _
        & "VALUES " _
        & "('" & fi01nrbanco & "' , " _
        & "'" & fi01descr & "' , " _
        & "'" & fi01ativo & "' , " _
        & "'" & Format(fi01datacad, "yyyy-mm-dd") & "' , " _
        & "" & TempVars!varIdUsuario & ")"
        
        cn.Execute sSQL
                
        cn.Close
        
        'carrega o id do registro
        Call fnConn
        sSQL = ("select fi01idbanco from fi01bancos WHERE fi01nrbanco= '" & Me.fi01nrbanco & "'")
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly
        
                Me.fi01idbanco = rs("fi01idbanco")
                
        rs.Close    'Encerra a conexão com o recordeset
        cn.Close    'Encerra a conexão com a base de dados

    End Sub



    Atualizar registro

    Código:


    Public Function UpdRegistro()
        
        Call fnConn
        
        sSQL = "UPDATE fi01bancos SET" _
        & " fi01nrbanco = '" & fi01nrbanco & "' , " _
        & " fi01descr = '" & fi01descr & "' , " _
        & " fi01ativo = '" & fi01ativo & "' , " _
        & " fi01idusuariocad = " & TempVars!varIdUsuario & " ," _
        & " fi01dataalt = '" & Format(Now, "yyyy-mm-dd hh:mm:ss") & "' " _
        & " WHERE fi01idbanco = " & fi01idbanco & ""

        cn.Execute sSQL
        cn.Close

    End Function



    Excluir registro
    Código:


    Public Sub ExcluiRegistro()

        'Verifica se o registro esta em uso em outra tabela
        Dim nregistros As Integer
        
        Call fnConn

        sSQL = "SELECT cr01idbanco FROM cr01credores WHERE cr01idbanco = " & Me.fi01idbanco & ""
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly

            nregistros = rs.RecordCount

            If nregistros > 0 Then
            MsgBox "Não é possível excluir o registro pois ele está vinculado a outro(s) registro(s)."
            Me.fi01descr.SetFocus
            Exit Sub
            End If

        rs.Close    'Encerra a conexão com o recordeset
        cn.Close    'Encerra a conexão com a base de dados

        
        ' excluir registros
        Dim Resp
        Resp = MsgBox("Deseja excluir " & Me.fi01nrbanco & "?", vbQuestion + vbYesNo)

        If Resp = 6 Then
        
            Call fnConn
        
            sSQL = ("DELETE FROM fi01bancos where fi01idbanco=" & fi01idbanco)
            cn.Execute sSQL
        
            cn.Close
                
            acaobotao = "EXCLUIU"
        
            
            Call AddAuditoria
            Call carregalista
            Call LimpaCampos
            Call carregaFiltro
            
            acaobotao = Empty
            nregistros = Empty
            Resp = Empty
            
            MsgBox "Exclusão realiza com sucesso.", vbInformation
        
        End If

    End Sub

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  Alexandre Fim 15/9/2021, 18:25

    Giovanni,

    Quando houver mais de 1 instrução e um rotina, não há necessidade de fechar a conexão e depois reabrí-la:


    Private Sub lista_Click()
       On Error Resume Next
       
       'carrega os dados do formulário
       Call fnConn

       sSQL = ("select * from fi01bancos WHERE fi01idbanco=" & Me.Lista.Column(0))
       rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly

               Me.fi01idbanco = rs("fi01idbanco")
               Me.fi01nrbanco = rs("fi01nrbanco")
               Me.fi01descr = rs("fi01descr")
               Me.fi01ativo = rs("fi01ativo")
               Me.fi01datacad = rs("fi01datacad")
               Me.fi01idusuariocad = rs("fi01idusuariocad")
               Me.fi01dataalt = rs("fi01dataalt")

       rs.Close    'Encerra a conexão com o recordeset
       Set rs = Nothig  '--> Também deve limpar o recordset da memória

       cn.Close  '-- Aqui não precisa fechar  


       'carrega os dados do usuario que editou
       Call fnConn '-- Também não precisa reabrí-la
       sSQL = ("select * from sy05usuarios WHERE sy05idusuario=" & Me.fi01idusuariocad)
       rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly
       
               Me.fi01idusuariocad = rs("sy05usuario")
               
       rs.Close    'Encerra a conexão com o recordeset
       cn.Close    'Encerra a conexão com a base de dados
       
    End Sub


    Observe os detalhes em AZUL.

    OBS: Se vc utilizar o mesmo recordset para instruções distintias, AI SIM, vc deve fechar o recordset e limpar da memória após cada instrução.


    É isso.


    Boa sorte e sucesso !!!
    avatar
    gtpsp
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 32
    Registrado : 01/11/2013

    [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo Empty Re: [Resolvido]Excluir mais de um registro conforme critério com sql (ADO / mysql) - CRUD Completo

    Mensagem  gtpsp 15/9/2021, 18:52

    Obrigado por mais essa dica!!

    O Código ficou assim..


    Código:


    Private Sub lista_Click()
        On Error Resume Next
       
        'carrega os dados do formulário
        Call fnConn

        sSQL = ("select * from fi01bancos WHERE fi01idbanco=" & Me.Lista.Column(0))
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly

                Me.fi01idbanco = rs("fi01idbanco")
                Me.fi01nrbanco = rs("fi01nrbanco")
                Me.fi01descr = rs("fi01descr")
                Me.fi01ativo = rs("fi01ativo")
                Me.fi01datacad = rs("fi01datacad")
                Me.fi01idusuariocad = rs("fi01idusuariocad")
                Me.fi01dataalt = rs("fi01dataalt")

        rs.Close        'Encerra a conexão com o recordeset
        Set rs = Nothing 'limpa o recordset da memória

        'carrega os dados do usuario que editou
        sSQL = ("select * from sy05usuarios WHERE sy05idusuario=" & Me.fi01idusuariocad)
        rs.Open sSQL, cn, adOpenKeyset, adLockReadOnly
       
                Me.fi01idusuariocad = rs("sy05usuario")
               
        rs.Close        'Encerra a conexão com o recordeset
        Set rs = Nothing 'limpa o recordset da memória
        cn.Close        'Encerra a conexão com a base de dados
       
    End Sub



    Valeu!!

      Data/hora atual: 26/9/2021, 13:01