SUBTRACAO DE DATAS - COM FAZER ESSE LOOP?
possuo o seguinte codigo:
ele serve para subtrair o INICIO e o TERMINO e mostrar a quantidade de tempo entre as duas horas no campo RESULTADO.
SOMENTE PARA EXIBIÇÃO NO FLEXGRID
O meu problema é que tenho 10 registros e ele mostra em todos os 10 registros o mesmo RESULTADO.
como faço esse loop para ele calcular de um por um?
Private Sub Mostrar_Grid1()
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]Select * From ETAPA_PARTICIPANTES WHERE COD_ETAPA = [Ô] & txtCodProva.Text & [Ô] ORDER BY NOME[Ô]
Set Rs = BD.OpenRecordset(SQL)
Dim var_INICIO As Date
Dim var_TERMINO As Date
Dim var_RESULTADO As Date
var_INICIO = Rs.Fields!INICIO
var_TERMINO = Rs.Fields!TERMINO
var_RESULTADO = var_INICIO - var_TERMINO
FormatarGrid1
End Sub
ele serve para subtrair o INICIO e o TERMINO e mostrar a quantidade de tempo entre as duas horas no campo RESULTADO.
SOMENTE PARA EXIBIÇÃO NO FLEXGRID
O meu problema é que tenho 10 registros e ele mostra em todos os 10 registros o mesmo RESULTADO.
como faço esse loop para ele calcular de um por um?
Como você postou o código do método FORMATARGRID1, talvez você precisará alterar o mesmo.
Private Sub Mostrar_Grid1()
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]Select * From ETAPA_PARTICIPANTES WHERE COD_ETAPA = [Ô] & txtCodProva.Text & [Ô] ORDER BY NOME[Ô]
Set rs = BD.OpenRecordset(SQL)
Dim var_INICIO As Date
Dim var_TERMINO As Date
Dim var_RESULTADO As Date
[ô]
Do While Not rs.EOF
var_INICIO = rs.Fields!INICIO
var_TERMINO = rs.Fields!TERMINO
var_RESULTADO = var_INICIO - var_TERMINO
FormatarGrid1
rs.movenext
Loop
[ô]
End Sub
Como é a função FORMATARGRID1 ?
é provável que você esteja efetuando o LOOP dentro dela e a solução do ASHKATCHUP vai AUMENTAR o número de ocorrências.
Verifique se a sua função coloca o valor no GRID e altere o valor de var_INICIO, TERMINO e RESULTADO dentro do loop (que é a solução apresentada acima).
é provável que você esteja efetuando o LOOP dentro dela e a solução do ASHKATCHUP vai AUMENTAR o número de ocorrências.
Verifique se a sua função coloca o valor no GRID e altere o valor de var_INICIO, TERMINO e RESULTADO dentro do loop (que é a solução apresentada acima).
deu o erro:
Não há registro atual
ai quando debugo ele seleciona:
olha o código da função FORMATARGRID1
Não há registro atual
ai quando debugo ele seleciona:
rs.movenext
olha o código da função FORMATARGRID1
Private Sub FormatarGrid1()
With Grid1
.Clear
.Cols = 8
.Rows = 2
.ColWidth(0) = 0
.ColWidth(1) = 700
.ColWidth(2) = 700
.ColWidth(3) = 700
.ColWidth(4) = 2500
.ColWidth(5) = 1000
.ColWidth(6) = 1000
.ColWidth(7) = 1200
.TextMatrix(0, 1) = [Ô]COD[Ô]
.TextMatrix(0, 2) = [Ô]COD_ETAPA[Ô]
.TextMatrix(0, 3) = [Ô]COD_MOTOQUEIRO[Ô]
.TextMatrix(0, 4) = [Ô]NOME[Ô]
.TextMatrix(0, 5) = [Ô]INICIO[Ô]
.TextMatrix(0, 6) = [Ô]TERMINO[Ô]
.TextMatrix(0, 7) = [Ô]RESULTADO[Ô]
[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X
[ô]centralizar o titulo
Dim f As Integer
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f
Do Until Rs.EOF
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 7: .CellBackColor = &HC0FFFF
Next
.Redraw = False
[ô]ALINHAMENTO
[ô].ColAlignment(2) = 1
.Redraw = True
If Not IsNull(Rs!CODIGO) Then .TextMatrix(.Rows - 1, 1) = Rs!CODIGO
If Not IsNull(Rs!COD_ETAPA) Then .TextMatrix(.Rows - 1, 2) = Rs!COD_ETAPA
If Not IsNull(Rs!COD_MOTOQUEIRO) Then .TextMatrix(.Rows - 1, 3) = Rs!COD_MOTOQUEIRO
If Not IsNull(Rs!NOME) Then .TextMatrix(.Rows - 1, 4) = Rs!NOME
If Not IsNull(Rs!INICIO) Then .TextMatrix(.Rows - 1, 5) = Rs!INICIO
If Not IsNull(Rs!TERMINO) Then .TextMatrix(.Rows - 1, 6) = Rs!TERMINO
If Not IsNull(var_RESULTADO) Then .TextMatrix(.Rows - 1, 7) = var_RESULTADO
Rs.MoveNext
.Rows = .Rows + 1
Loop
.Rows = .Rows - 1
End With
End Sub
Cara, o teu problema é lógica de programação....
Dentro desse laço de repetição
Você tem que fazer o cálculo da variável a cada volta
Ficando:
Dentro desse laço de repetição
Do Until Rs.EOF
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 7: .CellBackColor = &HC0FFFF
Next
.Redraw = False
[ô]ALINHAMENTO
[ô].ColAlignment(2) = 1
.Redraw = True
If Not IsNull(Rs!CODIGO) Then .TextMatrix(.Rows - 1, 1) = Rs!CODIGO
If Not IsNull(Rs!COD_ETAPA) Then .TextMatrix(.Rows - 1, 2) = Rs!COD_ETAPA
If Not IsNull(Rs!COD_MOTOQUEIRO) Then .TextMatrix(.Rows - 1, 3) = Rs!COD_MOTOQUEIRO
If Not IsNull(Rs!NOME) Then .TextMatrix(.Rows - 1, 4) = Rs!NOME
If Not IsNull(Rs!INICIO) Then .TextMatrix(.Rows - 1, 5) = Rs!INICIO
If Not IsNull(Rs!TERMINO) Then .TextMatrix(.Rows - 1, 6) = Rs!TERMINO
If Not IsNull(var_RESULTADO) Then .TextMatrix(.Rows - 1, 7) = var_RESULTADO
Rs.MoveNext
.Rows = .Rows + 1
Loop
Você tem que fazer o cálculo da variável a cada volta
var_INICIO = Rs.Fields!INICIO
var_TERMINO = Rs.Fields!TERMINO
var_RESULTADO = var_INICIO - var_TERMINO
Ficando:
Do Until Rs.EOF
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 7: .CellBackColor = &HC0FFFF
Next
.Redraw = False
[ô]ALINHAMENTO
[ô].ColAlignment(2) = 1
.Redraw = True
var_INICIO = Rs.Fields!INICIO
var_TERMINO = Rs.Fields!TERMINO
var_RESULTADO = var_INICIO - var_TERMINO
If Not IsNull(Rs!CODIGO) Then .TextMatrix(.Rows - 1, 1) = Rs!CODIGO
If Not IsNull(Rs!COD_ETAPA) Then .TextMatrix(.Rows - 1, 2) = Rs!COD_ETAPA
If Not IsNull(Rs!COD_MOTOQUEIRO) Then .TextMatrix(.Rows - 1, 3) = Rs!COD_MOTOQUEIRO
If Not IsNull(Rs!NOME) Then .TextMatrix(.Rows - 1, 4) = Rs!NOME
If Not IsNull(Rs!INICIO) Then .TextMatrix(.Rows - 1, 5) = Rs!INICIO
If Not IsNull(Rs!TERMINO) Then .TextMatrix(.Rows - 1, 6) = Rs!TERMINO
If Not IsNull(var_RESULTADO) Then .TextMatrix(.Rows - 1, 7) = var_RESULTADO
Rs.MoveNext
.Rows = .Rows + 1
Loop
Mas volte a função MOSTRAR_GRID1 para a forma que você estava usando.
Tópico encerrado , respostas não são mais permitidas