CALCULAR PERIODO
Pessoal, preciso de ajuda para montar uma função conforme abaixo:
PerÃodos:
Diário
Semanal
Quinzenal
Mensal
Bimestral
Trimestral
Semestral
Anual
Bom na tabela (Materiais) tenho cadastrado todos os materiais utilizados pelos funcionarios, os mesmo são identificados por um codigo.
Em uma segunda tabela (Dados), tenho a baixa por funcionario desses materiais com a ultima data de requisição.
A dúvida é a seguinte, preciso montar uma função para fazer o calculo e mostrar que um ou outro funcionario precisa requisitar um tipo de material baseando-se na ultima requisição efetuada desse material e tambem no espaço de tempo citado acima (PerÃodo). Pergunto, como identificar os perÃodos na tabela e como fazer esse calculo?
PerÃodos:
Diário
Semanal
Quinzenal
Mensal
Bimestral
Trimestral
Semestral
Anual
Bom na tabela (Materiais) tenho cadastrado todos os materiais utilizados pelos funcionarios, os mesmo são identificados por um codigo.
Em uma segunda tabela (Dados), tenho a baixa por funcionario desses materiais com a ultima data de requisição.
A dúvida é a seguinte, preciso montar uma função para fazer o calculo e mostrar que um ou outro funcionario precisa requisitar um tipo de material baseando-se na ultima requisição efetuada desse material e tambem no espaço de tempo citado acima (PerÃodo). Pergunto, como identificar os perÃodos na tabela e como fazer esse calculo?
Poste a tabela (com os campos necessários) com os dados [Ô]fictÃcios[Ô] para que possamos ajudá-lo.
Qual é o banco de dados? Se for o SQL Server você pode usar o comando DateDiff para calcular a diferença de tempo entre a data da última requisição e a data como parâmetro.
O VB6 também tem o mesmo comando (DateDiff).
O VB6 também tem o mesmo comando (DateDiff).
IRENKO sabe o que ficaria mais prático
você criar um campo DataProxRequisição
ficando mais ou menos assim
Codigo, Periodo, dataReq, dataProxReq
porque isso? Assim ficaria mais fácil de se fazer uma consulta comparando a data atual com a data da próxima requisição.
e para salvar tambem seria algo simples
ex:
bom acima um exemplo básico de como se salavar a data da requisição e a data para proxima requisição
veja bem o periodo deve ser tratado como inteiro baseados nos dias do periodo
ex:
semanal = 7
quinzenal = 15
mensal = 30
Bimestral = 60
....
anual = 360
e assim vai
desta forma acredito que será mais fácil do que ficar efetuando contas na query
você criar um campo DataProxRequisição
ficando mais ou menos assim
Codigo, Periodo, dataReq, dataProxReq
porque isso? Assim ficaria mais fácil de se fazer uma consulta comparando a data atual com a data da próxima requisição.
e para salvar tambem seria algo simples
ex:
SQL = ÃNSERT INTO tabela (codigo, Preiodo, dataReq, dataProxReq) VALUES ([ô][Ô]& txtCod.Text & [Ô][ô],[ô][Ô] & txtperiodo & [Ô][ô],[ô][Ô] & txtdataReq & [Ô][ô],[ô][Ô] & DateAdd([Ô]D[Ô], Periodo,txtdataReq) & [Ô][ô][Ô])
bom acima um exemplo básico de como se salavar a data da requisição e a data para proxima requisição
veja bem o periodo deve ser tratado como inteiro baseados nos dias do periodo
ex:
semanal = 7
quinzenal = 15
mensal = 30
Bimestral = 60
....
anual = 360
e assim vai
desta forma acredito que será mais fácil do que ficar efetuando contas na query
Blz Marcelo! Tecla segue a estrutura das duas tabelas.
Tô numa dificuldade tremenda para montar essa consulta, veja bem:
Private Sub Form_Load()
Verifica_Conexao
GridNome.SelectionMode = flexSelectionByRow
GridNome.FocusRect = flexFocusNone
Call CabecalhodoGridNomes
Call PreencheGridNomes
Call CabecalhodoGrid
Call PreencheGridEPI
End Sub
Primeiro populo o GridNome com a sub (PreencheGridNomes) e o Grid com a sub (PreencheGridEP), como segue:
Private Sub PreencheGridNomes()
GridNome.Redraw = False
GridNome.Rows = 1
Dim Row As Integer
Dim i
Set Dados = New ADODB.Recordset
If Dados.State = 1 Then Dados.Close
With Dados
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
Dim mSql As String
mSql = [Ô]select [Titulo],Numero from Dados Where Status= [ô]ATIVO[ô] Order by [Titulo][Ô]
.Source = mSql
.ActiveConnection = ConexaoEPI
.Open
If .BOF = True And .EOF = True Then Exit Sub
GridNome.Rows = .RecordCount + 1
Do Until .EOF = True
Row = Row + 1
GridNome.Col = 0
GridNome.Row = Row
GridNome.TextMatrix(Row, 0) = !Titulo
GridNome.TextMatrix(Row, 1) = !Numero
.MoveNext
Loop
End With
GridNome.Redraw = True
GridNome.Row = 1
GridNome.Row = GridNome.FixedRows
GridNome.TopRow = GridNome.FixedRows
GridNome.Row = GridNome.TopRow
GridNome.Col = 0
GridNome.ColSel = GridNome.Cols - 1
[ô]Grid_Click
[ô]GridEmpregado.SetFocus
End Sub
Private Sub PreencheGridEPI()
[ô]GridDados.Clear
Grid.Redraw = False
Grid.Rows = 1
Dim Row As Integer
Dim i
Set Dados = New ADODB.Recordset
If Dados.State = 1 Then Dados.Close
With Dados
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
Dim mSql As String
mSql = [Ô]SELECT Descricao,Codigo FROM Materiais Order By Descricao[Ô]
.Source = mSql
.ActiveConnection = ConexaoEPI
.Open
If .RecordCount = 0 Then
Grid.Rows = 1
Else
If .BOF = True And .EOF = True Then Exit Sub
Grid.Rows = .RecordCount + 1
[ô]Row = 0
Do Until .EOF = True
Row = Row + 1
Grid.Col = 0
Grid.Row = Row
Grid.TextMatrix(Row, 1) = !Descricao
.MoveNext
Loop
End If
End With
End Sub
Agora com o evento abaixo estou tentando preencher a coluna 2 do segundo Grid de nome (Grid).
Private Sub GridNome_Click()
Dim Linha As String
GridNome.Row = GridNome.RowSel
GridNome.ColSel = GridNome.Cols - 1
Linha = GridNome.Row
Criterio_Nome = GridNome.TextMatrix(Linha, 0)
Criterio_Chapa = GridNome.TextMatrix(Linha, 1)
PreencheGridDatas
End Sub
Private Sub PreencheGridDatas()
Dim Row As Integer
Dim i
Set Dados = New ADODB.Recordset
If Dados.State = 1 Then Dados.Close
With Dados
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
Dim mSql As String
mSql = [Ô]SELECT Materiais.Descricao,Materiais.Codigo,Baixa.Nome,Baixa.Codigo,Baixa.Material,Baixa.Data2 FROM Materiais INNER JOIN Baixa ON Baixa.Cod = Materiais.Codigo WHERE Baixa.Nome = [ô][Ô] & Criterio_Nome & [Ô][ô][Ô]
.Source = mSql
.ActiveConnection = ConexaoEPI
.Open
If .RecordCount = 0 Then
Grid.Rows = 1
Else
If .BOF = True And .EOF = True Then Exit Sub
Grid.Rows = .RecordCount + 1
[ô]Row = 0
Do Until .EOF = True
Row = Row + 1
Grid.Col = 0
Grid.Row = Row
Grid.TextMatrix(Row, 2) = Format(!Data2, [Ô]dd/mm/yyyy[Ô])
.MoveNext
Loop
End If
End With
End Sub
Tá acontecendo o seguinte, os dados carregados na coluna 1 do Grid some ao acionar a sub PreencheGridDatas, esses dados tem que ficar fixos nessa coluna.
A consulta montada não esta funcionando de acordo pois eu quero mostrar na coluna 2 do Grid a maior Data para o material correspondente a coluna 1 do Grid, essa consulta é feita em duas tabelas (Materiais e Baixa) o campo para comparação é o de nome (Codigo). Alguem pode dar uma força?
Private Sub Form_Load()
Verifica_Conexao
GridNome.SelectionMode = flexSelectionByRow
GridNome.FocusRect = flexFocusNone
Call CabecalhodoGridNomes
Call PreencheGridNomes
Call CabecalhodoGrid
Call PreencheGridEPI
End Sub
Primeiro populo o GridNome com a sub (PreencheGridNomes) e o Grid com a sub (PreencheGridEP), como segue:
Private Sub PreencheGridNomes()
GridNome.Redraw = False
GridNome.Rows = 1
Dim Row As Integer
Dim i
Set Dados = New ADODB.Recordset
If Dados.State = 1 Then Dados.Close
With Dados
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
Dim mSql As String
mSql = [Ô]select [Titulo],Numero from Dados Where Status= [ô]ATIVO[ô] Order by [Titulo][Ô]
.Source = mSql
.ActiveConnection = ConexaoEPI
.Open
If .BOF = True And .EOF = True Then Exit Sub
GridNome.Rows = .RecordCount + 1
Do Until .EOF = True
Row = Row + 1
GridNome.Col = 0
GridNome.Row = Row
GridNome.TextMatrix(Row, 0) = !Titulo
GridNome.TextMatrix(Row, 1) = !Numero
.MoveNext
Loop
End With
GridNome.Redraw = True
GridNome.Row = 1
GridNome.Row = GridNome.FixedRows
GridNome.TopRow = GridNome.FixedRows
GridNome.Row = GridNome.TopRow
GridNome.Col = 0
GridNome.ColSel = GridNome.Cols - 1
[ô]Grid_Click
[ô]GridEmpregado.SetFocus
End Sub
Private Sub PreencheGridEPI()
[ô]GridDados.Clear
Grid.Redraw = False
Grid.Rows = 1
Dim Row As Integer
Dim i
Set Dados = New ADODB.Recordset
If Dados.State = 1 Then Dados.Close
With Dados
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
Dim mSql As String
mSql = [Ô]SELECT Descricao,Codigo FROM Materiais Order By Descricao[Ô]
.Source = mSql
.ActiveConnection = ConexaoEPI
.Open
If .RecordCount = 0 Then
Grid.Rows = 1
Else
If .BOF = True And .EOF = True Then Exit Sub
Grid.Rows = .RecordCount + 1
[ô]Row = 0
Do Until .EOF = True
Row = Row + 1
Grid.Col = 0
Grid.Row = Row
Grid.TextMatrix(Row, 1) = !Descricao
.MoveNext
Loop
End If
End With
End Sub
Agora com o evento abaixo estou tentando preencher a coluna 2 do segundo Grid de nome (Grid).
Private Sub GridNome_Click()
Dim Linha As String
GridNome.Row = GridNome.RowSel
GridNome.ColSel = GridNome.Cols - 1
Linha = GridNome.Row
Criterio_Nome = GridNome.TextMatrix(Linha, 0)
Criterio_Chapa = GridNome.TextMatrix(Linha, 1)
PreencheGridDatas
End Sub
Private Sub PreencheGridDatas()
Dim Row As Integer
Dim i
Set Dados = New ADODB.Recordset
If Dados.State = 1 Then Dados.Close
With Dados
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
Dim mSql As String
mSql = [Ô]SELECT Materiais.Descricao,Materiais.Codigo,Baixa.Nome,Baixa.Codigo,Baixa.Material,Baixa.Data2 FROM Materiais INNER JOIN Baixa ON Baixa.Cod = Materiais.Codigo WHERE Baixa.Nome = [ô][Ô] & Criterio_Nome & [Ô][ô][Ô]
.Source = mSql
.ActiveConnection = ConexaoEPI
.Open
If .RecordCount = 0 Then
Grid.Rows = 1
Else
If .BOF = True And .EOF = True Then Exit Sub
Grid.Rows = .RecordCount + 1
[ô]Row = 0
Do Until .EOF = True
Row = Row + 1
Grid.Col = 0
Grid.Row = Row
Grid.TextMatrix(Row, 2) = Format(!Data2, [Ô]dd/mm/yyyy[Ô])
.MoveNext
Loop
End If
End With
End Sub
Tá acontecendo o seguinte, os dados carregados na coluna 1 do Grid some ao acionar a sub PreencheGridDatas, esses dados tem que ficar fixos nessa coluna.
A consulta montada não esta funcionando de acordo pois eu quero mostrar na coluna 2 do Grid a maior Data para o material correspondente a coluna 1 do Grid, essa consulta é feita em duas tabelas (Materiais e Baixa) o campo para comparação é o de nome (Codigo). Alguem pode dar uma força?
Ai pessoal, criei um exemplo para demomstrar aas minhas dificuldades, veja bem:
no segundo Grid coluna 01 tenho que garregar e sempre manter os dados do campo (Descricao) da tabela (Materiais), no evento Click do primeiro Grid eu teria que carregar na coluna 02 do segundo Grid (Data Ultima Requisição) a maior data para os materiais constantes na tabela Baixa relacionados pelo codigo. Alquem poderia dar uma ideia para montar essa query?
no segundo Grid coluna 01 tenho que garregar e sempre manter os dados do campo (Descricao) da tabela (Materiais), no evento Click do primeiro Grid eu teria que carregar na coluna 02 do segundo Grid (Data Ultima Requisição) a maior data para os materiais constantes na tabela Baixa relacionados pelo codigo. Alquem poderia dar uma ideia para montar essa query?
Você não mandou a tabela de dados.
Opa, foi mal peguei o banco errado. Segue o certo.
olha como veio faltando o campo dados no banco o primeiro grid não carregou mas veja como ficou a maneira feita por mim, pra ver se é isto que deseja
as modificações foram feitas na sub PreencheGridIPI, veja[ô]como ficou e diga se é mais ou menos isso
as modificações foram feitas na sub PreencheGridIPI, veja[ô]como ficou e diga se é mais ou menos isso
Marcelo é praticamente isso o pretendido, agora veja com o banco que postei e coloque o PreencheGridEPI no evento click do primeiro grid, dara erro.
Tópico encerrado , respostas não são mais permitidas