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


    [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario

    avatar
    kaiuviny
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 14/09/2015

    [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario Empty [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario

    Mensagem  kaiuviny 27/10/2015, 17:23

    Pessoal, estou com uma dúvida tremendo, to ficando até desesperado, sou novo em programar em Access com VBA,

    Eu tenho uma tabela chamado "Tab_Cadastro", que é cadastrado manualmente, com 7 campos: "cod_produto", "descricao", "material", "cor", "acabamento", "cod_cli", "nome_cli",

    Outra tabela "Tab_Carteira", com 20 outros campos que já possui mais de 3 mil dados cadastrados, que também possui um campo "cod_produto".


    Estou tentando fazer que ao Cadastrar um número em um comboBox (caixa de seleção) chamado "cod_produto" da tabela "Tab_Cadastro",

    Eu pegasse e filtrasse, por esse número do "cod_produto" e percorra Linha por Linha dessa outra tabela "Tab_Carteira" , e quando encontrasse o mesmo número, ele trouxesse para a primeria tabela "Tab_Cadastro" os dados dessa linha de alguns campos para os meus 7 campos.

    Porque assim, no meu Formulário "Form_Gestao_Vendas" ao selecionar um número no ComboBox "cod_produto" da tabela "Tab_Cadastro" , ele jogue os dados da "Tab_Carteira" nos outros 6 campos no formulários, e possa assim cadastrar, filtrando apenas pelo "cod_produto"

    Tentei por comando SQL, e por Dlookup, mas não obtive sucesso em nada.. estou com muita dificuldade.

    Se algume puder me ajudar com qualquer coisa, Agradeço Muito...
    avatar
    kaiuviny
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 14/09/2015

    [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario Empty Re: [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario

    Mensagem  kaiuviny 6/11/2015, 10:17

    Pessoal graças a Deus eu consegui,cheers

    Porém não foi do melhor método possível, mas funciona e descartei todas as possibilidades de dar erro, com meus poucos conhecimentos.

    Segue abaixo o código do botão Inserir e e excluir


    botão Excluir

    Código:

    Private Sub btnExlcuirRegistro_Click()
    Dim Sql As String
    Dim rs As Recordset
    Dim verifica As Integer

    'setar o CurrentDb
    Call Conecta

    'Let Sql = "INSERT INTO Tab_Usuario " & _
                            "( usuario, grupo, tela, email, descricao, data_hora, acao) " & _
                            "VALUES " & _
                            "('" & Me.usuario.value & "', '" & Me.grupo.value & "', '" & "Cadastro de Produto" & "', '" & "usuario@vmetais.com.br" & "', '" & rs("MATERIAL PA") & "', '" & Me.data_hora.value & "', '" & "Excluido Dados" & "')"
     'Banco.Execute Sql

    If Me.cod_produto.value = 0 Or Me.cod_produto.value = "" Or Me.cod_descricao.value = "" Then
      MsgBox ("Você não selecionou nenhum registro para excluir!"), vbCritical, "Erro"
        DoCmd.CancelEvent
        Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
        CurrentDb.Execute Sql
        MsgBox ("O Registro foi Excluido com Sucesso!"), vbInformation, "Exclusão"
        AllowAdditions = True
        Me.Requery
        DoCmd.GoToRecord , , acLast
        'DoCmd.GoToRecord , , acNext
        Me.cod_produto.SetFocus
       
    Else
        If IsNull(Me.cod_produto) Or Me.cod_produto.value = "" Or Me.cod_produto = 0 Then
            MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
            DoCmd.CancelEvent
            Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            CurrentDb.Execute Sql
            MsgBox ("O Registro foi Excluido!"), vbInformation, "Exclusão"
            Me.Requery
            DoCmd.GoToRecord , , acLast
            DoCmd.GoToRecord , , acNext
            Me.cod_produto.SetFocus
        ElseIf IsNull(DLookup("[MATERIAL PA]", "Tab_Carteira", "[MATERIAL PA] = " & Me!cod_produto)) Then
            MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
            DoCmd.CancelEvent
            Me.Requery
            DoCmd.GoToRecord , , acLast
            Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            CurrentDb.Execute Sql
            MsgBox ("O Registro Excluido!"), vbInformation, "Exclusão"
            AllowAdditions = True
            AllowEdits = False
            Me.Requery
           
            'Se for o primeiro registro
            Sql = "SELECT * FROM Tab_Cadastro_Produto_Beneficiamento"
            Set rs = Banco.OpenRecordset(Sql)
            If rs.BOF = True Then
                DoCmd.GoToRecord , , acLast
            Else
                DoCmd.GoToRecord , , acNext
            End If
            Me.cod_produto.SetFocus
        ElseIf MsgBox("Voçê tem certeza que quer excluir este registro ? ", vbYesNo) = vbYes Then
                        '--------------Excluindo  Registro do Gestao de Vendas
                        Let Sql = "SELECT * From Tab_GV WHERE cod_produto = " & Me.cod_produto
                        Set rs = Banco.OpenRecordset(Sql)
                        'primeira linha
                        rs.MoveFirst
               
                        'Faça enquanto o record set percorrer todas as linhas
                        Do While rs.EOF = False
                            Let Sql = "DELETE * FROM Tab_GV WHERE cod_produto = " & Me.cod_produto
                            Banco.Execute Sql
                            rs.MoveNext
                        Loop
       
                        'Excluindo o dado da tabela cadastro
                        Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
                        CurrentDb.Execute Sql
                        MsgBox ("O Registro foi Excluido com Sucesso!"), vbInformation, "Exclusão"
                        Me.Requery
       
                        Let Sql = "SELECT * FROM Tab_Cadastro_Produto_Beneficiamento"
                        Set rs = Banco.OpenRecordset(Sql)
       
                        ' se for o primeiro registro, apenas coloca o set.focus, senão vai para o último registro.
                        If rs.BOF = True Then
                            Me.cod_produto.SetFocus
                        Else
                            AllowAdditions = True
                            Me.Requery
                            DoCmd.GoToRecord , , acLast
                            DoCmd.GoToRecord , , acNext
                            Me.cod_produto.SetFocus
                        End If
            End If
       
    End If

    End Sub




    Botão de inserir

    Código:



    Private Sub btnInserir_Click()
    Dim rs As Recordset
    Dim Sql As String
    Dim verificador As Integer
    Dim existe As Integer

    'setar o CurrentDb
        Call Conecta
       
       
     'Adicionar dados para a tabela usuário para que tenha registro de quem fez
      'Let Sql = "INSERT INTO Tab_Usuario " & _
                            "( usuario, grupo, tela, email, descricao, data_hora, acao) " & _
                            "VALUES " & _
                            "('" & Me.usuario.value & "', '" & Me.grupo.value & "', '" & "Cadastro de Produto" & "', '" & "usuario@vmetais.com.br" & "', '" & rs("MATERIAL PA") & "', '" & Me.data_hora.value & "', '" & Me.acao.value & "')"
     'Banco.Execute Sql
       
       
    'Verifica se é o primeiro registro
    Sql = "SELECT * FROM Tab_Cadastro_Produto_Beneficiamento"
    Set rs = Banco.OpenRecordset(Sql)
    If rs.BOF = True Then

    ' Se campo cod produto esteja vazio
        If IsNull(Me.cod_produto) Or Me.cod_produto.value = "" Or Me.cod_produto = 0 Then
            MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
            Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            CurrentDb.Execute Sql
            AllowAdditions = False
            AllowEdits = True
            Me.Requery
            DoCmd.GoToRecord , , acLast
            Me.cod_produto = Empty
            Me.cod_descricao = Empty
            Me.cod_produto.SetFocus
       

       
        ElseIf IsNull(DLookup("[MATERIAL PA]", "Tab_Carteira", "[MATERIAL PA] = " & Me!cod_produto)) Then
            MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
            Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            CurrentDb.Execute Sql
            AllowAdditions = False
            AllowEdits = True
            Me.Requery
            DoCmd.GoToRecord , , acLast
            Me.cod_produto = Empty
            Me.cod_descricao = Empty
            Me.cod_produto.SetFocus
           
           
       
        'ElseIf IsNull(Me.cod_descricao) Or Me.cod_descricao.value = "" Then
        'MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
        'Me.cod_produto.SetFocus
        'AllowAdditions = False
        'AllowEdits = True
        'ElseIf IsNull(DLookup("[MATERIAL PA]", "Tab_Carteira", "[DESCRICAO PA] = " & Me!cod_descricao)) Then
        'MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
        'Me.cod_produto.SetFocus

        Else
        AllowAdditions = True
        AllowEdits = False
            'MsgBox ("Primeiro Registro"), vbInformation, "Primeiro Registro"
            Let Sql = "SELECT [ORDEM VENDAS], [ITEM ORDEM VENDAS], [CLIENTE], [DESCRICAO CLIENTE], [MATERIAL PA], [DESCRICAO PA], [DT OV], [DATA PROMETIDA], [NUMERO PEDIDO] FROM Tab_Carteira WHERE [MATERIAL PA] = " & Me.cod_produto
            'setar o sql
            Set rs = Banco.OpenRecordset(Sql)
                    'primeira linha
                    rs.MoveFirst
                    Do While rs.EOF = False
                        'Let existe = rs(4)
                        'If Me.cod_produto = existe Then
                            Let Sql = "INSERT INTO Tab_GV " & _
                            "(ov, item, cod_cliente, descricao_cliente, cod_produto, descricao_produto, data_entrada_ov, data_sugerida, num_pedido, status_do_registro) " & _
                            "VALUES " & _
                            "('" & rs("ORDEM VENDAS") & "', '" & rs("ITEM ORDEM VENDAS") & "', '" & rs("CLIENTE") & "', '" & rs("DESCRICAO CLIENTE") & "', '" & rs("MATERIAL PA") & "', '" & rs("DESCRICAO PA") & "', '" & rs("DT OV") & "', '" & rs("DATA PROMETIDA") & "', '" & rs("NUMERO PEDIDO") & "', '" & "G" & "')"
                            Banco.Execute Sql
                            rs.MoveNext
                        'Else
                          '  Let existe = 1
                        'End If
                    Loop
                    'If existe = 1 Then
                    '        MsgBox (" Item não encontrado na Carteira, por favor digite outro"), vbCritical, "Item inexistente"
                    '        Me.cod_produto.SetFocus
                    'End If
                    Me.acao = "Inseridos Dados"
                    MsgBox ("Dados inseridos com Sucesso!"), vbInformation + vbOKOnly, "Inserir"
                        DoCmd.GoToRecord , , acLast
                        DoCmd.GoToRecord , , acNext
                        Me.cod_produto.SetFocus
        End If
       
    ' senão tiver nenhum registro, tendo pelo menos 1 executa abaixo.
    Else

    ' Se campo cod produto esteja vazio
        If IsNull(Me.cod_produto) Or Me.cod_produto.value = "" Or Me.cod_produto = 0 Then
            MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
            Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            CurrentDb.Execute Sql
            AllowEdits = True
            AllowAdditions = False
            Me.Requery
            DoCmd.GoToRecord , , acLast
            Me.cod_produto = Empty
            Me.cod_descricao = Empty
            Me.cod_produto.SetFocus
       
     
       
        ElseIf IsNull(DLookup("[MATERIAL PA]", "Tab_Carteira", "[MATERIAL PA] = " & Me!cod_produto)) Then
            MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
            'Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            'CurrentDb.Execute Sql
            Me.Requery
            AllowAdditions = False
            AllowEdits = True
            Me.Requery
            DoCmd.GoToRecord , , acLast
            Me.cod_produto.SetFocus
           
       
        'ElseIf IsNull(Me.cod_descricao) Or Me.cod_descricao.value = "" Then
        'MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
        'Me.cod_produto.SetFocus
        'AllowAdditions = False
        'AllowEdits = True
        'ElseIf IsNull(DLookup("[MATERIAL PA]", "Tab_Carteira", "[DESCRICAO PA] = " & Me!cod_descricao)) Then
        'MsgBox "Registro não encontrado", vbOKOnly + vbCritical, "Atenção"
        'Me.cod_produto.SetFocus
       
       
        Else
        AllowAdditions = True
        AllowEdits = False
        ' Seleciona o campo cod produto da tabela para verificar por toda a tabela se existe algum código já existente
        Let Sql = "SELECT * FROM Tab_Cadastro_Produto_Beneficiamento"
        Set rs = Banco.OpenRecordset(Sql)
        rs.MoveFirst
        Do While rs.EOF = False
            'verifica se escontrar
            If Me.cod_produto = rs(1) Then
                'MsgBox ("Código do Produto Já Cadastrado"), vbInformation + vbOKOnly, "Produto já cadastrado"
                verificador = 1
            End If
            rs.MoveNext
        Loop
       
        ' Se encontrar algum produto já cadastrado.
        If verificador = 1 Then
            MsgBox ("Código do Produto Já Cadastrado"), vbInformation + vbOKOnly, "Produto já cadastrado"
            'Sql = "DELETE * FROM Tab_Cadastro_Produto_Beneficiamento WHERE ID = " & Me.ID
            'CurrentDb.Execute Sql
            'Me.Requery
            DoCmd.GoToRecord , , acLast
            Me.cod_produto.SetFocus
           
            Me.cod_produto = Empty
            Me.cod_descricao = Empty
            If Me.cod_produto = 0 Then
                AllowEdits = True
            Else
                AllowEdits = False
            End If
               
        Else
                AllowEdits = False
                If IsNull(Me.cod_produto) Or Me.cod_produto = 0 Or Me.cod_produto = "" Then
                    'Me.Requery
                    MsgBox (" Por favor preencha o Código de Produto! "), vbInformation + vbOKOnly, "Preencha os Campos"
                    'DoCmd.GoToRecord , , acLast
                    'DoCmd.GoToRecord , , acNext
                    Me.cod_produto.SetFocus
                ElseIf IsNull(Me.cod_descricao) Or Me.cod_descricao = "" Then
                    MsgBox (" Por favor preencha a Descrição de Produto! "), vbInformation + vbOKOnly, "Preencha os Campos"
                    'DoCmd.GoToRecord , , acLast
                    'DoCmd.GoToRecord , , acNext
                    Me.cod_descricao.SetFocus
                Else
               
                    'Seleciona os campos da Tab_carteira
                    Let Sql = "SELECT [ORDEM VENDAS], [ITEM ORDEM VENDAS], [CLIENTE], [DESCRICAO CLIENTE], [MATERIAL PA], [DESCRICAO PA], [DT OV], [DATA PROMETIDA], [NUMERO PEDIDO] FROM Tab_Carteira WHERE [MATERIAL PA] = " & Me.cod_produto
                    'setar o sql
                    Set rs = Banco.OpenRecordset(Sql)
       
                    'primeira linha
                    rs.MoveFirst
                    'On Error GoTo NoRecordSet

                    Do While rs.EOF = False
                        'Let existe = rs(4)
                        'If Me.cod_produto = existe Then
                            Let Sql = "INSERT INTO Tab_GV " & _
                            "(ov, item, cod_cliente, descricao_cliente, cod_produto, descricao_produto, data_entrada_ov, data_sugerida, num_pedido, status_do_registro) " & _
                            "VALUES " & _
                            "('" & rs("ORDEM VENDAS") & "', '" & rs("ITEM ORDEM VENDAS") & "', '" & rs("CLIENTE") & "', '" & rs("DESCRICAO CLIENTE") & "', '" & rs("MATERIAL PA") & "', '" & rs("DESCRICAO PA") & "', '" & rs("DT OV") & "', '" & rs("DATA PROMETIDA") & "', '" & rs("NUMERO PEDIDO") & "', '" & "G" & "')"
                            Banco.Execute Sql
                            rs.MoveNext
                        'Else
                        '    Let existe = 1
                        'End If
                    Loop
                    'If existe = 1 Then
                    '      MsgBox (" Item não encontrado na Carteira, por favor digite outro"), vbCritical, "Item inexistente"
                    '        Me.cod_produto.SetFocus
                    'End If
                    Me.acao = "Inseridos Dados"
                    MsgBox ("Dados inseridos com Sucesso!"), vbInformation + vbOKOnly, "Inserir"
                        AllowAdditions = True
                        AllowEdits = False
                        Me.Requery
                        DoCmd.GoToRecord , , acLast
                        DoCmd.GoToRecord , , acNext
                        Me.cod_produto.SetFocus
                   
                End If
        End If
      End If
    End If

    End Sub


    Se alguém souber de um jeito melhor por favor, pode postar.

    Agradeço muito. Basketball
    avatar
    kaiuviny
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 14/09/2015

    [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario Empty Re: [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario

    Mensagem  kaiuviny 6/11/2015, 10:18

    Ahh já estava esquecendo, foi feito no Access 2010, Windows 7 32bits.

    Conteúdo patrocinado


    [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario Empty Re: [Resolvido]Selecionar Dados de uma tabela por um comboBox de outra tabela no Formulario

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/3/2024, 23:44