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

    Dcount em mais de um registro da tabela

    Compartilhe
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 9/10/2018, 19:36

    Boa tarde,
    poderiam me ajudar?
    Estou precisando extrair alguns dados das tabelas..
    assim precisava contar quantos registros tenho com determinado critério, por exemplo:
    No projeto a seguir (em zip adicionado neste tópico), tentei contar todos os registros que continham o  centrabRes ="030INS02"  e statusdoUsuario="SPRG", usando a seguinte formula:
    Código:
    Private Sub Form_Load()
    Dim contar As Integer
    contar = DCount("Codigo", "OrdensGeral", "centrabRes = " & "030INS02" & " and StatusdoUsuario = " & "SPRG" & "")
    insAENT = contar
    End Sub
    porém sempre da erro, ou retorna 0 Sad

    Alguem pode da uma luz?

    segue projeto para da uma olhada.
    Anexos
    Projeto CONTROLE.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.3 Mb) Baixado 8 vez(es)
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 9/10/2018, 19:49

    ah, tentei também incluir no valor padrão do campo access:

    =DContar("[Codigo]";"OrdensGeral";"[centrabRes]='030AUT02'")+DContar("[Codigo]";"OrdensGeral";"[centrabRes]='030AUT01'") E DContar("[Codigo]";"OrdensGeral";"[statusdoUsuario]='SPRG'")


    contar quantos registros que contenham no centrabRes 030aut02 e 030aut01 que também contenham no StatusdoUsuario o codigo "SPRG" e retornar quantidade para o campo desejado.

    Mas não deu certo também Sad

    FranklinJSP
    FranklinJSP
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 198
    Registrado : 25/02/2016

    Re: Dcount em mais de um registro da tabela

    Mensagem  FranklinJSP em 9/10/2018, 20:26

    Oi Cjunior

    Veja se é o que você precisa

    Saludos desde Bolivia


    .................................................................................
    Meu Português não é muito bom,
    mas eu gosto de colaborar... em qualquer idioma
    Smile "Access... minha paixão"
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 12:40

    Bom dia Franklin, funcionou desta forma, o problema é que não está localizando o status "SPRG", creio que seja pelo fato do status estar misturado com outros.

    Eu consigo por no filtro, para procurar todo o campo que contenha "SPRG"?

    por exemplo:

    ele não está encontrando quando o campo é:
    "SIMP TRIA AEGE AEGO ANEX SPRG"

    pois está procurando apenas o SPRG.

    Teria como ele localizar quando está junto com outros status, igual no exemplo acima?


    Obrigado!
    avatar
    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 137
    Registrado : 14/08/2011

    Re: Dcount em mais de um registro da tabela

    Mensagem  leoni_dias em 10/10/2018, 13:04

    Bom dia,

    Desculpem a ignorância, mas porque não pode ser apenas:

    contar = DCount("*", "OrdensGeral", "centrabRes = '030INS02' AND StatusdoUsuario = 'SPRG'")
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 13:08

    Ei bom dia,
    poder pode, o problema é o que eu disse acima, ele só vai me retornar o status que tiver apenas o "SPRG" e não o que contem,antes e depois.

    o problema é que quando ponho o seguinte:
    Código:
    Dim contar As String
    contar = DCount("Codigo", "OrdensGeral", "centrabRes = '030INS02'" & " AND B = "* SPRG *"")
    insAENT = contar

    o VBA da tipo incompatível.

    Não sei o que fazer :T
    avatar
    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 137
    Registrado : 14/08/2011

    Re: Dcount em mais de um registro da tabela

    Mensagem  leoni_dias em 10/10/2018, 13:20

    Bom dia,

    Mas se a pesquisa no campo StatusdoUsuario tá pedindo exatamente SPRG (StatusdoUsuario = 'SPRG'), não vai encontrar valores diferentes, tipo "SPRG ETC ETC"
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 13:24

    sim, positivo.

    O problema é que quando tentei pegar todo o resto, o access me retorna que o tipo está incompatível.
    desta maneira:
    contar = DCount("*", "OrdensGeral", "centrabRes = '030INS02'" & " AND StatusdoUsuario = " * SPRG * "")
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 14:04

    to tentando tudo, e tudo dá tipo incompativel..
    avatar
    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 137
    Registrado : 14/08/2011

    Re: Dcount em mais de um registro da tabela

    Mensagem  leoni_dias em 10/10/2018, 14:22

    Bom dia,

    Tenta assim:
    Ps.: Lembrando que não sou mestre, tô só tentando resolver.

    Dim rs As DAO.Recordset, StrInterna1 As String, StrInterna2 As String, contar As Integer

    Set rs = CurrentDb.OpenRecordset("OrdensGeral")


    Do While Not rs.EOF
       StrInterna1 = rs("StatusdoUsuario")
       StrInterna2 = rs("centrabRes")
       
       If InStr(1, StrInterna1, "SPRG", vbTextCompare) > 0 And StrInterna2 = "030INS02" Then
          contar = contar + 1
       End If
       rs.MoveNext
    Loop
    Set rs = Nothing

    insAENT = contar
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 14:32

    Muito obrigado!
    Funcionou!!

    Assim vejo o tanto que preciso aprender ainda Sad

    Pode me dar uma breve explicação desta formula? (tentei entender, mas creio que não entendi direito)


    Muito obrigado!

    avatar
    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 137
    Registrado : 14/08/2011

    Re: Dcount em mais de um registro da tabela

    Mensagem  leoni_dias em 10/10/2018, 14:41

    Bom dia, você está no melhor forum para aprender Access. E olha que sou mais um aprendiz. Sempre peço ajuda com os mestres que aqui estão.
    Se brincar, farão a mesma coisa desse código ainda mais resumido.

    Vou tentar.

    Dim rs As DAO.Recordset, StrInterna1 As String, StrInterna2 As String, contar As Integer '---Declara as variáveis

    Set rs = CurrentDb.OpenRecordset("OrdensGeral") '---Abrindo a tabela "OrdensGeral"


    Do While Not rs.EOF '---Fazendo uma devassa na tabela do começo ao fim, registro por registro
      StrInterna1 = rs("StatusdoUsuario") '---Recebendo o valor do campo
      StrInterna2 = rs("centrabRes") '---Recebendo o valor do campo
     
      If InStr(1, StrInterna1, "SPRG", vbTextCompare) > 0 And StrInterna2 = "030INS02" Then '---Fazendo o teste se no campo StatusdoUsuario tem SPRG e se o campo centrabRes é 030INS02
         contar = contar + 1 '---Se for, contar recebe a contagem
      End If
      rs.MoveNext '---Move para o próximo registro
    Loop '---Faz um loop (volta para o Do While enquanto não foi o final da tabela - EOF)
    Set rs = Nothing '---Zera a variável para liberar memória

    insAENT = contar


    Ps.: Lembre de colocar como resolvido.


    Última edição por leoni_dias em 10/10/2018, 14:57, editado 1 vez(es)
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 14:45

    obrigado!

    E eu consigo fazer pesquisando mais de um tipo de StrInterna2?

    por exemplo:
    Código:
    Do While Not rs.EOF
      StrInterna1 = rs("StatusdoUsuario")
      StrInterna2 = rs("centrabRes")
     
      If InStr(1, StrInterna1, "SPRG", vbTextCompare) And StrInterna2 = "030INS02" And StrInterna2 = "030INS03" And StrInterna2 = "030INS04" Then
          contar = contar + 1
      End If
      rs.MoveNext
    Loop
    Set rs = Nothing

    insAENT = contar
    End Sub

    Tentei e retornou 0 :T
    Devo ta fazendo algo errado.
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 14:57

    É porque terei que fazer essa verificação para varios centros de trabalho..
    Por exemplo, fizemos do INS02, agora preciso fazer do INS03, 04 etc..

    Como que faz ? Pode ajudar?


    E eu consigo criar varios loops destes para todos meus centros de trabalho?

    Por exemplo, terei que usar varias e varias vezes para todos os outros centros (mec,ins,ele, etc...)


    Última edição por CjuniorAJ10 em 10/10/2018, 15:01, editado 1 vez(es)
    avatar
    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 137
    Registrado : 14/08/2011

    Re: Dcount em mais de um registro da tabela

    Mensagem  leoni_dias em 10/10/2018, 14:59

    Bom dia,

    Coloca assim:

    If InStr(1, StrInterna1, "SPRG", vbTextCompare) And (StrInterna2 = "030INS02" Or StrInterna2 = "030INS03" Or StrInterna2 = "030INS04") Then

    Or no lugar de and
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 15:03

    entendi e se caso eu quisesse fazer a contagem em outro textbox, como ficaria?

    repetiria o processo?

    Código:
    Private Sub Form_Load()
    Dim rs As DAO.Recordset, StrInterna1 As String, StrInterna2 As String, contar As Integer
    Set rs = CurrentDb.OpenRecordset("OrdensGeral")
    Do While Not rs.EOF
       StrInterna1 = rs("StatusdoUsuario")
       StrInterna2 = rs("centrabRes")
        If InStr(1, StrInterna1, "SPRG", vbTextCompare) And StrInterna2 = "030INS02" Or StrInterna2 = "030INS01" Then
          contar = contar + 1
       End If
       rs.MoveNext
    Loop
    Set rs = Nothing
    ins02sprg = contar


    Dim rs As DAO.Recordset, StrInterna1 As String, StrInterna2 As String, contar As Integer
    Set rs = CurrentDb.OpenRecordset("OrdensGeral")
    Do While Not rs.EOF
       StrInterna1 = rs("StatusdoUsuario")
       StrInterna2 = rs("centrabRes")
        If InStr(1, StrInterna1, "SPRG", vbTextCompare) And StrInterna2 = "030MEC02" Or StrInterna2 = "030MEC03" Then
          contar = contar + 1
       End If
       rs.MoveNext
    Loop
    Set rs = Nothing
    mecAENT = contar



    End Sub

    Assim?
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 15:04

    me desculpe, sou muito iniciante nisto.
    avatar
    leoni_dias
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 137
    Registrado : 14/08/2011

    Re: Dcount em mais de um registro da tabela

    Mensagem  leoni_dias em 10/10/2018, 15:10

    Sem problemas.

    Acredito que deve repetir o processo.

    Lembre de colocar o "("

    (StrInterna2 = "030INS02" Or StrInterna2 = "030INS03" Or StrInterna2 = "030INS04")



    e olha na edição que foi feita no primeiro:

    If InStr(1, StrInterna1, "SPRG", vbTextCompare) > 0
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 10/10/2018, 17:02

    Valeu man, deu super certo.

    Posso deixar este tópico aberto, e caso precise (acho que vou precisar de mais ajuda) eu falo aqui?


    Obrigado mesmo!
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 26/10/2018, 13:43

    Preciso contar 3 critérios dentro de uma tabela,
    Tudo que está na coluna 1 preenchido com SO
    Tudo que está na coluna 2 preenchido com PREVENTIVAS
    Tudo que está na coluna 3 preenchido com uma DATE -1 (nosso dia -1)

    Tentei fazer a contagem de dois jeitos:
    1º Me.txbAtrasadas = DCount("[CodProg]", "ProgramBD", "Crit='so' AND nota_preventiva = 'preventivas' AND dataEntrada = Date -1'")


    Private Sub SoAtrasadas()
    Dim rs21 As DAO.Recordset, StrInterna22, StrInterna23, strinterna24 As String
    Set rs21 = CurrentDb.OpenRecordset("ProgramBD")
    Do While Not rs21.EOF
    StrInterna22 = rs21("Crit")
    StrInterna23 = rs21("nota_preventiva")
    strinterna24 = rs21("dataREF")
    If InStr(1, StrInterna22, "so", vbTextCompare) > 0 And InStr(1, StrInterna23, "preventivas", vbTextCompare) > 0 And InStr(1, strinterna24, Date, vbTextCompare) < Date - 1 Then
    contar02 = contar02 + 1
    End If
    rs21.MoveNext
    Loop
    Set rs21 = Nothing
    txbAtrasadas = contar02
    End Sub

    todas as duas deram errado, poderiam me ajudar?

    Obrigado!
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: Dcount em mais de um registro da tabela

    Mensagem  Alexandre Neves em 26/10/2018, 20:27

    Boa noiyte
    Tente
    txbAtrasadas = DCount("CodProg", "ProgramBD", "Crit='so' AND nota_preventiva = 'preventivas' AND dataEntrada = Date() -1'")


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

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 333
    Registrado : 23/01/2017

    Re: Dcount em mais de um registro da tabela

    Mensagem  thiagomcosta em 26/10/2018, 20:50

    Para procurar por uma parte da string utilize o operador LIKE do SQL.

    Código:
    Dim contar As String
    contar = DCount("Codigo", "OrdensGeral", "centrabRes = '030INS02'  AND B LIKE '*SPRG*'")
    insAENT = contar

    Quanto à data, eu gosto de usar a função DateDiff:
    Código:
    DCount("[CodProg]", "ProgramBD", "Crit='so' AND nota_preventiva = 'preventivas' AND DateDiff('d',[dataEntrada],Date())=1")
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 30/10/2018, 10:57

    Bom dia!
    Desculpe a demora para dar retorno.
    Thiago, utilizei seu código porém não obtive sucesso.

    Poderia me ajudar? Estou encaminhando o arquivo em anexo.

    Poderia também dar uma breve explicação sobre o codigo DATADIFF?


    Obrigado!
    Anexos
    CONTROLE CONFIABILIDADE.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (436 Kb) Baixado 4 vez(es)
    thiagomcosta
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 333
    Registrado : 23/01/2017

    Re: Dcount em mais de um registro da tabela

    Mensagem  thiagomcosta em 30/10/2018, 13:10

    Peguei a questão da data, eu tinha entendido errado.
    Você quer contar as atrasadas, neste caso DateDiff não ajuda muito mesmo.
    Do jeito que eu mandei está contando só as que tem data de ontem e nada mais.
    A solução do Alexandre Neves parece correta, só mude o último = por <=
    Código:
    txbAtrasadas = DCount("CodProg", "ProgramBD", "Crit='so' AND nota_preventiva = 'preventivas' AND dataEntrada <= Date() -1'")

    A função DateDiff retorna o intervalo entre duas datas.
    O primeiro parâmetro é a unidade de tempo, no caso que eu usei é "d" de dias (days), pode ser em meses que é "m" de Month (acho que é assim que se escreve), pode ser semanas, "w" de Week. Faz também para intervalos de horas, minutos, etc. Os outros dois paramêtros são as datas (ou horas, ou tempo) que deseja realizar a diferença.
    A documentação da MS está aqui https://support.office.com/en-us/article/datediff-function-e6dd7ee6-3d01-4531-905c-e24fc238f85f
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 30/10/2018, 16:49

    Obrigado novamente meu amigo,
    O problema agora é que ao usar este código o mesmo me retorna o seguinte erro:
    "erro 2185:
    Você não pode fazer referencia a uma propriedade ou a um método de um controle,a menos que o controle tenha foco"

    E não faço ideia do que fazer..

    Você conseguiu aplicar este código no exemplo encaminhado? Pode me ajudar mais um pouco? Desculpa sou iniciante no assunto..


    Obrigado!!
    avatar
    CjuniorAJ10
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    Registrado : 02/08/2018

    Re: Dcount em mais de um registro da tabela

    Mensagem  CjuniorAJ10 em 30/10/2018, 16:52

    Ah, e quando tentei fazer alguns ajustes me retornou:
    Erro:'3075'
    "Erro de sintaxe na cadeia na expressão de consulta 'Crit='so' AND nota_preventiva = 'preventivas' AND dataEntrada <=Date()-1"."

    Quando eu tiro o AND da data, funciona normal, será que o problema não é o fato de estar procurando string com data? ( to um pouco perdido) Sad
    thiagomcosta
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 333
    Registrado : 23/01/2017

    Re: Dcount em mais de um registro da tabela

    Mensagem  thiagomcosta em 31/10/2018, 14:41

    Tenta usar
    Crit='so' AND nota_preventiva = 'preventivas' AND dataEntrada<=DateAdd('d', -1, date())

      Data/hora atual: 26/3/2019, 02:56