Postada em 07/11/2013 09:45 hs
Preciso de uma dica para fazer a seguinte consulta:
pelo menos a lógica para listar os codigos dos funcionario, sendo que após mudar o codigo do funcionario o programa some as horas daquele funcionario, mai ou menos assim:
Em um gridview preciso listar asssim:
COD FUNC. DATA ENTRADA DATA SAIDA DESCONTO TOTAL DIA
101101-9 25/09/2013 08:30:00 25/09/2013 18:00:00 02:00:00 07:30:00 101101-9 26/09/2013 08:30:00 26/09/2013 18:00:00 02:00:00 07:30:00 TOTAL 15:00:00
102102-8 25/09/2013 08:30:00 25/09/2013 18:00:00 02:00:00 07:30:00 102102-8 26/09/2013 08:30:00 26/09/2013 18:00:00 02:00:00 07:30:00 TOTAL 15:00:00
E ASSIM POR DIANTE......
Desde já agradeço a atenção.
Henrique
ABAIXO ESTÁ O CÓDIGO PARA LISTAR UM ÚNICO FUNCIONÁRIO: E ESTÁ FUNCIONANDO BELEZA. agora preciso para listar todos de uma vez só.
Imports Microsoft.Office.Interop Imports System.Threading.Thread Imports System.Globalization Public Class Pesquisa Dim aidtra(1) As Integer Dim anrpm(1) As String Dim adte(1) As DateTime Dim adts(1) As DateTime Dim aservico(1) As String Dim adesconto(1) As String Dim atotalhoras(1) As string Dim pegatotal As String Dim vnomepega As String Private Sub Pesquisa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load dgvTrabalho.AlternatingRowsDefaultCellStyle.BackColor = Color.LightYellow dgvTrabalho.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter dgvTrabalho.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter dgvTrabalho.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter dgvTrabalho.Columns(3).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter dgvTrabalho.Columns(4).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter dgvTrabalho.Columns(5).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter PopulaCombo() ' Sortmode = nosortable End Sub Private Sub PopulaCombo() Dim cs As String = My.Settings.PontoConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "SELECT NRPM from Servidores order by NRPM" Dim vleitor As OleDb.OleDbDataReader vleitor = selcom.ExecuteReader() Dim c As Integer = 0 cmbNPM.Items.Clear() Do While vleitor.Read c = c + 1 ReDim Preserve anrpm(c) anrpm(c) = vleitor("NRPM") cmbNPM.Items.Add(anrpm(c)) Loop cmbNPM.Text = "Escolha..." conect.Close() Catch ex As Exception MessageBox.Show("Erro de carregamento do combobox!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Private Sub btnProcessa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcessa.Click Dim cs As String = My.Settings.PontoConnectionString Dim conect As New OleDb.OleDbConnection Dim NPOLICIA As String NPOLICIA = cmbNPM.Text conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect If CDate(dtpi.Text) > CDate(dtpf.Text) Then MessageBox.Show("A data inicial não pode ser maior que a final.", "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) dtpi.Focus() Exit Sub End If '----------------------------------------------------------------------- selcom.CommandText = "SELECT NRPM from Servidores Where NRPM = '" & cmbNPM.Text & "'" Dim vexiste As String = selcom.ExecuteScalar If Not vexiste = cmbNPM.Text Then MessageBox.Show("ERRO. Servidor não está cadastrado no sistema.", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return End If '------------------------------------------------------------------------ selcom.CommandText = "SELECT NOME from Servidores Where NRPM = '" & cmbNPM.Text & "'" Dim vnome As String = selcom.ExecuteScalar selcom.CommandText = "SELECT PGRAD from Servidores Where NRPM = '" & cmbNPM.Text & "'" Dim vgrad As String = selcom.ExecuteScalar selcom.CommandText = "SELECT NRPM from Servidores Where NRPM = '" & cmbNPM.Text & "'" Dim vnrpm As String = selcom.ExecuteScalar lblNRPM.Text = vnrpm lblNome.Text = vnome lblPgrad.Text = vgrad vnomepega = lblNome.Text '------------------------------------------------------------------------ selcom.CommandText = "select * from Horas where DATA_ENTRADA>= #" + dtpi.Value.ToString("MM/dd/yyyy 00:00:00") + "# AND DATA_SAIDA <= #" + dtpf.Value.ToString("MM/dd/yyyy 23:59:59") + "# AND NRPM = '" & NPOLICIA & "' order by DATA_ENTRADA" Dim vleitor As OleDb.OleDbDataReader vleitor = selcom.ExecuteReader() Dim c As Integer = 0 dgvTrabalho.Rows.Clear() Do While vleitor.Read c = c + 1 ReDim Preserve anrpm(c) ReDim Preserve aidtra(c) ReDim Preserve adte(c) ReDim Preserve adts(c) ReDim Preserve aservico(c) ReDim Preserve adesconto(c) ReDim Preserve atotalhoras(c) anrpm(c) = vleitor("NRPM") aidtra(c) = vleitor("ID") adte(c) = vleitor("DATA_ENTRADA") adts(c) = vleitor("DATA_SAIDA") aservico(c) = vleitor("SERVICO") adesconto(c) = vleitor("DESCONTO") atotalhoras(c) = vleitor("TOTAL_HORAS") dgvTrabalho.Rows.Add(anrpm(c), adte(c), adts(c), aservico(c), adesconto(c), atotalhoras(c)) Loop calcula_hora() dgvTrabalho.Rows.Add("Total de Horas:") dgvTrabalho.Rows(c).Cells(5).Value = pegatotal ToolStripStatusLabel1.Text = "Total de registros retornados na pesquisa: " & dgvTrabalho.RowCount - 1 conect.Close() Catch ex As Exception MessageBox.Show("Erro na execução da pesquisa!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try 'Dim datetime1 As String = "2010/11/16 160:00:00" 'Dim datetime2 As String = "2010/11/16 180:02:00" 'Dim diferenca As TimeSpan = Convert.ToDateTime(datetime2) - Convert.ToDateTime(datetime1) 'MessageBox.Show(diferenca.ToString()) End Sub Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click Me.Close() End Sub Private Sub btnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcel.Click If (dgvTrabalho.RowCount = 0) Then MessageBox.Show("Nenhum dado para exportar para o Excel", "Controle de Horas Trabalhadas", MessageBoxButtons.OK, MessageBoxIcon.Information) Else ExportToExcel(Me.dgvTrabalho, xlsOption.xlsOpen) End If End Sub Enum xlsOption xlsSaveAs xlsOpen End Enum ''' ''' Exporta a informação de uma DataGridView para o Microsoft Excel ''' ''' Nome da DataGridView ''' SaveAs ou Open ''' Nome completo do ficheiro Public Sub ExportToExcel(ByVal dgvName As DataGridView, ByVal [option] As xlsOption, Optional ByVal fileName As String = "") Dim objExcelApp As New Excel.Application() Dim objExcelBook As Excel.Workbook Dim objExcelSheet As Excel.Worksheet
Try
' Se foi seleccionada a opção xlsSaveAs e não foi indicado ficheiro If [option] = xlsOption.xlsSaveAs And fileName = String.Empty Then MessageBox.Show("É necessário indicar um nome para o ficheiro") Exit Sub End If
' Altera o tipo/localização para Inglês. Existe incompatibilidade ' entre algumas versões de Excel vs Sistema Operativo Dim oldCI As CultureInfo = CurrentThread.CurrentCulture CurrentThread.CurrentCulture = New CultureInfo("en-US")
' Adiciona um workbook e activa a worksheet actual objExcelBook = objExcelApp.Workbooks.Add objExcelSheet = CType(objExcelBook.Worksheets(1), Excel.Worksheet)
' Ciclo nos cabeçalhos para escrever os títulos a bold/negrito Dim dgvColumnIndex As Int16 = 1 For Each col As DataGridViewColumn In dgvName.Columns objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True dgvColumnIndex += 1 Next
' Ciclo nas linhas/células Dim dgvRowIndex As Integer = 2
For Each row As DataGridViewRow In dgvName.Rows
Dim dgvCellIndex As Integer = 1
For Each cell As DataGridViewCell In row.Cells objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value dgvCellIndex += 1 Next
dgvRowIndex += 1
Next
' Ajusta o largura das colunas automaticamente objExcelSheet.Columns.AutoFit()
' Caso a opção seja gravar (xlsSaveAs) grava o ficheiro e fecha ' o Workbook/Excel. Caso contrário (xlsOpen) abre o Excel If [option] = xlsOption.xlsSaveAs Then objExcelBook.SaveAs(fileName) objExcelBook.Close()
|