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


4 participantes

    [Resolvido]Campo calculado somando um grande número de campos

    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 12/4/2022, 19:54

    Olá,

    Tenho o seguinte problema:

    Na 'CONSULTA A' eu tenho 62 campos:
    Matrícula, Nome e... ITENS (60 campos com valores de quantidade de itens diferentes)

    Na 'CONSULTA B', feita a partir da 'CONSULTA A', eu preciso que fique apenas 3 colunas, assim:
    Matrícula, Nome, TOTAL (a soma dos 60 campos de itens da 'CONSULTA A')

    Sei como fazer um campo calculado de duas ou três colunas, mas com muitos campos assim eu confesso que fiquei perdido.

    Alguma luz?
    Cristian Souza
    Cristian Souza
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 65
    Registrado : 12/01/2021

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  Cristian Souza 12/4/2022, 20:50

    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 12/4/2022, 21:31

    Oi cristiansouza, infelizmente não.

    O exemplo que você enviou trata sobre a soma de valores de registros iguais na mesma consulta. No meu caso, preciso de um campo que some diversos campos de outra consulta.

    Mesmo assim obrigado!
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 12/4/2022, 22:24

    60 campos?

    Não use em uma consulta. Crie um formulário do tipo folha de dados, adicione todos os campos, e crie um laço que busque os valores a serem somados.

    Ou, em um novo campo da consulta crie um campo: campo1+campo2+...+campo60


    .................................................................................
    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.
    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 12/4/2022, 23:36

    Meu caro DamascenoJr,

    Pois é... 60 e tantos.

    Vou tentar a sua dica do formulário e depois retorno com o feedback.

    Quanto à segunda opção, já tentei mas a quantidade de texto ultrapassa o limite do construtor de expressões.

    Grato.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 12/4/2022, 23:41

    Ignore o construtor de expressões. Abra a consulta em modo SQL e construa daí então.


    .................................................................................
    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.

    4nderson gosta desta mensagem

    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 13/4/2022, 02:36

    Caro DamascenoJr,

    Esqueci de mencionar um detalhe que deixa tudo mais complicado:
    A 'CONSULTA A', mencionada na mensagem nº 1, é uma consulta de referência cruzada cuja origem é uma base vinculada (xls) selecionada logo no início da aplicação.

    Resumindo: Os 60 e tantos campos constantes na base vinculada (os itens) eventualmente sofrerão variações. Ou seja, dependendo da base selecionada, alguns desses campos mudarão.

    Acredito que isso inviabiliza a opção de usar um formulário para a soma dos campos.

    A questão é:
    Considerando que eu sei quais campos ocasionalmente não estarão nas bases, como fazer para que a soma destes campos esteja prevista no SQL, mas não seja imperativa?
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 13/4/2022, 02:40

    Tentou escrever os campos no modo SQL do construtor de consultas?


    .................................................................................
    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.
    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 13/4/2022, 02:54

    DamascenoJr escreveu:Tentou escrever os campos no modo SQL do construtor de consultas?

    Sim, deu um baita trabalho mas deu certo. Muito grato!

    Mas se adiciono campos que não constam na consulta dá erro (obviamente). É a seguinte mensagem:
    O mecanismo de banco de dados do Microsoft Access não reconhece '[CAMPO OPCIONAL]' como nome de campo ou expressão válida.

    O que eu preciso fazer é que a inclusão desses campos na soma - que não constam na base atual, mas que eventualmente constarão em outras - não seja imperativa.
    Tipo assim: se o campo constar, soma-se; se não, passa pro próximo.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 13/4/2022, 03:09

    Nesse caso seria necessário um função para criação da consulta em tempo de execução. Tornado-a, dinâmica.

    O código base é esse para criação da consulta é

    Código:
    On Error Resume Next
    Call DoCmd.DeleteObject(acQuery, "cnsNomeConsultaDinamica")
    If Err Then Err.Clear
    On Error GoTo 0
    Call CurrentDb.CreateQueryDef("cnsNomeConsultaDinamica", fncUmaFunçãoQueCrieTextoSqlDaConsulta)

    Sem acesso aos objetos, não sei por onde começar para indicar a função que monta o texto da SQL.


    .................................................................................
    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.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 13/4/2022, 03:16

    Talvez

    Código:
    Private Function fncUmaFunçãoQueCrieTextoSqlDaConsulta() as string

      Dim fld as Field
      dim strTemp as string

      for each fld in ConsultaA.fields

          if fld.name <> "Campo1NaoConsiderar" and fld.name <> "Campo2NaoConsiderar" then
            strTemp = strTemp & "+[" & fld.name & "]"
          end if

      next fld

      fncUmaFunçãoQueCrieTextoSqlDaConsulta = "select " & mid(strTemp,2) & " from ConsultaA;"

    End Sub


    .................................................................................
    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.

    4nderson gosta desta mensagem

    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  Alexandre Fim 13/4/2022, 14:09

    Olá Anderson,

    60 campos em uma consulta ou tabela, realmente, tem alguma coisa em não conformidade com banco de dados e/ou programação.
    É necessário analisar a estrutura de tabelas e os dados para te ajudar em alguma solução.
    Por gentileza, disponibilize uma cópia do seu banco de dados.

    Grato

    Att,
    Alexandre Fim


    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    [Resolvido]Campo calculado somando um grande número de campos Setinf11
    Sistemas e Tecnologia Ltda
    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 14/4/2022, 19:34

    Saudações, meus nobres!
    DamascenoJr. escreveu:Nesse caso seria necessário um função para criação da consulta em tempo de execução. Tornado-a, dinâmica.
    R: Tentei, sem sucesso.
    Alexandre Fim escreveu:60 campos em uma consulta ou tabela, realmente, tem alguma coisa em não conformidade com banco de dados e/ou programação.
    R: Pois é, meu caro Alexandre Fim... Mas é isso mesmo. E essa quantidade é volátil, como eu disse antes, ela depende da base selecionada.

    Segue anexo um pequeno banco de dados simulando a situação em questão. As duas bases vinculadas possuem 50 variedades de itens, reorganizados na Consulta A (referência cruzada). A ideia é somar tais campos na Consulta B.

    E tudo funciona direitinho com a Base1, pois o SQL foi feito a partir dela. Mas ao selecionar a Base2, que possui alguns itens diferentes, obviamente dá erro.

    E é claro que o inverso acontece se no SQL eu inserir os campos da Base2, quando selecionar a Base1 vai dar erro.

    Eu preciso fazer com que a inclusão dos campos na soma não seja imperativa. Quando o campo constar, soma-se; se não, passa para o próximo.

    Agradeço quem puder ajudar.


    P.S.: Os campos divergentes são os de final 05.
    Anexos
    [Resolvido]Campo calculado somando um grande número de campos AttachmentTesteSoma.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (84 Kb) Baixado 5 vez(es)
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 14/4/2022, 21:01

    Com as dicas passadas.

    *registre-se que, sem dúvida, com um exemplo fica mais fácil ajudar.
    Anexos
    [Resolvido]Campo calculado somando um grande número de campos AttachmentdbTeste.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (38 Kb) Baixado 10 vez(es)


    .................................................................................
    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.

    4nderson gosta desta mensagem

    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 15/4/2022, 02:53

    Caro DamascenoJr,

    Por tentativa e erro eu ia demorar muito pra completar o código da mensagem nº 11.

    Parabéns pela lógica! Enxuta e clara.
    Muito obrigado!
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 15/4/2022, 04:14

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    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.
    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 15/4/2022, 13:29

    DamascenoJr,

    Tentei reproduzir o resultado no bd de origem. O código criou a consulta com sucesso, mas depois o erro persistiu.

    Você poderia dizer onde estou errando?
    Anexos
    [Resolvido]Campo calculado somando um grande número de campos AttachmentTesteSoma.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (104 Kb) Baixado 2 vez(es)
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 15/4/2022, 14:37

    Faltou adaptar a macro inserida no botão testar.


    .................................................................................
    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.

    4nderson gosta desta mensagem

    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 15/4/2022, 21:40

    Valeu, meu caro! [acho que preciso dormir]

    Na minha cabeça o sql já se misturou com vba + java + html...
    Tô perdidão aqui na sintaxe.

    Pra finalizar essa novela eu pensei em abrir um novo tópico pra essa dúvida, mas como faz parte do mesmo código tratado neste, lá vai...

    Como inserir neste código mais campos estáticos como os campos "Cod" e "User"?:

    Código:
    Private Function fncUmaFuncaoQueCrieTextoSqlDaConsulta() As String

        Dim fld As Field
        Dim strTemp As String

        For Each fld In CurrentDb.QueryDefs("CONSULTA A").Fields

            If fld.Name <> "COD" And fld.Name <> "User" Then
                strTemp = strTemp & "+Nz([" & fld.Name & "])"
            End If

        Next fld

        fncUmaFuncaoQueCrieTextoSqlDaConsulta = "select COD, User, " & Mid(strTemp, 2) & " as TotalTudo from [CONSULTA A];"

    End Function
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  DamascenoJr. 15/4/2022, 21:42

    Private Function fncUmaFuncaoQueCrieTextoSqlDaConsulta() As String

       ...
           If fld.Name <> "COD" And fld.Name <> "User" And fld.Name <> "NovoCampo1" And fld.Name <> "NovoCampo2" Then
       ...

       fncUmaFuncaoQueCrieTextoSqlDaConsulta = "select COD, User, NovoCampo1, NovoCampo2, " & Mid(strTemp, 2) & " as TotalTudo from [CONSULTA A];"

    End Function


    .................................................................................
    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.
    4nderson
    4nderson
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 62
    Registrado : 25/03/2022

    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  4nderson 16/4/2022, 00:06

    Pois é... eu estava fazendo exatamente isso, mas sempre dava errado.

    O problema:
    O nome de um dos campos está entre colchetes na base vinculada.
    Quando eu usava os colchetes dava um erro, quando eu escrevia sem colchetes dava outro erro.

    A solução:
    O novo campo sem colchetes na primeira linha, mas entre colchetes na segunda:
    If fld.Name <> "COD" And fld.Name <> "User" And fld.Name <> "NovoCampo" Then
    ...
    fncUmaFuncaoQueCrieTextoSqlDaConsulta = "select COD, User, [NovoCampo], " & Mid(strTemp, 2) & " as TotalTudo from [CONSULTA A];"

    Tudo macio agora.

    Muito obrigado!!

    Conteúdo patrocinado


    [Resolvido]Campo calculado somando um grande número de campos Empty Re: [Resolvido]Campo calculado somando um grande número de campos

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/4/2024, 21:00