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


    [Resolvido]Select Case utilizando campos de uma tabela

    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Select Case utilizando campos de uma tabela Empty [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  alantaru em 23/7/2019, 17:27

    Boa tarde! Preciso da ajuda de vocês em uma questão:

    Estou criando um sistema de controle de estoque para toners de impressoras. Acontece que o mesmo modelo de toner pode servir para até 5 impressoras.
    Eu cheguei a criar um select case que juntava vários toners para um mesmo modelo de impressora, porém toda vez que fosse incluído um novo modelo, eu teria que modificar o código manualmente.

    Segue o código do select case:
    Código:
               Select Case Modelo
                    Case "SLM4020", "SS SL-M4070FR"
                        Modelo = "SLM4020 / SS SL-M4070FR"
                    Case "X4220RX", "X4300LX"
                        Modelo = "X4220RX / X4300LX"
                    Case "K4250RX", "K4350LX"
                        Modelo = "K4250RX / K4350LX / K4300LX"
                    Case "MP161SPF", "MP171SPF", "MP201SPF"
                        Modelo = "MP161SPF / MP171SPF"
                    Case "SS ML-5515ND", "SS ML-5510ND"
                        Modelo = "SS ML-5515ND / ML-5510ND"
                    Case "ML 4510ND", "SS ML-5010ND"
                        Modelo = "SS ML-5010ND"
                    Case "SS C4010ND", "C4062FX"
                        Modelo = "SS C4010ND / C4062FX"
                    Case Else
                        Modelo = Me!txtModelo
                End Select

    Então criei uma tabela chamada tabTonerCorrespondencia. Nessa tabela o usuário insere o código do toner e até 5 modelos compatíveis com este toner.

    Segue os campos da tabela:

    RefTonerCorrespCodigoTonerNomeConjuntoModelo1Modelo2Modelo3Modelo4Modelo5
    8
    203USLM4020 / SS SL-M4070FRSLM4020SS SL-M4070FR   
    9
    309ESS ML-5515ND / ML-5510NDSS ML-5515NDSS ML-5510ND   
    10
    708LK4250RX / K4350LX / K4300LXK4250RXK4350LXK4300LX  
    11
    603LSS C4010ND / C4062FXSS C4010NDC4062FX   
    12
    808SX4220RX / X4300LXX4220RXX4300LX   
    13
    MP161SPF / MP171SPF / MP201SPFMP161SPF / MP171SPF / MP201SPFMP161SPFMP171SPFMP201SPF  
    Desde já obrigado!
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às Regras 100%

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

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  Alexandre Fim em 23/7/2019, 18:50

    Olá Isaac,

    Sugestão:
    - criar tabela auxiliar para relacionar o toner com as impressoras, conforme abaixo:

    [Resolvido]Select Case utilizando campos de uma tabela Toner10


    Faça sua consulta pelo código do toner, e ai o sistema ira retornar todas as impressoras que utilizam ele.

    Espero ter ajudado.

    abraço


    .................................................................................
    "Aprender é a única coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende." (Leonardo da Vinci)
    "O impossível existe até que alguém duvide dele e prove o contrário." (Albert Einstein)
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  alantaru em 24/7/2019, 11:37

    Obrigado pela sugestão!

    O fato é que como já tenho os formulários prontos para adicionar os modelos para cada toner. Eu até cheguei a fazer uma consulta dentro do select case, mas não está funcionando, veja como eu fiz:


    Código:
        Dim strSQL As String
        Dim rs As DAO.Recordset
        
        strSQL = "SELECT * FROM tabTonerCorrespondencia"
        Set rs = CurrentDb.OpenRecordset(strSQL)

      Select Case Modelo  
         If Not rs.BOF And Not rs.EOF Then
             rs.MoveFirst
             While (Not rs.EOF)
                 Case rs.Modelo1, rs.Modelo2, rs.Modelo3, rs.Modelo4, rs.Modelo5
                 Modelo = rs.NomeConjunto
                 rs.MoveNext
             Wend
         End If
                    Case Else
                        Modelo = Me!txtModelo
     End Select
        
        rs.Close
        Set rs = Nothing
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  alantaru em 25/7/2019, 11:29

    Existe alguma forma de incluir essa consulta linha por linha dentro do select case como no código acima?
    Estou tentando mas dá erro.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7433
    Registrado : 05/11/2009

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  Alexandre Neves em 25/7/2019, 15:33

    Boa tarde
    Disponibilize bd com dados essenciais


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  alantaru em 8/8/2019, 15:26

    Estou relendo meu post original e percebi que expliquei mal o meu problema.

    Vamos lá:
    Como eu disse, estou criando um sistema de controle de estoque para toners de impressoras.
    Esse sistema permite que o usuário gere pedidos de entrega de toners e, ao dar baixa, diminua automaticamente a quantidade do toner correto do estoque.
    O que eu preciso é que o sistema dê baixa no toner corretamente, de forma automática. Acontece que o mesmo tipo de toner pode servir para até 5 modelos de impressoras, aí começa o problema.
    No meu caso tenho um formulário chamado frmDarBaixa. Neste formulário, quando o usuário clica em "Salvar e Fechar", o sistema verifica qual toner deve ter seu número de estoque diminuído e realiza o processo de diminuir o estoque. Atualmente eu utilizo um Select Case que junta vários toners para um mesmo modelo de impressora, porém toda vez que for incluído um novo modelo, eu tenho que modificar o código manualmente (isso que quero evitar).


    O código de Baixa do Estoque é este abaixo:

    Código:
    Sub BaixaEstoque()

            Dim bdEstoque As DAO.Database
            Dim varTabEstoque As DAO.Recordset
            
            Set bdEstoque = CurrentDb()
            Set varTabEstoque = bdEstoque.OpenRecordset("tabEstoque", dbOpenDynaset)
            
            Dim ValorTonerPreto As Integer
            ValorTonerPreto = CInt(IIf(IsNull(Me.txtTonerPreto.Value), 0, Me.txtTonerPreto.Value))
            Dim ValorA4 As Integer
            ValorA4 = CInt(IIf(IsNull(Me.txtA4.Value), 0, Me.txtA4.Value))
            Dim ValorA3 As Integer
            ValorA3 = CInt(IIf(IsNull(Me.txtA3.Value), 0, Me.txtA3.Value))
            Dim Modelo As String
            Modelo = Me!txtModelo
            Dim strSQLA4 As String
            Dim strSQLA3 As String
            Dim strSQLTonerEOutros As String
            Dim strSQLTonerCiano As String
            Dim strSQLTonerAmarelo As String
            Dim strSQLTonerMagenta As String
                      
                Select Case Modelo
                    Case "SLM4020", "SS SL-M4070FR"
                        Modelo = "SLM4020 / SS SL-M4070FR"
                    Case "X4220RX", "X4300LX"
                        Modelo = "X4220RX / X4300LX"
                    Case "K4250RX", "K4350LX"
                        Modelo = "K4250RX / K4350LX / K4300LX"
                    Case "MP161SPF", "MP171SPF", "MP201SPF"
                        Modelo = "MP161SPF / MP171SPF"
                    Case "SS ML-5515ND", "SS ML-5510ND"
                        Modelo = "SS ML-5515ND / ML-5510ND"
                    Case "ML 4510ND", "SS ML-5010ND"
                        Modelo = "SS ML-5010ND"
                    Case "SS C4010ND", "C4062FX"
                        Modelo = "SS C4010ND / C4062FX"
                    Case Else
                        Modelo = Me!txtModelo
                End Select
            
            
    '----------------------------------------------------------------------
    '-------------------------------PAPEL A4-------------------------------
    '----------------------------------------------------------------------
            strSQLA4 = "UPDATE tabEstoque set EstoqueAtual = EstoqueAtual - " & ValorA4 & " where TipoModelo ='A4 (RESMAS)'"
            CurrentDb.Execute strSQLA4
    '----------------------------------------------------------------------
    '-------------------------------PAPEL A3-------------------------------
    '----------------------------------------------------------------------
            strSQLA3 = "UPDATE tabEstoque set EstoqueAtual = EstoqueAtual - " & ValorA3 & " where TipoModelo ='A3 (RESMAS)'"
            CurrentDb.Execute strSQLA3
    '----------------------------------------------------------------------
    '----------------------------TONER E OUTROS----------------------------
    '----------------------------------------------------------------------

            'Verificando se a série do equipamento existe ou não na planilha tabRota.
            If Not DCount("*", "tabEstoque", "[TipoModelo] = '" & Modelo & "'") = 0 Then
                'Série existe na planilha da Rota. Registro atual será atualizado normalmente.
                
                strSQLTonerEOutros = "UPDATE tabEstoque set EstoqueAtual = EstoqueAtual - " & ValorTonerPreto & " where TipoModelo ='" & Modelo & "'"
                CurrentDb.Execute strSQLTonerEOutros
                
                MsgBox "Baixa realizada com sucesso.", vbExclamation, "Sucesso"
                DoCmd.Close acForm, "frmDarBaixa"
            Else
                'Série não existe na planilha da Rota. Será criado novo registro e acrescentadas as informações do formulário.
                MsgBox "Não existem dados para o Modelo selecionado. Abrindo Formulário para Registro de novo Modelo e seu respectivo estoque atualizado.", vbExclamation, "Erro"
                DoCmd.OpenForm "frmEstoqueAtualizacao", acNormal, "", "", acFormAdd
                Forms![frmEstoqueAtualizacao]![txtCodigo].Enabled = True
                Forms![frmEstoqueAtualizacao]![txtUltimaAlteracao].Enabled = True
                Forms![frmEstoqueAtualizacao]![txtTipoModelo].Enabled = True
                Forms![frmEstoqueAtualizacao]![txtCor].Enabled = True
                Forms![frmEstoqueAtualizacao]![txtEmpresa].Enabled = True
            
                Forms![frmEstoqueAtualizacao]![txtCodigo].Locked = False
                Forms![frmEstoqueAtualizacao]![txtUltimaAlteracao].Locked = False
                Forms![frmEstoqueAtualizacao]![txtTipoModelo].Locked = False
                Forms![frmEstoqueAtualizacao]![txtCor].Locked = False
                Forms![frmEstoqueAtualizacao]![txtEmpresa].Locked = False
                
                Forms![frmEstoqueAtualizacao]![txtCodigo] = " "
                Forms![frmEstoqueAtualizacao]![txtUltimaAlteracao] = Date
                Forms![frmEstoqueAtualizacao]![txtTipoModelo] = Me!txtModelo
                Forms![frmEstoqueAtualizacao]![txtCor] = Me!txtTipo
                Forms![frmEstoqueAtualizacao]![txtEmpresa] = Me!txtEmpresa
            End If
            
            Set bdEstoque = Nothing
            Set varTabEstoque = Nothing
    End Sub


    O que eu comecei a criar foi um outro formulário chamado frmTonerCorrespondencia que permitiria ao usuário alterar manualmente (sem a necessidade de mexer no código) todas as relações entre toner e Modelo de impressora. Tudo que é alterado neste formulário fica gravado na tabela tabTonerCorrespondencia.

    Para finalizar, o que eu preciso é que aquele select Case (ou outro código que possa ser usado aqui) possa resgatar o conteúdo dessa tabela e assim, a baixa do toner possa ser realizada normalmente. Isso é que não estou conseguindo fazer.

    Segue o link para meu sistema
    (senha: 2393)
    sistema.zip

    Obrigado!
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7433
    Registrado : 05/11/2009

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  Alexandre Neves em 8/8/2019, 23:54

    Boa noite,

    Não consegui testar mas criei função
    Código:
    Function CodigoToner(strModelo As String) As String
        '--------------------------------------------------------------'
        '   código criado por Alexandre Neves, do Fórum MaximoAccess   '
        '     utilize o código livremente mas mantenha os créditos     '
        '--------------------------------------------------------------'
        Dim Rst As DAO.Recordset, I As Byte
        Set Rst = CurrentDb.OpenRecordset("SELECT * FROM tabTonerCorrespondencia")
        Do Until Rst.EOF
            For i = 1 To 5
                If Rst("Modelo" & i) = strModelo Then CodigoToner = Rst("CodigoToner"): Exit Function
            Next
            Rst.MoveNext
        Loop
    End Function

    chame-a em vez de ter o select case


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    alantaru
    alantaru
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 56
    Registrado : 04/10/2018

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  alantaru em 9/8/2019, 17:04

    Funcionou perfeitamente!
    Muito obrigado!

    Conteúdo patrocinado

    [Resolvido]Select Case utilizando campos de uma tabela Empty Re: [Resolvido]Select Case utilizando campos de uma tabela

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 16/12/2019, 00:34