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