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

2 participantes

    Atualização de dados baseada em consultas.

    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Atualização de dados baseada em consultas.

    Mensagem  srv4ever 17/3/2016, 19:07

    Boa tarde, amigos.
    Tenho quebrado a cabeça ultimamente, vamos ao cenário:

    1) Tenho um ERP, e utilizo alguns dados, via ODBC para fazer um sistema de Análise de crédito.

    2) Calculamos um limite de crédito baseado no que o cliente gastou no último ano.
    (Se foi gasto até R$ 3.000,00, então 30% desse valor gasto é o limite, se foi entre R$ 3.000,00 e R$ 10.000,00, então seu limite é de 25% do valor gasto e finalmente se foi acima de R$ 10.000,00, apenas do que foi gasto é o limite de crédito.

    3) Os valores das vendas eu consigo pela tabela tbo_Tb.NotaFiscal, como também o ID do cliente.


    Objetivo: Atualizar os limites de crédito de cada cliente fazendo essa consulta e cálculo e atualizar a tabela de limites.


    Alguém consegue me dar uma luz? Estou mais perdido do que cego em tiroteio!!!



    Agradeço desde já!


    Wilian
    studioaccess
    studioaccess
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 19/03/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  studioaccess 19/3/2016, 16:19

    Wilian

    Utilize a função DSum para obter o valor gasto na tabela tbo_Tb.NotaFiscal
    Depois atualize o valor na tabela de limites utilizando o método Docmd.RUNSQL

    Exemplo:

    Código:


    Dim dblValorGasto
    Dim lngIDCliente as long
    Dim dblLimite as long

    dblValorGasto= DSum("[CampoValorGasto]","[tbo_Tb.NotaFiscal]","[IDCliente]=" & lngIDCliente )
    dblLimite = Calculo_do_limite_baseado_no_valor_gasto(dblValorGasto)

    Docmd.runsql = "UPDATE tbl_Limites SET tbl_Limites.Limite = " & dblLimite  & " WHERE (((tbl_Limites.IdCliente)=" & lngIDCliente  &"));"


    Qualquer dúvida estou à disposição
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 21/3/2016, 20:28

    Boa tarde, amigo.
    Em primeiro lugar, muito obrigado por ajudar!

    Desculpe a demora para responder!
    Fiquei tentando achar soluções, e não consegui, recebo erro de sintaxe com todas as formas que tentei.

    Dim dblValorGasto
    Dim lngIDCliente as long
    Dim dblLimite as long

    dblValorGasto= DSum("[NFValorTotal]","[tbo_TbNotaFiscal]","[CliId]=" & CliId )
    IF ([dblValorGasto] <=3000; dblLimite = ([dblValorGasto] *0,30); [dblValorGasto] >3000 AND [dblValorGasto]<=10000; dblLimite = ([dblValorGasto]*0,25); dblLimite = ([dblValorGasto]*0,2))
    Docmd.runsql = "UPDATE tbl_Limites SET tbl_Limites.Limite = " & dblLimite & " WHERE (((tbl_Limites.CliId)=" & CliId &"));"


    Consegue me dar uma ajuda?


    Agradeço novamente.


    Wilian
    studioaccess
    studioaccess
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 19/03/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  studioaccess 22/3/2016, 02:53

    Wilian

    O problema estava no IF, coloquei ele em uma função para facilitar a leitura do código. Ficou assim

    Código:

    Private Function CalculoLimite(dblValorGasto As Double)

    If dblValorGasto <= 3000 Then
        CalculoLimite = dblValorGasto * 0.3
    ElseIf [dblValorGasto] > 3000 And [dblValorGasto] <= 10000 Then
        CalculoLimite = dblValorGasto * 0.25
    Else
        CalculoLimite = dblValorGasto * 0.2
    End If

    End Function

    Para obter o limite do cliente criei a função LimiteCliente que recebe como parâmetro o ID do Cliente

    Código:

    Public Function LimiteCliente(CliId) As Double

    Dim dblValorGasto As Double
    Dim dblLimite As Double

    'Sai da rotina caso nenhum ID de cliente não tenha sido informado
    If IsNull(CliId) Then Exit Function

    dblValorGasto = DSum("[NFValorTotal]", "[tbo_TbNotaFiscal]", "[CliId]=" & CliId)
    dblLimite = CalculoLimite(dblValorGasto)
    LimiteCliente = dblLimite

    End Function

    Também separei do código a rotina que armazena o limite do cliente
    Não sei se você precisará armazenar o valor em uma tabela, porque a qualquer momento você pode consultar o valor através da função LimiteCliente

    Código:

    Sub ArmazenarLimite(CliId)

    DoCmd.SetWarnings False 'Desabilita as mensagens de confirmação
    DoCmd.RunSQL "UPDATE tbl_Limites SET tbl_Limites.Limite = " & LimiteCliente(CliId) & " WHERE (((tbl_Limites.CliId)=" & CliId & "));"
    DoCmd.SetWarnings True 'Reabilita as mensagens de confirmação

    End Sub


    Abaixo, link do arquivo com estas alterações

    https://onedrive.live.com/redir?resid=1776224187DC50DF!108&authkey=!ADAYNTq0qf6z2Z4&ithint=file%2caccdb
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 22/3/2016, 18:26

    Poxa vida, amigo!
    Realmente obrigado!!
    Você realmente deu uma ótima luz, e também me mostrou que eu preciso estudar muito!!!
    Mas no caso, a intenção é atualizar todos os clientes automaticamente e de uma vez só, sem precisar informar o CliId, até porque tem mais de 5000 clientes.

    Você sabe se existe alguma forma de fazer essa atualização automaticamente?

    Agradeço novamente!!!
    studioaccess
    studioaccess
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 19/03/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  studioaccess 22/3/2016, 19:01

    Wilian

    Para atualizar todos os limites você pode utilizar a instrução SQL abaixo dentro de uma consulta ou executar através de código utilizando o método DoCmd.RunSQL

    Código:

    DoCmd.RunSQL "UPDATE tbl_Limites SET tbl_Limites.Limite = LimiteCliente([tbl_Limites]![CliId]);"

    Atualização de dados baseada em consultas. W9egwz

    Ivan
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 23/3/2016, 12:11

    Perfeito, amigo!
    Como essa parte do BD vem de um ERP com tabelas vinculadas, vou conseguir testar apenas mais tarde, porém, assim que possível, posto o resultado.
    Obrigado mesmo!!!
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 23/3/2016, 12:46

    Amigo.
    Consegui fazer alguns testes.
    Aquela função para obter o limite é dependente de informar o CliId.
    Existe alguma forma de obter todos os limites automaticamente, para depois utilizar aquele método para atualizar todos automaticamente também?
    Realmente, desculpe o abuso, sei que preciso estudar MUITO!!!

    Muito obrigado pela ajuda, de verdade!
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 30/3/2016, 15:04

    Consegui fazer uma consulta que me traz o limite de cada cliente, mas me restou uma dúvida, como eu insiro os valores da consulta na tabela?
    Olhando as imagens, quero colocar os valores da coluna LIMITES da consulta na coluna CliValorLimiteCredito da tabela.
    Cada CliId com o seu devido limite.

    Consulta:
    Atualização de dados baseada em consultas. 349e9t3

    Tabela:
    Atualização de dados baseada em consultas. 2iaa0if


    Novamente agradeço pela ajuda!


    Wilian.
    studioaccess
    studioaccess
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11
    Registrado : 19/03/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  studioaccess 31/3/2016, 01:12

    Wilian

    Utilize esta consulta

    Atualização de dados baseada em consultas. Oavx3r

    ou o código abaixo

    Código:

    Docmd.RunSQL "UPDATE dbo_TbClientes SET dbo_TbClientes.CliValorLimiteCredito = LimiteCliente([dbo_TbClientes]![CliId]);"
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 31/3/2016, 13:38

    Obrigado amigo.
    Mas nesse caso ele vai armazenar na tabela o valor retornado daquela função que vc fez, certo?
    Só que aquela função funciona apenas se vc digitar o ID o cliente, eu não consegui fazer aquela função retornar todos os limites de todos os CliId de uma vez.

    O máximo que consegui foi criar uma consulta que soma tudo e me mostra, como na imagem que coloquei.
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 6/4/2016, 14:56

    Estou obtendo erro nesse comando.
    Já tentei deixar tudo em uma linha só, tirando o "& _" mas não resolveu.


    DoCmd.RunSQL "SELECT dbo_TbDocumento.CliId, dbo_TbCliente.CliNomeRazaoSocial, dbo_TbTitulo.TitStatus, Sum(dbo_TbTitulo.TitValor) AS SomaDeTitValor, IIf([SomaDeTitValor]<=3000,[SomaDeTitValor]*0.3,IIf(([SomaDeTitValor]>3000 And [SomaDeTitValor]<=10000),[SomaDeTitValor]*0.25,[SomaDeTitValor]*0.2)) AS LIMITE" & _
    "FROM (dbo_TbDocumento LEFT JOIN dbo_TbTitulo ON dbo_TbDocumento.DocId = dbo_TbTitulo.DocId) INNER JOIN dbo_TbCliente ON dbo_TbDocumento.CliId = dbo_TbCliente.CliId" & _
    "WHERE (((dbo_TbDocumento.DocDataHoraIncl) < Now() And (dbo_TbDocumento.DocDataHoraIncl) >= (Now() - 365)))" & _
    "GROUP BY dbo_TbDocumento.CliId, dbo_TbCliente.CliNomeRazaoSocial, dbo_TbTitulo.TitStatus" & _
    "HAVING ((dbo_TbTitulo.TitStatus)="L");"



    Está dando sintaxe incorreta, mas não tenho idéia de onde.
    Estou colocando isso numa função para retornar o valor de LIMITE de todos os clientes, na consulta comum funciona normalmente, mas na hora de usar na função dá erro de sintaxe.
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 26/4/2016, 19:00

    up
    avatar
    srv4ever
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 20/01/2016

    Atualização de dados baseada em consultas. Empty Re: Atualização de dados baseada em consultas.

    Mensagem  srv4ever 4/5/2016, 15:52

    up

      Data/hora atual: 21/1/2022, 05:06