MSFLEXGRID, LINHAS?

JOERBETH 01/05/2015 14:38:18
#446270
Pessoal bom dia!

Estou com um probleminha...

Uso a Msflexgrid pra carregar meus dados do bando FB, do jeito que está funciona, mais acredito que não seja a maneira correta;

uso essa função, que acredito que foi pega aqui, no entando, fiz algumas pequenas modificações para fazer o que eu quero; que na verdade o que eu quero, é simplesmente pegar meus dados do banco sem repetir, voces poderiam pensa, mais ai é só usar o distinct no select, por incrivel ue pareça não rola pra esses codigos, o banco assim, exemplo:

codigo | descricao | valortotal
1 | teste | 1.000,00
1 | teste2 | 1.000,00
2 | teste3 | 2.000,00
------------------------------------------------------

Eu quero carregar essas informações, mais sem repetir o codigo 1 por exemplo, o codigo é esse:
Public Function PreencheFlexGrid1(FlexGrid As Object, RS As Object) As Boolean
On Error GoTo ErrorHandler
If Not TypeOf FlexGrid Is MSFlexGrid Then Exit Function
If Not TypeOf RS Is ADODB.Recordset Then Exit Function
Dim i As Integer
Dim j As Integer
Dim v_Passa
Dim v_Passa2 As Boolean
Dim v_Passa3 As Boolean
v_Passa2 = True
v_Passa3 = True
FlexGrid.FixedRows = 1
FlexGrid.FixedCols = 0
If Not RS.EOF Then
FlexGrid.Rows = RS.RecordCount + 1
FlexGrid.Cols = RS.Fields.Count
For i = 0 To RS.Fields.Count - 1
FlexGrid.TextMatrix(0, i) = RS.Fields(i).Name [ô] define o cabeçalho do grid
Next
i = 1
Do While Not RS.EOF
For j = 0 To RS.Fields.Count - 1
If Not IsNull(RS.Fields(j).Value) Then
If v_Passa3 = True Then
If RS.Fields(j).Name = [Ô]CODIGO[Ô] And v_Passa2 = True Then
v_Passa2 = False
v_Passa = RS([Ô]CODIGO[Ô])
FlexGrid.TextMatrix(i, j) = RS.Fields(j).Value
ElseIf RS.Fields(j).Name = [Ô]VALORGERAL[Ô] Then
FlexGrid.TextMatrix(i, j) = Format(RS.Fields(j).Value, [Ô]#,##0.00;($#,##0.00)[Ô])
Else
FlexGrid.TextMatrix(i, j) = RS.Fields(j).Value
End If
Else
FlexGrid.TextMatrix(i, j) = [Ô][Ô]
End If
End If
Next
i = i + 1
RS.MoveNext
If Int(RS([Ô]CODIGO[Ô])) = Int(v_Passa) Then
v_Passa3 = False
Else
v_Passa3 = True
v_Passa2 = True
End If
Loop
End If
PreencheFlexGrid1 = True
ErrorHandler:
Exit Function
===============================================

No load do form:

MSFlexGrid1.Cols = 12
BD.CursorLocation = adUseClient
If RS_PEDIDOS.State = adStateOpen Then RS_PEDIDOS.Close
RS_PEDIDOS.Open [Ô]SELECT * FROM PEDIDOS[Ô], BD, adOpenKeyset, adLockOptimistic
If RS_PEDIDOS.EOF = True Then
Exit Sub
End If
RS_PEDIDOS.Requery
PreencheFlexGrid1 MSFlexGrid1, RS_PEDIDOS
MSFlexGrid1.TextMatrix(0, 1) = [Ô]Data[Ô]
MSFlexGrid1.TextMatrix(0, 2) = [Ô]Previsão[Ô]
MSFlexGrid1.TextMatrix(0, 3) = [Ô]Cliente[Ô]
MSFlexGrid1.TextMatrix(0, 4) = [Ô]Num. de[Ô]
MSFlexGrid1.TextMatrix(0, 5) = [Ô]Num. até[Ô]
MSFlexGrid1.TextMatrix(0, 10) = [Ô]Valor Geral[Ô]
MSFlexGrid1.TextMatrix(0, 11) = [Ô]Obs.:[Ô]
MSFlexGrid1.Rows = 1000
For v_Cont = 1 To MSFlexGrid1.Rows - 1
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 1) = [Ô][Ô] Then
MSFlexGrid1.RemoveItem (MSFlexGrid1.Row)
Else
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
End If
Next

Observem, que eu limito o tamando do grid em 1.000 linhas, e faço o for para remover as repetidas de acordo com o que a função encontrou, até funciona beleza, o problema são dois, eu não quero limitar em 1000 linhas, pois, o banco pode ter muito mais registros e a outra, é que, quando faço alteração, o sistema demora u pouco carregando as linhas e o usuário percebe isso porque o grid fica piscando e preenchendo as linhas?

Tem alguma forma de deixar mais rapido e sem esse aparente [Ô]desenho[Ô] de linhas?

Valeu

Joerbeth

JOERBETH 01/05/2015 14:40:40
#446271
Acabei de descobrir agora, que não tá legal não, quando eu faço alteração, ele está incluindo outro codigo no grid como se fosse registro novo..:(
JOERBETH 01/05/2015 14:44:19
#446272
coloquei um ORDER BY CODIGO e deu certo entre aspas, não repete ao menos, o problema realmente é aqui pessoal:

MSFlexGrid1.Rows = 1000
For v_Cont = 1 To MSFlexGrid1.Rows - 1
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 1) = [Ô][Ô] Then
MSFlexGrid1.RemoveItem (MSFlexGrid1.Row)
Else
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
End If
Next

não quero limitar o grid e consequentimente os registro do banco...

NILSONTRES 01/05/2015 16:15:04
#446273
Porque não rola o distinct ?
Tópico encerrado , respostas não são mais permitidas