CALCULAR PERIODO

IRENKO 07/01/2010 13:52:14
#331303
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?
TECLA 07/01/2010 14:04:13
#331305
Poste a tabela (com os campos necessários) com os dados [Ô]fictícios[Ô] para que possamos ajudá-lo.
NETMANIA 07/01/2010 14:29:40
#331310
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).
MARCELO.TREZE 07/01/2010 16:41:52
#331322
Resposta escolhida
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:

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

IRENKO 07/01/2010 17:10:06
#331327
Blz Marcelo! Tecla segue a estrutura das duas tabelas.
IRENKO 19/01/2010 17:00:27
#332332
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?
IRENKO 20/01/2010 13:24:40
#332399
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?
ASHKATCHUP 20/01/2010 13:46:23
#332403
Você não mandou a tabela de dados.
IRENKO 20/01/2010 13:56:50
#332404
Opa, foi mal peguei o banco errado. Segue o certo.
MARCELO.TREZE 20/01/2010 14:25:16
#332405
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

IRENKO 20/01/2010 14:50:18
#332409
Marcelo é praticamente isso o pretendido, agora veja com o banco que postei e coloque o PreencheGridEPI no evento click do primeiro grid, dara erro.
Página 1 de 3 [26 registro(s)]
Tópico encerrado , respostas não são mais permitidas