SUBTRACAO DE DATAS - COM FAZER ESSE LOOP?

WEBIER 11/01/2010 11:49:05
#331559
possuo o seguinte codigo:
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?
ASHKATCHUP 11/01/2010 11:52:54
#331560
Resposta escolhida
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

EDERMIR 11/01/2010 11:58:47
#331562
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).
WEBIER 11/01/2010 12:03:19
#331563
deu o erro:
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
ASHKATCHUP 11/01/2010 12:08:37
#331564
Cara, o teu problema é lógica de programação....

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
EDERMIR 11/01/2010 12:22:19
#331568
Mas volte a função MOSTRAR_GRID1 para a forma que você estava usando.
Tópico encerrado , respostas não são mais permitidas