PROBLEMA COM UM LOOP

WEBIER 11/04/2011 09:02:05
#371024
Olá Pessoal,

Estou com um problema no meu form de pagamento de parcelas.

coloquei um flexgrid e duas imagens (ImgMarcada e imgDesmarcada)

a ideia seria quando carregar o grid, ele coloca na coluna 0 (zero) a imagem de um quadrado vazio (imgDesmarcada)
e quando eu clicar na linha da parcela ele troca para a imagem com um quadrado com visto (ImgMarcada)
conforme a imagem que postei ai emcima!

o codigo para trocar as imagens é esse:
Private Sub Grid_Parcelas_Click()
[ô]marcar a parcela
If Grid_Parcelas.Col <> 0 Then Exit Sub
If Grid_Parcelas.CellPicture = imgDesmarcada Then
Set Grid_Parcelas.CellPicture = ImgMarcada
Else
Set Grid_Parcelas.CellPicture = imgDesmarcada
End If
End Sub


Até aqui tudo bem....

Meu problema está num loop que fiz para alterar registros no BD dependendo da linha que estiver marcada (ImgMarcada)
olha o codigo ai:
Private Sub cmdQuitarTodas_Click()
Dim f As Integer
With Grid_Parcelas
For f = 1 To .Rows - 1
.Col = 0
.Row = f
If .CellPicture = ImgMarcada Then
execSQL [Ô]UPDATE PARCELAS SET STATUS = TRUE, VALOR_FINAL = [ô][Ô] & Format(.TextMatrix(.Rows - f, 9), [Ô]##,##0.00[Ô]) & [Ô][ô] , PAGAMENTO = #[Ô] & Format(Date, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, HORA = #[Ô] & Format(Now, [Ô]hh:mm[Ô]) & [Ô]#, JUROS = [ô][Ô] & Format(.TextMatrix(.Rows - f, 8), [Ô]##,##0.00[Ô]) & [Ô][ô], DIAS_ATRAZO = = [Ô] & .TextMatrix(.Rows - f, 7) & [Ô] WHERE COD_PEDIDO = [Ô] & .TextMatrix(.Rows - f, 3) & [Ô] AND NUMERO = [Ô] & .TextMatrix(.Rows - f, 4) & [Ô][Ô]
End If
Next f
End With
End Sub


a ideia seria ele pegar o registro que tivesse o COD_PEDIDO e NUMERO da linha que tivesse com a imagem marcada e alterasse o registro no BD:
WHERE COD_PEDIDO = [Ô] & .TextMatrix(.Rows - f, 3) & [Ô] AND NUMERO = [Ô] & .TextMatrix(.Rows - f, 4) & [Ô]

Mas acontece uma coisa doida

Ele não pega os registos marcados no grid, ele pega no grid de baixo para cima, mesmo estando desmarcado...
na figura que coloquei aqui no post, veja que as 2 primeiras linhas estão marcadas... se eu executar o codigo, ele vai pegar os ultimos 2 do grid...

outro exemplo
se eu marcar somente no grid a segunda e terceira linha e executar o comando... ele vai alterar no BD os registros referente a penultima e antepenultima linha do grid.

ou seja, ele sempre de baixo para cima... mesmo tando desmarcado.

Alguem pode me ajudar?
MARCELO.TREZE 11/04/2011 09:41:49
#371033
Resposta escolhida
eu acho que o problema está na query, faça esta alteração:

execSQL [Ô]UPDATE PARCELAS SET STATUS = TRUE, VALOR_FINAL = [ô][Ô] & Format(.TextMatrix(.Row, 9), [Ô]##,##0.00[Ô]) & [Ô][ô] , PAGAMENTO = #[Ô] & Format(Date, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, HORA = #[Ô] & Format(Now, [Ô]hh:mm[Ô]) & [Ô]#, JUROS = [ô][Ô] & Format(.TextMatrix(.Row, 8), [Ô]##,##0.00[Ô]) & [Ô][ô], DIAS_ATRAZO = = [Ô] & .TextMatrix(.Row, 7) & [Ô] WHERE COD_PEDIDO = [Ô] & .TextMatrix(.Row, 3) & [Ô] AND NUMERO = [Ô] & .TextMatrix(.Row, 4) & [Ô][Ô]


bom eu alterei apenas os TextMatrix, pois vc colocou em todos .Rows - f, onde F é uma variante crescente, então veja como ele estava pegando as linhas:

supondo que o laço esteja na linha 3 (F = 3)

.Rows= 7

F = 3

.Rows - F = 4


nmeio sem nexo não é?



WEBIER 11/04/2011 10:14:39
#371037
como sempre, MARCELO-TREZE é implacavel..

obrigado!
Tópico encerrado , respostas não são mais permitidas