CONSULTA ENTRE 2 TABELAS
Dim DA As New OleDb.OleDbDataAdapter([Ô]select EMPREGADO.MATRICULA, EMPREGADO.NOME, EMPREGADO.TURMA, EMPREGADO.HORARIO, SUM(APONTA.CALCULO2) AS APONTA.calculo2, from EMPREGADO, APONTA WHERE EMPREGADO.MATRICULA = APONTA.MATRICULA AND EMPREGADO.TURMA LIKE [ô][Ô] & TURMA & [Ô][ô] AND EMPREGADO.HORARIO LIKE [ô][Ô] & HORARIO & [Ô][ô] AND APONTA.DATA BETWEEN # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # And # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # GROUP BY EMPREGADO.MATRICULA, EMPREGADO.NOME, EMPREGADO.TURMA, EMPREGADO.HORARIO[Ô], conexao)
São 2 Tabelas EMPREGADO E APONTA. O que preciso é:
Tabela EMPREGADO (MATRICULA, NOME, TURMA, HORARIO)
Tabela APONTA(MATRICULA, CALCULO2)
A linha acima é um código para [Ô]pegar[Ô] as matriculas do banco EMPREGADO e buscar na tabela APONTA e somar o campo (calculo2). Está dando erro de SELECT
EMPREGADO com os campos (MATRICULA, NOME, TURMA, HORARIO)
APONTA com os campos (MATRICULA, CALCULO)
O que não estou conseguindo:
Preencher uma Listview com as seguintes informações consolidadas:
Matricula Nome Turma Horario Calculo(somatorio da tabela APONTA)
A minha dificuldade está na construção do SELECT
[ô]SE FOR PRA SOMAR A HORA DIRETO DA TABELA
Select Sum(DateDiff(n,horai, horaf)) / 60 As Horas_Soma,
Sum(DateDiff(n,horai, horaf)) % 60 As Minutos_Soma,
From #tabela -- caso passe de 24 horas
Fonte:http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/0dcaeaac-17d3-4ede-a962-0ac3abeb0be8/
Não conseguir encaixar as Where de turma, horario e data (dia requerido)... Usando apenas uma tabela eu consigo. O objetivo é mostrar os empregados, conforme filtros, que estão apontando as horas corretamente. Por isso utilizo a tabela de EMPREGADOS, pois nela estão todos. Minha saÃda é a listview... abaixo todo meu código que estou tentando fazer para melhor analise.
Dim DA As New OleDb.OleDbDataAdapter([Ô]Select E.Matricula,E.Nome,E.Turma,E.Horario,A.APONTA from EMPREGADO E RIGHT OUTER JOIN APONTA A on E.MATRICULA = A.MATRICULA GROUP BY E.MATRICULA, E.NOME, E.TURMA, E.HORARIO[Ô], conexao) [ô] ESTà FALTANDO OS FILTROS
Dim DS As New DataSet
DS.Clear()
DA.Fill(DS, [Ô]EMPREGADO[Ô])
ListView1.Items.Clear()
On Error Resume Next
For i = 0 To DS.Tables([Ô]EMPREGADO[Ô]).Rows.Count - 1
ListView1.Items.Add(DS.Tables([Ô]EMPREGADO[Ô]).Rows(i)([Ô]MATRICULA[Ô]))
ListView1.Items(i).SubItems.Add(DS.Tables([Ô]EMPREGADO[Ô]).Rows(i)([Ô]NOME[Ô]))
ListView1.Items(i).SubItems.Add(DS.Tables([Ô]EMPREGADO[Ô]).Rows(i)([Ô]TURMA[Ô]))
ListView1.Items(i).SubItems.Add(DS.Tables([Ô]EMPREGADO[Ô]).Rows(i)([Ô]HORARIO[Ô]))
ListView1.Items(i).SubItems.Add(DS.Tables([Ô]EMPREGADO[Ô]).Rows(i)([Ô]CALCULO2[Ô]))
NEXT
Dim DA As New OleDb.OleDbDataAdapter([Ô]Select E.Matricula,E.Nome,E.Turma,E.Horario,A.calculo2 from EMPREGADO E RIGHT JOIN APONTA A on E.MATRICULA = A.MATRICULA WHERE DATA BETWEEN # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # And # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # AND E.TURMA LIKE [ô][Ô] & TURMA & [Ô][ô] AND E.HORARIO LIKE [ô][Ô] & HORARIO & [Ô][ô][Ô], conexao)
Dim DA As New OleDb.OleDbDataAdapter([Ô]select SUM(A.CALCULO2) AS CALCULO2,E.Matricula,E.Nome,E.Turma,E.Horario FROM EMPREGADO E LEFT JOIN APONTA A on E.MATRICULA = A.MATRICULA WHERE DATA BETWEEN # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # And # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # AND E.TURMA LIKE [ô][Ô] & TURMA & [Ô][ô] AND E.HORARIO LIKE [ô][Ô] & HORARIO & [Ô][ô] GROUP BY E.MATRICULA, E.NOME, E.TURMA, E.HORARIO[Ô], conexao)
Citação::
Select E.Matricula,E.Nome,E.Turma,E.Horario,A.Aponta from EMPREGADOS E RIGHT OUTER JOIN APONTA A on E.MATRICULA=A.MATRICULA
[ô]SE FOR PRA SOMAR A HORA DIRETO DA TABELA
Select Sum(DateDiff(n,horai, horaf)) / 60 As Horas_Soma,
Sum(DateDiff(n,horai, horaf)) % 60 As Minutos_Soma,
From #tabela -- caso passe de 24 horas
Fonte:http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/0dcaeaac-17d3-4ede-a962-0ac3abeb0be8/
Mais um passo... consegui agrupar... agora só me resta aparecer os empregados que estão [Ô]nulos[Ô]... Talvez o erro está no select e não estou enxergando... alguem puder me ajudar
Dim DA As New OleDb.OleDbDataAdapter([Ô]select SUM(A.CALCULO2) AS CALCULO2,E.Matricula,E.Nome,E.Turma,E.Horario FROM EMPREGADO E LEFT JOIN APONTA A on E.MATRICULA = A.MATRICULA WHERE DATA BETWEEN # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # And # [Ô] & Format(CDate(Tinicio.Text), [Ô]MM/dd/yyyy[Ô]) & [Ô] # AND E.TURMA LIKE [ô][Ô] & TURMA & [Ô][ô] AND E.HORARIO LIKE [ô][Ô] & HORARIO & [Ô][ô] GROUP BY E.MATRICULA, E.NOME, E.TURMA, E.HORARIO[Ô], conexao)
Começe simplificando a query extraia somente o nome, matricula e soma das horas depois começe com os filtros.
Dúvidas:
1- Entre as datas INICIO e FIM existem colaboredores para esse filtro com valores [ô]NULOS[ô] ?
Por isso falei de tirar os filtros inicialmente.
2 - O cadastro de colabores matriculas estão corretos nas 2 tabelas, verifique espaços em ambos os lados.
Citação::
Bom eu costumo antes de executar as query testa-las diretamente no SQL para ver o resultado depois implemento no código.
Começe simplificando a query extraia somente o nome, matricula e soma das horas depois começe com os filtros.
Dúvidas:
1- Entre as datas INICIO e FIM existem colaboredores para esse filtro com valores [ô]NULOS[ô] ?
Por isso falei de tirar os filtros inicialmente.
2 - O cadastro de colabores matriculas estão corretos nas 2 tabelas, verifique espaços em ambos os lados.
Respostas
1 - Sim, nas datas de inicio e fim existem valores nulos dos empregados que não apontaram as horas ou turno de trabalho diferente.
2 - A tabela APONTA é montada com as informações da tabela EMPREGADO
OBS: São esses empregados com valores nulos que pretendo capturar, junto com os que possuem horas somadas para acompanhar a utilização do sistema. Com o select citado acima já estão aparecendo as matriculas, nomes e as horas somadas e agrupadas, só restando que apareça os empregados com valores nulos.
Citação::
Bom eu costumo antes de executar as query testa-las diretamente no SQL para ver o resultado depois implemento no código.
Começe simplificando a query extraia somente o nome, matricula e soma das horas depois começe com os filtros.
Dúvidas:
1- Entre as datas INICIO e FIM existem colaboredores para esse filtro com valores [ô]NULOS[ô] ?
Por isso falei de tirar os filtros inicialmente.
2 - O cadastro de colabores matriculas estão corretos nas 2 tabelas, verifique espaços em ambos os lados.
Com esse SELECT já tenho 90% encaminhado... só não estou conseguindo colocar o filtro da data
Dim DA As New OleDb.OleDbDataAdapter([Ô]select SUM(A.CALCULO2) AS CALCULO2,E.Matricula AS MATRICULA,E.Nome AS NOME,E.Turma AS TURMA,E.Horario AS HORARIO FROM APONTA A RIGHT JOIN EMPREGADO E on E.MATRICULA = A.MATRICULA WHERE E.TURMA LIKE [ô][Ô] & TURMA & [Ô][ô] AND E.HORARIO LIKE [ô][Ô] & HORARIO & [Ô][ô] GROUP BY E.MATRICULA, E.NOME, E.TURMA, E.HORARIO ORDER BY E.NOME [Ô], conexao)