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

    [Resolvido]Função SeImed com excesso de condições

    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Função SeImed com excesso de condições

    Mensagem  Walter 31/8/2013, 19:50

    Boa tarde. Estou precisando inserir um campo calculado em uma Consulta, com a função SeImed, porém o Access informa que ela é muito complexa, e não aceita. Quais as alternativas que tenho?

    A função seria essa:

    PtsIdade:SeImed([Idade]>74;SeImed([Sexo]="M";15;12;SeImed([Idade]<75;SeImed([Sexo]="M";14;11;SeImed([Idade]<70;SeImed([Sexo]="M";12;10;SeImed([Idade]<65;SeImed([Sexo]="M";11;9;SeImed([Idade]<60;SeImed([Sexo]="M";10;8;SeImed([Idade]<55;SeImed([Sexo]="M";8;7;SeImed([Idade]<50;SeImed([Sexo]="M";6;5;SeImed([Idade]<45;SeImed([Sexo]="M";5;4;SeImed([Idade]<40;2;SeImed([Idade]<34;0))))))))))))))))))

    Alguém tem alguma sugestão, por favor.

    Obrigado,
    Walter
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Alexandre Neves 31/8/2013, 20:31

    Boa noite,
    Crie uma função


    .................................................................................
    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
    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Walter 31/8/2013, 20:40

    Olá, Alexandre.
    Obrigado, pela atenção.

    Como se cria uma função? Pode me ajudar?

    Walter
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Alexandre Neves 31/8/2013, 21:15

    veja isto http://fontstuff.com/vba/vbatut04.htm


    .................................................................................
    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
    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Walter 31/8/2013, 22:39

    Ok. Alexandre.

    Vou tentar traduzir esse texto e fazer a função, mas meu inglês é meio "tosco" e não sei se vou dar conta. Enquanto estudo isso, se você encontrar algo que possa me ajudar, em português, eu agradeceria.
    Um abraço,

    Walter
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Alexandre Neves 31/8/2013, 22:42

    Bem, pode utilizar o tradutor http://translate.google.pt/#
    ~Para fazer a função, precisa saber os argumentos que entram no cálculo e, dentro do código da função fazer o cálculo utilizando esses agumentos


    .................................................................................
    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
    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Walter 2/9/2013, 18:41

    Ufa!
    Como dizemos aqui em Minas Gerais: Esse "trem" é muito dificil de fazer...

    Quero fazer uma função que, numa consulta, calcule o valor de pontos PtsPelaIdade, que, além de levar em consideração a faixa etária da pessoa, também leve em consideração o Sexo da mesma. segundo a tabela abaixo:

    Idade ...............................  Masculino...........Feminino
    Menos de 35 anos ...............   0 pontos  ........ 0 pontos
    35 a 39 anos   ....................   2 pontos  ....... 2 pontos
    40 a 44 anos   ...................    5 pontos......... 4 pontos
    45 a 49 anos .....................    6 pontos......... 5 pontos
    50 a 54 anos .....................    8 pontos ........ 7 pontos
    55 a 59 anos .....................   10 pontos .......  8 pontos                  
    60 a 64 anos .....................   11 pontos .......  9 pontos
    65 a 69 anos .....................   12 pontos .......  10 pontos
    70 a 74 anos .....................   14 pontos .......  11 pontos
    75 ou mais anos .................   15 pontos .......  12 pontos


    Fiz a estrutura do código usando Case, e ficaria mais ou menos assim:

    Select Case txtIdade
       Case Is < 35
           Select Case cxcSexo
               Case "M"
                   txtvalorIdade = 0
               Case "F"
                   txtvalorIdade = 0
           End Select
       Case Is < 40
           Select Case cxcSexo
               Case "M"
                   txtvalorIdade = 2
               Case "F"
                   txtvalorIdade = 2
           End Select
       Case Is < 45
           Select Case cxcSexo
               Case "M"
                   txtvalorIdade = 5
               Case "F"

     .... etc. etc. até:

       Case Is > 74
           Select Case cxcSexo
               Case "M"
                   txtvalorIdade = 15
               Case "F"
                   txtvalorIdade = 12
           End Select
    End Select
    End Sub

    Mas não sei como colocar essa estrutura em um módulo.
    O texto que o Alexandre me sugeriu não me ajudou muito....

    Walter
    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Walter 2/9/2013, 21:31

    Vamos lá.
    Criei um novo módulo e coloquei:

    Function CalculaPtsIdade()
    Select Case Idade
    Case Is < 35
    Select Case Sexo
    Case "M"
    PtsIdade = 0
    Case "F"
    PtsIdade = 0
    End Select
    Case Is < 40
    Select Case Sexo
    Case "M"
    PtsIdade = 2
    Case "F"
    PtsIdade = 2
    End Select
    Case Is < 45
    Select Case Sexo
    Case "M"
    PtsIdade = 5
    Case "F"
    PtsIdade = 4
    End Select
    Case Is < 50
    Select Case Sexo
    Case "M"
    PtsIdade = 6
    Case "F"
    PtsIdade = 5
    End Select
    Case Is < 55
    Select Case Sexo
    Case "M"
    PtsIdade = 8
    Case "F"
    PtsIdadeIdade = 7
    End Select
    Case Is < 60
    Select Case Sexo
    Case "M"
    PtsIdade = 10
    Case "F"
    PtsIdade = 8
    End Select
    Case Is < 65
    Select Case Sexo
    Case "M"
    PtsIdade = 11
    Case "F"
    PtsIdade = 9
    End Select
    Case Is < 70
    Select Case Sexo
    Case "M"
    PtsIdade = 12
    Case "F"
    PtsIdade = 10
    End Select
    Case Is < 75
    Select Case Sexo
    Case "M"
    PtsIdade = 14
    Case "F"
    PtsIdade = 11
    End Select
    Case Is > 74
    Select Case Sexo
    Case "M"
    PtsIdade = 15
    Case "F"
    PtsIdade = 12
    End Select
    End Select

    End Function

    Na consulta, inseri uma coluna colocando : PtsIdade: CalculaPtsIdade(), mas ao roda-la a coluna fica toda vazia, ou seja o calculo não é realizado. O que está faltando no código?

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Alexandre Neves 2/9/2013, 21:37

    Boa noite,
    Tem de inserir os parâmetros
    Function PtsIdadeSexo(Idade As Byte, SexoMF As String) As Byte
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' '
    ' código criado por Alexandre Neves, do Fórum MaximoAccess '
    ' o código pode ser utilizado livremente, desde que mencionado este cabeçalho '
    ' '
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'em 2013-09-02 para Walter

    Select Case SexoMF
    Case "M"
    Select Case Idade
    Case Is < 35
    PtsIdadeSexo = 0
    Case Is < 40
    PtsIdadeSexo = 2
    Case Is < 45
    PtsIdadeSexo = 5
    Case Is < 50
    PtsIdadeSexo = 6
    Case Is < 55
    PtsIdadeSexo = 8
    Case Is < 60
    PtsIdadeSexo = 10
    Case Is < 65
    PtsIdadeSexo = 11
    Case Is < 70
    PtsIdadeSexo = 12
    Case Is < 75
    PtsIdadeSexo = 14
    Case Else
    PtsIdadeSexo = 15
    End Select
    Case "F"
    Select Case Idade
    Case Is < 35
    PtsIdadeSexo = 0
    Case Is < 40
    PtsIdadeSexo = 2
    Case Is < 45
    PtsIdadeSexo = 4
    Case Is < 50
    PtsIdadeSexo = 5
    Case Is < 55
    PtsIdadeSexo = 7
    Case Is < 60
    PtsIdadeSexo = 8
    Case Is < 65
    PtsIdadeSexo = 9
    Case Is < 70
    PtsIdadeSexo = 10
    Case Is < 75
    PtsIdadeSexo = 11
    Case Else
    PtsIdadeSexo = 12
    End Select
    End Select
    End Function

    ao chamar =PtsIdadeSexo(CampoIdade, CampoSexoMF)


    .................................................................................
    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
    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Walter 3/9/2013, 00:04

    Muito bem, Alexandre.
    Funcionou legal!

    Antes de fechar o tópico preciso entender como funciona a função para que eu crie outras...

    1- Quando devo usar "Function" e quando devo usar "Public Function"?
    2- Vi que em idade você definiu como "Byte", por que? Por que é número? Não seria "Integer"? String é para texto, correto? Quais as outras opções que temos?

    Walter
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Alexandre Neves 3/9/2013, 09:11

    Bom dia,
    Vá estudando
    http://msdn.microsoft.com/en-us/library/sect4ck6.aspx
    http://office.microsoft.com/en-us/access-help/introduction-to-data-types-and-field-properties-HA010233292.aspx


    .................................................................................
    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
    Walter
    Walter
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 17/04/2011

    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Walter 3/9/2013, 10:46

    Muito obrigado, novamente, Alexandre.

    Walter

    Conteúdo patrocinado


    [Resolvido]Função SeImed com excesso de condições Empty Re: [Resolvido]Função SeImed com excesso de condições

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 04:13