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

    [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 Qui 06 Nov 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,
    avatar
    Julio Lustosa
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  Julio Lustosa em Qui 06 Nov 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

    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 Qui 06 Nov 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)

    avatar
    Julio Lustosa
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  Julio Lustosa em Qui 06 Nov 2014, 13: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 Qui 06 Nov 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

    .......................................................................................................
    avatar
    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  Noobezinho em Qui 06 Nov 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


    .................................................................................
    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 .
    avatar
    Julio Lustosa
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  Julio Lustosa em Qui 06 Nov 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.

    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 Qui 06 Nov 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

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

      Data/hora atual: Qui 19 Out 2017, 08:23