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


3 participantes

    [Resolvido]Verificar se há registro e informar

    avatar
    M2013
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 64
    Registrado : 07/06/2013

    [Resolvido]Verificar se há registro e informar Empty [Resolvido]Verificar se há registro e informar

    Mensagem  M2013 6/11/2014, 12:30

    Prezados,

    Tenho um formulário(1) que exibe diversas 'bases de dados'de uma caixa de listagem. Ao escolher uma 'base' ele abre o formulário(2) com source do escolhido. Nesse formulário(2) tem um botão que abre outro formulário(3).A origem desse formulario(3) é uma sql. Preciso verificar se essa sql retorna 0(zero) e então não abrir o formulário(3) e informar ao usuário.


    ==>botão no formulário(2)...............................................

    Dim source_realiztemp, sc,xz

    sc = Forms![frm_Acompanhamentos].Lst_Acompanhamentos    ' base selecionada no formulário(1)
     
    source_realiztemp = "SELECT tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]) AS [SomaDeMont#em moeda AAF a controlar contra orç], tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras]" & _
    "FROM [" & sc & "] INNER JOIN tbrealizadoTemp ON ([" & sc & "].COMPR = tbrealizadoTemp.[Documento de compras]) AND ([" & sc & "].PEP = tbrealizadoTemp.[Programa orçamento]) GROUP BY tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras], [" & sc & "].PEP, [" & sc & "].COMPR HAVING (((Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]))>0.01) AND (([" & sc & "].PEP)=[Formulários]![frm_Acomp_Ed2]![PEP]) AND (([" & sc & "].COMPR)=[Formulários]![frm_Acomp_Ed2]![COMPR]));"


    xz = DCount("*", " & source_realiztemp & ")

    If xz = 0 Then
    MsgBox "Não há registros a exibir", vbExclamation, NomePrograma

    Else

    DoCmd.OpenForm "frm_RealizTemp"
    Forms![frm_RealizTemp].RecordSource = source_realiztemp
    End If

    O código gera erro no Dcount.

    Quem puder ajudar agradeço,
    Julio Lustosa
    Julio Lustosa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 203
    Registrado : 23/02/2011

    [Resolvido]Verificar se há registro e informar Empty Re: [Resolvido]Verificar se há registro e informar

    Mensagem  Julio Lustosa 6/11/2014, 13:03

    Olá.

    Faça o teste substituindo algumas linhas e acrescentando outras.

    Código:
    Dim source_realiztemp$, sc
    Dim rs As DAO.Recordset

    sc = Forms![frm_Acompanhamentos].Lst_Acompanhamentos    ' base selecionada no formulário(1)
      
    source_realiztemp = "SELECT tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], " & _
                        "tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], " & _
                        "Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]) AS [SomaDeMont#em moeda AAF a controlar contra orç], " & _
                        "tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], " & _
                        "tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras]" & _
                        "FROM [" & sc & "] INNER JOIN tbrealizadoTemp ON ([" & sc & "].COMPR = tbrealizadoTemp.[Documento de compras]) " & _
                        "AND ([" & sc & "].PEP = tbrealizadoTemp.[Programa orçamento]) GROUP BY tbrealizadoTemp.[Nº doc#de referência], " & _
                        "tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], " & _
                        "tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, " & _
                        "tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras], [" & sc & "].PEP, [" & sc & "].COMPR " & _
                        "HAVING (((Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]))>0.01) AND (([" & sc & "].PEP)=[Formulários]![frm_Acomp_Ed2]![PEP]) " & _
                        "AND (([" & sc & "].COMPR)=[Formulários]![frm_Acomp_Ed2]![COMPR]));"

    Set db = CurrentDb
    Set rs = db.OpenRecordset(source_realiztemp, dbOpenSnapshot)

    If rs.RecordCount = 0 Then
        MsgBox "Não há registros a exibir", vbExclamation, NomePrograma
        Else
            DoCmd.OpenForm "frm_RealizTemp"
            Forms![frm_RealizTemp].RecordSource = source_realiztemp
    End If

    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
    avatar
    M2013
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 64
    Registrado : 07/06/2013

    [Resolvido]Verificar se há registro e informar Empty Verificar se há registro e informar

    Mensagem  M2013 6/11/2014, 13:12

    Julio, obrigado pela resposta.

    Adaptei mas apresentou erro: "Parametros insuficientes.Eram esperados 2" (Erro 3061)

    na linha:

    Set rs = db.OpenRecordset(source_realiztemp, dbOpenSnapshot)

    Julio Lustosa
    Julio Lustosa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 203
    Registrado : 23/02/2011

    [Resolvido]Verificar se há registro e informar Empty Re: [Resolvido]Verificar se há registro e informar

    Mensagem  Julio Lustosa 6/11/2014, 13:24

    Desculpe. Faltou declarar a variável "db".

    Declare da seguinte forma: Dim db As DAO.Database
    avatar
    M2013
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 64
    Registrado : 07/06/2013

    [Resolvido]Verificar se há registro e informar Empty Re: [Resolvido]Verificar se há registro e informar

    Mensagem  M2013 6/11/2014, 13:36

    O código ficou assim, porém permanece o erro na mesma linha.
    -------------------------------------------------------------------------------------------------
    Dim source_realiztemp, sc
    Dim rs As DAO.Recordset
    Dim db As DAO.Database

    Set db = CurrentDb

    sc = Forms![frm_Acompanhamentos].Lst_Acompanhamentos

    source_realiztemp = "SELECT tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]) AS [SomaDeMont#em moeda AAF a controlar contra orç], tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras]" & _
    "FROM [" & sc & "] INNER JOIN tbrealizadoTemp ON ([" & sc & "].COMPR = tbrealizadoTemp.[Documento de compras]) AND ([" & sc & "].PEP = tbrealizadoTemp.[Programa orçamento]) GROUP BY tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras], [" & sc & "].PEP, [" & sc & "].COMPR HAVING (((Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]))>0.01) AND (([" & sc & "].PEP)=[Formulários]![frm_Acomp_Ed2]![PEP]) AND (([" & sc & "].COMPR)=[Formulários]![frm_Acomp_Ed2]![COMPR]));"

    Set rs = db.OpenRecordset(source_realiztemp, dbOpenSnapshot)

    If rs.RecordCount = 0 Then
    MsgBox "Não há registros a exibir", vbExclamation, NomePrograma
    Else
    DoCmd.OpenForm "frm_RealizTemp"
    Forms![frm_RealizTemp].RecordSource = source_realiztemp
    End If

    .......................................................................................................
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Verificar se há registro e informar Empty Re: [Resolvido]Verificar se há registro e informar

    Mensagem  Noobezinho 6/11/2014, 13:42

    Um pitaco.

    Isso não funciona:

    xz = DCount("*", " & source_realiztemp & ")

    Por que?

    1º - DCount  = Contar no Dominio que por sua vez significa Tabela.

          Então, DCount, Dloockup  irão fazer a operação diretamente na tabela ou através da consulta de uma tabela..

    2º - source_realiztemp é uma variável tipo string e não nome de tabela

    Concluindo, sugiro que faça uma consulta com essa instrução SQL e então use-a no código acima.

    xz = DCount("*", "NomeDaConsulta")

    Abraços

    Noob


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    Julio Lustosa
    Julio Lustosa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 203
    Registrado : 23/02/2011

    [Resolvido]Verificar se há registro e informar Empty Re: [Resolvido]Verificar se há registro e informar

    Mensagem  Julio Lustosa 6/11/2014, 14:24

    O problema está na sua SQL.

    Você declarou a variável sc como do tipo Variant (como não determinou se seria SQL ou Integer ou Long e etc, o VB assume como Variant), e ela recebe o valor "Forms![frm_Acompanhamentos].Lst_Acompanhamentos", ou seja, uma string.

    Dentro da SQL, você coloca a variável sc entre colchetes e aspas duplas, sendo que o correto seria, quando a variável é do tipo texto, colocar aspas simples e depois aspas duplas, exemplo: ... '" & sc & "' ...

    Se você tirou essa sql de uma consulta sua já pronta, então você deveria ter adaptado ela melhor.

    O que o Noob fala acima está corretíssimo. Então, novamente, se essa SQL é de um objeto consulta, você pode usar o DCount com o nome da consulta conforme o Noob informou.

    Para poder lhe ajudar melhor, por conta do erro nesta SQL, teríamos que ter acesso ao seu projeto. Mas acho que com as informações acima, você conseguirá resolver o problema.

    Ou você arruma a SQL e utilizar o código que te passei, ou o DCount com o nome da consulta correta.

    Abraços.
    avatar
    M2013
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 64
    Registrado : 07/06/2013

    [Resolvido]Verificar se há registro e informar Empty Verificar se há registro e informar

    Mensagem  M2013 6/11/2014, 16:03

    Obrigado a todos pelas respostas.
    pós analisar bastante , resolvi a questão de outra forma. Como determinante era ter um valor diferente de 0(zero) para abrir o formulario(3) resolvi com o código abaixo.
    -------------------------------------------------------------------------------------------------------
    Dim vlcompr, source_realiztemp, sc

    sc = Forms![frm_Acompanhamentos].Lst_Acompanhamentos '(formulário(1))

    source_realiztemp = "SELECT tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]) AS [SomaDeMont#em moeda AAF a controlar contra orç], tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras]" & _
    "FROM [" & sc & "] INNER JOIN tbrealizadoTemp ON ([" & sc & "].COMPR = tbrealizadoTemp.[Documento de compras]) AND ([" & sc & "].PEP = tbrealizadoTemp.[Programa orçamento]) GROUP BY tbrealizadoTemp.[Nº doc#de referência], tbrealizadoTemp.[Item financeiro], tbrealizadoTemp.[Nº documento precedente], tbrealizadoTemp.[Denominação do item de orçamento], tbrealizadoTemp.[Elemento PEP], tbrealizadoTemp.Item, tbrealizadoTemp.Texto, tbrealizadoTemp.[Período/ano], tbrealizadoTemp.Requisitante, tbrealizadoTemp.[Programa orçamento], tbrealizadoTemp.[Documento de compras], [" & sc & "].PEP, [" & sc & "].COMPR HAVING (((Sum(tbrealizadoTemp.[Mont#em moeda AAF a controlar contra orç]))>0.01) AND (([" & sc & "].PEP)=[Formulários]![frm_Acomp_Ed2]![PEP]) AND (([" & sc & "].COMPR)=[Formulários]![frm_Acomp_Ed2]![COMPR]));"

    vlcompr = DLookup("[SomaDeMont#em moeda AAF a controlar contra orç]", "tbrealizadoTemp", "[Documento de compras]=Forms![frm_Acomp_Ed2]![COMPR]") ' (Documento de compras <->COMPR)

    If vlcompr <> 0 Then

    DoCmd.OpenForm "frm_RealizTemp"
    Forms![frm_RealizTemp].RecordSource = source_realiztemp

    Else

    MsgBox "Não há registros a exibir", vbExclamation, NomePrograma

    End If

    -------------------------------------------------------------------------------------------

    Conteúdo patrocinado


    [Resolvido]Verificar se há registro e informar Empty Re: [Resolvido]Verificar se há registro e informar

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/3/2024, 17:01