MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Erro em JOIN

    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 25/07/2017

    [Resolvido]Erro em JOIN Empty [Resolvido]Erro em JOIN

    Mensagem  alantb em 27/2/2019, 11:54

    Olá pessoal, tenho a seguinte query (Access2016)que estava usando para emissão de relatório e que estava funcionando:

    "SELECT Matricula, Nome, desCargo,dtClasse,desClasse, Sum(TotalPontosAno) as Pontos
    FROM ((((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa)
    LEFT JOIN TbCargo ON TbContrato.CodCargo=TbCargo.CodCargo)
    LEFT JOIN TbClasse ON TbContrato.CodClasse=TbClasse.CodClasse)
    LEFT JOIN TbFormulario ON TbContrato.Matricula=TbFormulario.MatriculaFunc)
    LEFT JOIN TbFormularioDetalhe ON TbFormulario.CodFormulario=TbFormularioDetalhe.CodFormulario
    WHERE " & strFiltro & " GROUP BY Matricula,Nome,desCargo,desClasse,dtClasse ORDER BY Sum(TotalPontosAno) Desc;"

    Só que as pessoas para quem fiz o sistema pediram alterações em alguns layouts, controles, tabelas etc. E para finalizar essas modificações e continuar emitindo os relatórios, foram excluidas as tabelas tbFormulario e tbFormularioDetalhe e substituidas por uma unica tabela:tbPontos. Sendo assim necessito remover o trecho:

    LEFT JOIN TbFormulario ON TbContrato.Matricula=TbFormulario.MatriculaFunc)
    LEFT JOIN TbFormularioDetalhe ON TbFormulario.CodFormulario=TbFormularioDetalhe.CodFormulario

    E substituir por algo como:

    LEFT JOIN TbPontos ON TbContrato.Matricula =TbPontos.MatriculaFunc

    No total ficaria assim:

    "SELECT Matricula, Nome, desCargo,dtClasse,desClasse, Sum(TotalPontosAno) as Pontos
    FROM ((((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa)
    LEFT JOIN TbCargo ON TbContrato.CodCargo=TbCargo.CodCargo)
    LEFT JOIN TbClasse ON TbContrato.CodClasse=TbClasse.CodClasse)
    LEFT JOIN TbPontos ON TbContrato.Matricula =TbPontos.MatriculaFunc
    WHERE " & strFiltro & " GROUP BY Matricula,Nome,desCargo,desClasse,dtClasse ORDER BY Sum(TotalPontosAno) Desc;"

    Só que fiz essa alteração e fica dando erro de sintaxe JOIN ou coisas desse tipo. Como ajustar essa query???

    ALAN

    avatar
    alantb
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 25/07/2017

    [Resolvido]Erro em JOIN Empty Re: [Resolvido]Erro em JOIN

    Mensagem  alantb em 27/2/2019, 13:15

    Nossa, a solução era mais óbvia do que eu imaginava. Estava desde ontem tentando consertar isso. Ficou assim :

    Onde tem:

    FROM ((((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa)

    Bastou tirar um dos parenteses que estava abrindo, ficou assim:

    FROM (((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa)


    Para complementar, para o filtro por datas funcionar, no geral ficou assim:

    Dim strFiltro As String


    If IsNull(Me.ComboClasse) Then

    strFiltro = "[desClasse] Like ""*""" ' desClasse, campo da tabela que indica se o funcionario é classe A,B,C,D ou E

    Else

    strFiltro = "[desClasse] = '" & Me.ComboClasse & "'"

    End If

    If Len("" & Me.txtDe) > 0 Then strFiltro = strFiltro & " and Periodo >=#" & Me.txtDe & "#" ' Periodo é o campo de Datas na tabela
    If Len("" & Me.txtAte) > 0 Then strFiltro = strFiltro & " And Periodo <=#" & Me.txtAte & "#"

    DoCmd.OpenReport "RelClassificacao", acViewPreview, , , , "SELECT MatriculaFunc, Nome, desCargo,dtClasse,desClasse, Sum(TotalPontosAno) as Pontos FROM (((TbContrato LEFT JOIN TbPessoa ON TbContrato.CodPessoa=TbPessoa.CodPessoa)LEFT JOIN TbCargo ON TbContrato.CodCargo=TbCargo.CodCargo)LEFT JOIN TbClasse ON TbContrato.CodClasse=TbClasse.CodClasse)LEFT JOIN TbPontos ON TbContrato.Matricula =TbPontos.MatriculaFunc WHERE " & strFiltro & " GROUP BY MatriculaFunc,Nome,desCargo,desClasse,dtClasse ORDER BY Sum(TotalPontosAno) Desc;"

    Mesmo assim obrigado pela atenção de todos.Até mais!!!!

    ALAN



      Data/hora atual: 25/10/2020, 07:56