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


2 participantes

    [Resolvido]VBA com SQL completo que dá erro...

    MPS
    MPS
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 19/04/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty VBA com SQL completo que dá erro...

    Mensagem  MPS 2/11/2012, 00:09

    Caros Colegas, estou com erro de execução no Set rsmov...
    Dá a seguinte mensagem:
    "Erro de sintaxe (operador faltando) na expressão de consulta MesReferencia>04/06/2012 and Valor_entrada>0 GROUP BY CodSocio2"
    Quando excluo o Group e o Having o erro some!
    O que pode ser?

    Private Sub FECHAR_Click()
    Dim dbbanco, dbbanco2 As Database
    Dim rs As DAO.Recordset
    Dim rsmov As DAO.Recordset

    Do Until DCount("*", "socios", "ativo=" & -1) = 0
    Set dbbanco = CurrentDb()
    Set rs = dbbanco.OpenRecordset("SELECT * FROM [socios] WHERE ativo=" & -1)
    With rs
    .Edit
    !Ativo = 0
    .Update
    .Close
    End With
    Loop

    Set dbbanco2 = CurrentDb()
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia>" _
    & Date - 150 & "And Valor_entrada>" & 0 & "GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")

    rsmov.MoveLast
    rsmov.MoveFirst
    MsgBox "Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount, vbInformation, "Atenção"

    End Sub

    Agradeço desde já!
    MPS
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Cláudio Más 2/11/2012, 04:12

    Pode estar faltando um espaço antes de GROUP:

    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia>" _
    & Date - 150 & " And Valor_entrada > 0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")
    MPS
    MPS
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 19/04/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  MPS 2/11/2012, 10:39

    Cláudio, mandou muito novamente!
    Era a unica combinação que eu não havia tentado!! Obrigado!!!
    Não sei se devo abrir outro Tópico ou continuar neste...

    Foram apontados 143 no RecordCount, contudo quando uso a Consulta abaixo pelo Access consigo 101. O que pode estar errado?
    SELECT Movimentacao.CodSocio2
    FROM Movimentacao
    WHERE (((Movimentacao.MesReferencia)>Date()-150) AND ((Movimentacao.Valor_entrada)>0))
    GROUP BY Movimentacao.CodSocio2
    HAVING (((Movimentacao.CodSocio2) Is Not Null));

    Tentei listar os 143 na MsgBox abaixo mas não deu certo. Por que?
    MsgBox "Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount & rsmov!CodSocio2, vbInformation, "Atenção"

    Desde já bom feriado!
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Cláudio Más 2/11/2012, 13:20

    Você pode postar o código completo?

    Bom feriado
    MPS
    MPS
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 19/04/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  MPS 2/11/2012, 14:14

    Caro Cláudio, segue com a identificação dos 3 problemas encontrados:

    Dim dbbanco, dbbanco2 As Database
    Dim rs As DAO.Recordset
    Dim rsmov, rssoc As DAO.Recordset

    Do Until DCount("*", "socios", "ativo=" & -1) = 0
    Set dbbanco = CurrentDb()
    Set rs = dbbanco.OpenRecordset("SELECT * FROM [socios] WHERE ativo=" & -1)
    With rs
    .Edit
    !Ativo = 0
    .Update
    .Close
    End With
    Loop
    MsgBox DCount("*", "socios", "ativo=" & -1)

    Set dbbanco2 = CurrentDb()
    ===> Cláudio, aqui achamos 143, mas a Consulta do Access acha 101.
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia>" _
    & Date - 150 & "And Valor_entrada> 0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")

    rsmov.MoveLast
    rsmov.MoveFirst
    ===> Cláudio, aqui os 143 CodSocio2 deveriam ser listados, mas aparece 143 e o numero 2 que é o primeiro CodSocio2!!!
    MsgBox "RSMOV Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount & rsmov!CodSocio2, vbInformation, "Atenção"


    ===> Cláudio, aqui era para atualizar a Tabela Socios, mas so atualiza o primeiro.
    CurrentDb.Execute "UPDATE socios " _
    & "SET ativo = -1 " _
    & "WHERE codsocio = " & rsmov.CodSocio2 & ";"

    MsgBox "Novos Socios Ativos :" & DCount("*", "socios", "ativo=" & -1)


    End Sub
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Cláudio Más 2/11/2012, 14:55

    ===> Cláudio, aqui achamos 143, mas a Consulta do Access acha 101.
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia>" _
    & Date - 150 & "And Valor_entrada> 0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")
    Bom, não entendi o "aqui" ("aqui" está apenas criando o recordset), e também não dá pra ver a "Consulta do Access".

    ===> Cláudio, aqui os 143 CodSocio2 deveriam ser listados, mas aparece 143 e o numero 2 que é o primeiro CodSocio2!!!
    MsgBox "RSMOV Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount & rsmov!CodSocio2, vbInformation, "Atenção"
    Exatamente, o resultado é esse, de acordo com o comando. Qual resultado vc acha que deveria apresentar?

    ===> Cláudio, aqui era para atualizar a Tabela Socios, mas so atualiza o primeiro.
    CurrentDb.Execute "UPDATE socios " _
    & "SET ativo = -1 " _
    & "WHERE codsocio = " & rsmov.CodSocio2 & ";"
    Idem. Se só atualiza o primeiro, é porque os critérios (ativo = -1 e CodSocio2 = sei lá) trazem somente um registro (pelo visto, o primeiro).

    Deve ser o feriado, to meio preguiçoso hoje... rsrs
    Se puder enviar o arquivo, facilita com a solução.
    MPS
    MPS
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 19/04/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  MPS 2/11/2012, 15:47

    Cláudio, tá certo! Feriado é para descansar mesmo!!! rs
    Mas, de fato, expliquei mal!!
    Vou desenvolver melhor.

    1 - Como pode a Consulta do ACCESS abaixo apresentar 101 registros e a SQL no VBA apresentar 143? Não transcrevi corretamente para o VBA?
    Consulta:
    SELECT Movimentacao.CodSocio2
    FROM Movimentacao
    WHERE (((Movimentacao.MesReferencia)>Date()-150) AND ((Movimentacao.Valor_entrada)>0))
    GROUP BY Movimentacao.CodSocio2
    HAVING (((Movimentacao.CodSocio2) Is Not Null));
    SQL:
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia>" _
    & Date - 150 & "And Valor_entrada> 0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")

    2 - Como faço para que nesta MsgBox sejam elencados todos os 143 codsocio2 e não apenas o primeiro?
    MsgBox "RSMOV Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount & rsmov!CodSocio2, vbInformation, "Atenção"

    3 - Como faço para que todos os 143 codsocio da tabela Socios smilares ao codsocio2 do Rsmov sejam atualizados para -1 no campo Ativo com o comando Update abaixo, e não apenas o primeiro?
    CurrentDb.Execute "UPDATE socios " _
    & "SET ativo = -1 " _
    & "WHERE codsocio = " & rsmov.CodSocio2 & ";"

    Obrigado desde já!

    Parabéns a todos pelo 3 anos do nosso Forum!!!
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Cláudio Más 2/11/2012, 16:07

    1 - Desculpe, mas acho que só consigo verificar isso tendo o banco de dados;

    2 - Você quer listar 143 sócios em uma única MsgBox?? Talvez fique ilegível, mas você teria que fazer um loop pelo recordset para concatenar os CodSocio2 em uma variável, depois apresentaria essa variável no MsgBox:

    MsgBox "RSMOV Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount & varSocios, vbInformation, "Atenção"

    3 - Vê se é isso:

    CurrentDb.Execute "UPDATE socios " _
    & "SET ativo = -1 " _
    & "WHERE codsocio In (SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia > (Date - 150) And Valor_entrada > 0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null)"
    MPS
    MPS
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 19/04/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  MPS 2/11/2012, 18:35

    Cláudio, segue:

    1 - Consegui o mesmo resultado que a consulta, utilizando um campo diferente ao invés do Mesreferencia e ficou assim:
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE data > date() - 150" _
    & "And [Valor_entrada] >0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")

    2 - Não entendi como fazer o loop pelo recordset. Pode me dar mais detalhes, por favor!!

    3 - Show. Tua solução foi perfeita!

    Muito obrigado!
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Cláudio Más 2/11/2012, 19:15

    Código:
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE MesReferencia>" _
    & Date - 150 & "And Valor_entrada> 0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")

    rsmov.MoveLast
    rsmov.MoveFirst

    varSocios = rsmov!CodSocio2
    rsmov.MoveNext
    Do While Not rsmov.EOF
        varSocios = varSocios & " - " & rsmov!CodSocio2
        rsmov.MoveNext
    Loop

    MsgBox "RSMOV Eles são um total de:" & vbCrLf & vbCrLf & rsmov.RecordCount & varSocios , vbInformation, "Atenção"
    MPS
    MPS
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 19/04/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  MPS 2/11/2012, 21:39

    Cláudio, demais! Muito 10!!
    Parabéns!
    Obrigado!

    Agora uma coisa me intriga, o date sem () não funciona corretamente. Estou certo?
    Set rsmov = dbbanco2.OpenRecordset("SELECT CodSocio2 FROM [Movimentacao] WHERE data > date() - 150" _
    & "And [Valor_entrada] >0 GROUP BY CodSocio2 HAVING CodSocio2 Is Not Null")

    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Cláudio Más 3/11/2012, 12:50

    Você deve estar certo sim quanto ao Date(), se verificou isso durante seus testes.
    Valeu

    Conteúdo patrocinado


    [Resolvido]VBA com SQL completo que dá erro... Empty Re: [Resolvido]VBA com SQL completo que dá erro...

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 14:49