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]Loop dentro de um SQL utilizando o mesmo RecordSet

    avatar
    fbmonteiro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 13/12/2011

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  fbmonteiro 13/12/2011, 19:58

    Boa tarde amigos foristas,

    Primeiramente gostaria de parabenizá-los pelo excelente fórum e o excelente conteúdo e também pela alegria de ver a cooperação mútua de nossos irmãos portugueses conosco e vice-versa.

    Vamos à minha dúvida. Eu possuo uma pasta de trabalho Excel na qual existe um quadro onde devo atualizar valores que estão separados em períodos mensais buscando dados de um BD SQL Server através do ADODB.

    Estou tentando fazer uma consulta SQL aninhando a parte referente ao período mensal. No primeiro loop eu consigo o resultado, mas no segundo já recebo a seguinte mensagem: "Operação não permitida quando o objeto está em aberto". E quando faço "Close" e/ou "Nothing" no RecordSet recebo esta outra mensagem: "A conexão não pode ser usada para realizar esta operação. Ela está fechada ou é inválida neste contexto."

    Abaixo segue o código no qual expliquei acima:


    Código:

        'Select principal

        sql = "select" _
            & "    sum(Apu.Valor) as 'Valor'" _
            & "    from guiarecebida gr" _
            & "      inner join baixabancaria bb on bb.idbaixabancaria = gr.idbaixabancaria" _
            & "      inner join guiarecolhimento g on g.numguia = gr.nossonumero and g.numparcela = gr.numparcela" _
            & "      inner join lancamento l on l.idguiarecolhimento = g.idguiarecolhimento" _
            & "      inner join tipolancamento tl on tl.idtipolancamento = l.idtipolancamento" _
            & "      left join (" _
            & "        select distinct sum(lanc.valor*tlanc.sinal) as 'Valor', lanc.idlancamento," _
            & "          case when lanc.historico like '% RANFS%' then 'RANFS'" _
            & "            else tlanc.descricao end as 'Tipo'" _
            & "        from lancamento lanc" _
            & "          inner join tipolancamento tlanc on lanc.IdTipoLancamento = tlanc.IdTipoLancamento" _
            & "            group by lanc.idlancamento, case when lanc.historico like '% RANFS%' then 'RANFS' else tlanc.descricao end" _
            & "      ) Apu on Apu.idlancamento = l.IdLancamento" _
            & "    where gr.status = 's' and gr.codmovimento=6 and gr.dtcredito between " _

        'Laço para percorrer e preencher de resultados mensais.

        For Each mes In Range("B9:M11") 'Quadro de meses
            dataInicial = ano.Value & Format(cont, "00") & "01"
            dataFinal = ano.Value & Format(cont, "00") & "31"

            sql = sql & "'" & dataInicial & "'" & "and" & _
            "'" & dataFinal & "'"  'A parte variável da SELECT

            If cont = 12 Then
                cont = 1
            End If
            cont = cont + 1

            rst.Open sql, cn, adUseClient 'O erro ocorre aqui!
       
            mes.Value = rst!Valor
           
            Set rst = Nothing
            Set cn = Nothing

           
        Next mes
       
        rst.Close
        cn.Close


    Estou sem idéia do que fazer, pois não tenho experiência com o VBA, fico agradecido se alguém puder me ajudar.

    []'s
    Fábio

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  Alexandre Neves 13/12/2011, 20:15

    Boa noite, Fábio, e bem-vindo ao fórum

    A instrução SQL é utilizada em base dados Access?
    avatar
    fbmonteiro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 13/12/2011

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  fbmonteiro 14/12/2011, 10:23

    Bom dia Alexandre,

    Os dados deverão ser extraídos de uma base de dados Microsoft SQL Server.

    Obrigado!
    avatar
    fbmonteiro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 13/12/2011

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  fbmonteiro 15/12/2011, 10:31

    Bom dia pessoal,

    Alguém mais tem alguma idéia de como ajudar-me nesta situação?

    Agradeço a boa vontade.
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  JPaulo 15/12/2011, 10:39

    Esse SQL você corre onde ?

    No MySql ?
    No Excel ?


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Folder_announce_new Instruções SQL como utilizar...
    avatar
    fbmonteiro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 13/12/2011

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  fbmonteiro 15/12/2011, 10:53

    Bom dia JPaulo,

    Estou rodando esta instrução SQL dentro de uma aplicação VBA de uma planilha Excel.

    Obrigado!
    avatar
    fbmonteiro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 13/12/2011

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  fbmonteiro 15/12/2011, 12:19

    Opa pessoal,

    Consegui encontrar onde eu estava errando.

    Como eu percorria o laço limpava o Conector e o RecordSet mas não revalidava a conexão eu estava obtendo erro, primário por sinal.

    E também eu deveria incluir a instrução SQL dentro do laço, mesmo a parte fixa, pois estava concatenando valores à string do loop anterior. Ficou assim:

    Código:


        For Each mes In Range("B9:M11")
            cn.Provider = "SQLOLEDB"
            cn.Properties("Data Source").Value = "XXX.XXX.XXX.XXX"
            cn.Properties("Initial Catalog").Value = "BDX"
            cn.Properties("User ID").Value = "xxxxxxx"
            cn.Properties("Password").Value = "xxxxxxx"
            cn.Open
            sql = "select" _
            & "    sum(Apu.Valor) as 'Valor'" _
            & "    from guiarecebida gr" _
            & "      inner join baixabancaria bb on bb.idbaixabancaria = gr.idbaixabancaria" _
            & "      inner join guiarecolhimento g on g.numguia = gr.nossonumero and g.numparcela = gr.numparcela" _
            & "      inner join lancamento l on l.idguiarecolhimento = g.idguiarecolhimento" _
            & "      inner join tipolancamento tl on tl.idtipolancamento = l.idtipolancamento" _
            & "      left join (" _
            & "        select distinct sum(lanc.valor*tlanc.sinal) as 'Valor', lanc.idlancamento," _
            & "          case when lanc.historico like '% RANFS%' then 'RANFS'" _
            & "            else tlanc.descricao end as 'Tipo'" _
            & "        from lancamento lanc" _
            & "          inner join tipolancamento tlanc on lanc.IdTipoLancamento = tlanc.IdTipoLancamento" _
            & "            group by lanc.idlancamento, case when lanc.historico like '% RANFS%' then 'RANFS' else tlanc.descricao end" _
            & "      ) Apu on Apu.idlancamento = l.IdLancamento" _
            & "    where gr.status = 's' and gr.codmovimento=6 and gr.dtcredito between " _

       
            dataInicial = ano.Value & Format(cont, "00") & "01"
            dataFinal = ano.Value & Format(cont, "00") & "15"
            sql = sql & "'" & dataInicial & "'" & "and" & _
            "'" & dataFinal & "'"
            If cont = 12 Then
                cont = 1
            End If
            cont = cont + 1
            rst.Open sql, cn, adUseClient
       
            mes.Value = rst!Valor
           
            rst.Close
            cn.Close
            Set rst = Nothing
            Set cn = Nothing
            sql = ""
        Next mes


    Obrigado pela atenção!
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  JPaulo 15/12/2011, 12:42

    Obrigado pelo retorno o forum agradece.

    Como este não é um forum VBA Excel, apenas Ms Access, este tópico vai ser movido para a sala de Off-Topic.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Folder_announce_new Instruções SQL como utilizar...
    avatar
    fbmonteiro
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 13/12/2011

    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  fbmonteiro 15/12/2011, 12:45

    Ok, muito obrigado JPaulo.

    Conteúdo patrocinado


    [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet Empty Re: [Resolvido]Loop dentro de um SQL utilizando o mesmo RecordSet

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/4/2024, 07:30