LOOP EM GRID COM BUG.
                    Salve!
Estou com um problema com uma grid, que esta duplicando o numero de linhas.
Por exemplo, eu tenho 4 registros no SQL, o loop está criando 8 linhas para a grid ao invés de 4....
Pensei que fosse alguma linha errada, então usei aquele marcador que deixa a linha vermelha(não sei o nome) para verificar o problema em tempo de execução.. Para minha surpresa, isso não acontece quando eu coloco o marcador...
Esté é o evento:
--------------------------------------------------------------------------------------------------------------------------
Private Sub cboCliente_LostFocus()
Dim rsTable As ADODB.Recordset
Set rsTable = New ADODB.Recordset
Dim i As Integer
If cboCliente <> [Ô][Ô] Then
mskData = Format(vData, [Ô]dd/mm/yyyy[Ô])
rsTable.Open [Ô]SELECT * FROM Locado WHERE Cliente =[ô][Ô] & cboCliente & [Ô][ô][Ô], ADOconn, adOpenForwardOnly, adLockReadOnly
If Not rsTable.EOF Then
cboCliente.Clear
cboCliente = rsTable([Ô]Cliente[Ô])
cboAutorizado.Clear
cboAutorizado = rsTable([Ô]Autorizado[Ô])
cboTitulo.Clear
cboTitulo = [Ô][Ô]
mskDevolucao = rsTable([Ô]Devolução[Ô])
mskTotal = Format(rsTable([Ô]Valor[Ô]), [Ô]##,##0.00[Ô])
chkPago.Value = rsTable([Ô]Pago[Ô])
If chkPago.Value = 1 Then
chkPago.Enabled = False
End If
vTempID = rsTable([Ô]Locado ID[Ô])
rsTable.Close
    
[ô]grid
rsTable.Open [Ô]SELECT * FROM [Locado Dados] WHERE [Locado ID] =[Ô] & vTempID, ADOconn, adOpenForwardOnly, adLockReadOnly
i = 1
Do Until rsTable.EOF
GridTitulos.AddItem (Row)
GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
rsTable.MoveNext
i = i + 1
Loop
rsTable.Close
cboCliente.Enabled = False
cboAutorizado.Enabled = False
cboTitulo.Enabled = False
Else
MsgBox [Ô]Cliente inexistente.[Ô], vbCritical
End If
End If
----------------------------------------------------------------------------------------------------------------------
Alguém já teve este problema?
Alguma idéia?
                
            Estou com um problema com uma grid, que esta duplicando o numero de linhas.
Por exemplo, eu tenho 4 registros no SQL, o loop está criando 8 linhas para a grid ao invés de 4....
Pensei que fosse alguma linha errada, então usei aquele marcador que deixa a linha vermelha(não sei o nome) para verificar o problema em tempo de execução.. Para minha surpresa, isso não acontece quando eu coloco o marcador...

Esté é o evento:
--------------------------------------------------------------------------------------------------------------------------
Private Sub cboCliente_LostFocus()
Dim rsTable As ADODB.Recordset
Set rsTable = New ADODB.Recordset
Dim i As Integer
If cboCliente <> [Ô][Ô] Then
mskData = Format(vData, [Ô]dd/mm/yyyy[Ô])
rsTable.Open [Ô]SELECT * FROM Locado WHERE Cliente =[ô][Ô] & cboCliente & [Ô][ô][Ô], ADOconn, adOpenForwardOnly, adLockReadOnly
If Not rsTable.EOF Then
cboCliente.Clear
cboCliente = rsTable([Ô]Cliente[Ô])
cboAutorizado.Clear
cboAutorizado = rsTable([Ô]Autorizado[Ô])
cboTitulo.Clear
cboTitulo = [Ô][Ô]
mskDevolucao = rsTable([Ô]Devolução[Ô])
mskTotal = Format(rsTable([Ô]Valor[Ô]), [Ô]##,##0.00[Ô])
chkPago.Value = rsTable([Ô]Pago[Ô])
If chkPago.Value = 1 Then
chkPago.Enabled = False
End If
vTempID = rsTable([Ô]Locado ID[Ô])
rsTable.Close
[ô]grid
rsTable.Open [Ô]SELECT * FROM [Locado Dados] WHERE [Locado ID] =[Ô] & vTempID, ADOconn, adOpenForwardOnly, adLockReadOnly
i = 1
Do Until rsTable.EOF
GridTitulos.AddItem (Row)
GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
rsTable.MoveNext
i = i + 1
Loop
rsTable.Close
cboCliente.Enabled = False
cboAutorizado.Enabled = False
cboTitulo.Enabled = False
Else
MsgBox [Ô]Cliente inexistente.[Ô], vbCritical
End If
End If
----------------------------------------------------------------------------------------------------------------------
Alguém já teve este problema?
Alguma idéia?
                    O nome do marcador vermelho é BREAKPOINT.
E, em caso de erros que não acontecem quando você coloca um breakpoint, sugiro colocar um doevents no código.
            E, em caso de erros que não acontecem quando você coloca um breakpoint, sugiro colocar um doevents no código.
Private Sub cboCliente_LostFocus()
    Dim rsTable                         As ADODB.Recordset
    Set rsTable = New ADODB.Recordset
    Dim i                               As Integer
    If cboCliente <> [Ô][Ô] Then
        mskData = Format(vData, [Ô]dd/mm/yyyy[Ô])
        rsTable.Open [Ô]SELECT * FROM Locado WHERE Cliente =[ô][Ô] & cboCliente & [Ô][ô][Ô], ADOconn, adOpenForwardOnly, adLockReadOnly
        If Not rsTable.EOF Then
            cboCliente.Clear
            cboCliente = rsTable([Ô]Cliente[Ô])
            cboAutorizado.Clear
            cboAutorizado = rsTable([Ô]Autorizado[Ô])
            cboTitulo.Clear
            cboTitulo = [Ô][Ô]
            mskDevolucao = rsTable([Ô]Devolução[Ô])
            mskTotal = Format(rsTable([Ô]Valor[Ô]), [Ô]##,##0.00[Ô])
            chkPago.Value = rsTable([Ô]Pago[Ô])
            If chkPago.Value = 1 Then
                chkPago.Enabled = False
            End If
            vTempID = rsTable([Ô]Locado ID[Ô])
            rsTable.Close
            [ô]grid
            rsTable.Open [Ô]SELECT * FROM [Locado Dados] WHERE [Locado ID] =[Ô] & vTempID, ADOconn, adOpenForwardOnly, adLockReadOnly
            i = 1
            Do Until rsTable.EOF
                GridTitulos.AddItem (Row)
                GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
                GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
                GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
                rsTable.MoveNext
                DoEvents
                i = i + 1
            Loop
            rsTable.Close
            cboCliente.Enabled = False
            cboAutorizado.Enabled = False
            cboTitulo.Enabled = False
        Else
            MsgBox [Ô]Cliente inexistente.[Ô], vbCritical
        End If
    End If
End Sub
                
                    KIKO_WIZZ, boa tarde.
Faça a seguinte alteração abaixo e veja se funciona:
Esta é a parte original da programação:
Agora mude para esta abaixo:
Veja se resolve seu problema, do contrario poste novamente, ok???
                
            Faça a seguinte alteração abaixo e veja se funciona:
Esta é a parte original da programação:
 [ô]grid
    rsTable.Open [Ô]SELECT * FROM [Locado Dados] WHERE [Locado ID] =[Ô] & vTempID, ADOconn, adOpenForwardOnly, adLockReadOnly
    i = 1
    Do Until rsTable.EOF
    GridTitulos.AddItem (Row)
    GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
    GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
    GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
    rsTable.MoveNext
    i = i + 1
    Loop
    rsTable.Close
Agora mude para esta abaixo:
[ô]grid
    rsTable.Open [Ô]SELECT * FROM [Locado Dados] WHERE [Locado ID] =[Ô] & vTempID, ADOconn, adOpenForwardOnly, adLockReadOnly
    i = 1
   GridTitulos.Rows = rsTable.RecordCount
    Do Until rsTable.EOF or (Grid.Row = GridTitulos.Rows -1 [ô]GridTitulos.Rows - 1 supondo que seu grid tenha um linha para cabecalho
          GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
          GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
          GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
          rsTable.MoveNext
          i = i + 1
    Loop
    rsTable.Close
Veja se resolve seu problema, do contrario poste novamente, ok???
                    Tentei dos 2 modos e não funcionou...
coloquei uma msgbox depois do loop, e notei q as linhas estão certas quando a msgbox abre, mas depois q fecho aparecem + 4 linhas em branco...
Do Until rsTable.EOF
GridTitulos.AddItem (Row)
GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
rsTable.MoveNext
i = i + 1
Loop
msgbox [Ô]Stop[Ô]
rsTable.Close
....não faz sentido...
                
            coloquei uma msgbox depois do loop, e notei q as linhas estão certas quando a msgbox abre, mas depois q fecho aparecem + 4 linhas em branco...

Do Until rsTable.EOF
GridTitulos.AddItem (Row)
GridTitulos.TextMatrix(i, 0) = rsTable([Ô]TÃtulo[Ô])
GridTitulos.TextMatrix(i, 1) = rsTable([Ô]Valor[Ô])
GridTitulos.TextMatrix(i, 2) = rsTable([Ô]Devolução[Ô])
rsTable.MoveNext
i = i + 1
Loop
msgbox [Ô]Stop[Ô]
rsTable.Close
....não faz sentido...
                
                    Eu não uso a .AddItem (Row), uso assim:
              
[ô]grid
    rsTable.Open [Ô]SELECT * FROM Locado Dados WHERE Locado ID =[Ô] & vTempID, ADOconn, adOpenForwardOnly, adLockReadOnly
    i = 1
    Do Until rsTable.EOF
    GridTitulos.Rows = i + 1
    GridTitulos.TextMatrix(i, 0) = rsTable!TÃtulo
    GridTitulos.TextMatrix(i, 1) = rsTable!Valor
    GridTitulos.TextMatrix(i, 2) = rsTable!Devolução
    rsTable.MoveNext
    i = i + 1
    Loop
    rsTable.Close
 
                
                    Tente usar o loop da seguinte maneira
Do While Not rsTable.EOF
[ô]GridTitulos.Rows = i + 1
GridTitulos.AddItem [Ô] [Ô], 1
GridTitulos.TextMatrix(i, 0) = rsTable!TÃtulo
GridTitulos.TextMatrix(i, 1) = rsTable!Valor
GridTitulos.TextMatrix(i, 2) = rsTable!Devolução
rsTable.MoveNext
[ô]i = i + 1
Loop
                
            Do While Not rsTable.EOF
[ô]GridTitulos.Rows = i + 1
GridTitulos.AddItem [Ô] [Ô], 1
GridTitulos.TextMatrix(i, 0) = rsTable!TÃtulo
GridTitulos.TextMatrix(i, 1) = rsTable!Valor
GridTitulos.TextMatrix(i, 2) = rsTable!Devolução
rsTable.MoveNext
[ô]i = i + 1
Loop
                    nenhum dos dois deu certo... acho que o problema não é na grid.... [S94]
                
            
                    Descobri o que aconteceu...
Eu tenho duas combos com este procedimento no lost focus, e quando estava setando enabled = false na combo cboAutorizado, estava sendo forçado um lost focus também...
Obrigado pela ajuda
                
            Eu tenho duas combos com este procedimento no lost focus, e quando estava setando enabled = false na combo cboAutorizado, estava sendo forçado um lost focus também...
Obrigado pela ajuda
                
                        Tópico encerrado , respostas não são mais permitidas