MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Verificar se há registro e informar

    Compartilhe

    M2013
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    [Resolvido]Verificar se há registro e informar

    Mensagem  M2013 em 6/11/2014, 07: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
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 151
    Registrado : 22/02/2011

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

    Mensagem  Julio Lustosa em 6/11/2014, 08: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

    M2013
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Verificar se há registro e informar

    Mensagem  M2013 em 6/11/2014, 08: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
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 151
    Registrado : 22/02/2011

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

    Mensagem  Julio Lustosa em 6/11/2014, 08:24

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

    Declare da seguinte forma: Dim db As DAO.Database

    M2013
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  M2013 em 6/11/2014, 08: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
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em 6/11/2014, 08: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


    .................................................................................
    Noobezinho

    * A solução funcionou?  [Você precisa estar registrado e conectado para ver esta imagem.] 
    Agradeça e feche o tópico clicando no botão Resolvido
    Se não sabe como, veja [Você precisa estar registrado e conectado para ver este link.].

    Como anexar imagem no teu post do fórum : [Você precisa estar registrado e conectado para ver este link.]

    * Criar arquivos.zip com o Winrar - veja [Você precisa estar registrado e conectado para ver este link.].

    Atualmente estou verificando se quem está pedindo ajuda, ajudamos e não retornou.
    Se a pessoa em questão não deu retorno, não tentarei ajudar novamente .

    Julio Lustosa
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 151
    Registrado : 22/02/2011

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

    Mensagem  Julio Lustosa em 6/11/2014, 09: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.

    M2013
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Verificar se há registro e informar

    Mensagem  M2013 em 6/11/2014, 11: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

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

      Data/hora atual: 3/12/2016, 14:42