Vídeo recomendado
https://youtu.be/diWPPPhW-9E

ListView carregando em ordem aleatória

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Anderson Rafael
Colaborador
Colaborador
Mensagens: 28
Registrado em: Seg Mai 14, 2018 11:09 am

ListView carregando em ordem aleatória

Mensagem por Anderson Rafael »

Alguem sabe me explicar pq somente neste listview esta se comportando de forma estranha, carregando os dados de forma incorreta, segue código

Código: Selecionar todos

Private Sub PopulaListBox(ByVal Data As String)
Application.ScreenUpdating = False
Dim var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var, var11, var12, var13, var14, var15, var16, var17, var18, var19, var20, _
varq, var21, var22, var23, var24, var25, var26, var27, var28, var29, var30, var31, var32, var33, var34, var35, var36, var37, var38, var39, _
var40, vara, varqa
    Dim myArray() As Variant
Set banco = PreecheRecordSet(Data)
 With Me.lstLista
 .ListItems.Clear
Dim i As Integer
For i = 0 To banco.RecordCount - 1
If Not IsNull(banco(0)) Then
.ListItems.Add 1, , banco(0)
.ListItems(1).ListSubItems.Add 1, , banco(1)
var1 = banco(2)
var2 = banco(3)
var3 = banco(4)
var4 = banco(5)
var5 = banco(6)
var6 = banco(7)
var7 = banco(8)
var8 = banco(9)
var9 = banco(10)
var10 = banco(11)
If var10 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4 & ", " & var5 & ", " & var6 & ", " & var7 & ", " & var8 & ", " & var9 & ", " & var10
ElseIf var9 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4 & ", " & var5 & ", " & var6 & ", " & var7 & ", " & var8 & ", " & var9
ElseIf var8 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4 & ", " & var5 & ", " & var6 & ", " & var7 & ", " & var8
ElseIf var7 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4 & ", " & var5 & ", " & var6 & ", " & var7
ElseIf var6 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4 & ", " & var5 & ", " & var6
ElseIf var5 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4 & ", " & var5
ElseIf var4 <> "" Then
var = var1 & ", " & var2 & ", " & var3 & ", " & var4
ElseIf var3 <> "" Then
var = var1 & ", " & var2 & ", " & var3
ElseIf var2 <> "" Then
var = var1 & ", " & var2
ElseIf var1 <> "" Then
var = var1
End If
If Not IsNull(banco(12)) Then var11 = banco(12)
If Not IsNull(banco(13)) Then var12 = banco(13) Else varq = var11
If Not IsNull(banco(14)) Then var13 = banco(14) Else varq = var11 & ", " & var12
If Not IsNull(banco(15)) Then var14 = banco(15) Else varq = var11 & ", " & var12 & ", " & var13
If Not IsNull(banco(16)) Then var15 = banco(16) Else varq = var11 & ", " & var12 & ", " & var13 & ", " & var14
If Not IsNull(banco(17)) Then var16 = banco(17) Else varq = var11 & ", " & var12 & ", " & var13 & ", " & var14 & ", " & var15
If Not IsNull(banco(18)) Then var17 = banco(18) Else varq = var11 & ", " & var12 & ", " & var13 & ", " & var14 & ", " & var15 & ", " & var16
If Not IsNull(banco(19)) Then var18 = banco(19) Else varq = var11 & ", " & var12 & ", " & var13 & ", " & var14 & ", " & var15 & ", " & var16 & ", " & var17
If Not IsNull(banco(20)) Then var19 = banco(20) Else varq = var11 & ", " & var12 & ", " & var13 & ", " & var14 & ", " & var15 & ", " & var16 & ", " & var17 & ", " & var18
If Not IsNull(banco(21)) Then var20 = banco(21) Else varq = var11 & ", " & var12 & ", " & var13 & ", " & var14 & ", " & var15 & ", " & var16 & ", " & var17 & ", " & var18 & ", " & var19
If Not IsNull(banco(21)) Then varq = var11 + var12 + var13 + var14 + var15 + var16 + var17 + var18 + var19 + var20
var21 = banco(43)
var22 = banco(44)
var23 = banco(45)
var24 = banco(46)
var25 = banco(47)
var26 = banco(48)
var27 = banco(49)
var28 = banco(50)
var29 = banco(51)
var30 = banco(52)
If var30 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24 & ", " & var25 & ", " & var26 & ", " & var27 & ", " & var28 & ", " & var29 & ", " & var30
ElseIf var29 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24 & ", " & var25 & ", " & var26 & ", " & var27 & ", " & var28 & ", " & var29
ElseIf var28 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24 & ", " & var25 & ", " & var26 & ", " & var27 & ", " & var28
ElseIf var27 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24 & ", " & var25 & ", " & var26 & ", " & var27
ElseIf var26 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24 & ", " & var25 & ", " & var26
ElseIf var25 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24 & ", " & var25
ElseIf var24 <> "" Then
vara = var21 & ", " & var22 & ", " & var23 & ", " & var24
ElseIf var23 <> "" Then
vara = var21 & ", " & var22 & ", " & var23
ElseIf var22 <> "" Then
vara = var21 & ", " & var22
ElseIf var21 <> "" Then
vara = var21
End If
If Not IsNull(banco(53)) Then var31 = banco(53)
If Not IsNull(banco(54)) Then var32 = banco(54) Else varqa = var31
If Not IsNull(banco(55)) Then var33 = banco(55) Else varqa = var31 & ", " & var32
If Not IsNull(banco(56)) Then var34 = banco(56) Else varqa = var31 & ", " & var32 & ", " & var33
If Not IsNull(banco(57)) Then var35 = banco(57) Else varqa = var31 & ", " & var32 & ", " & var33 & ", " & var34
If Not IsNull(banco(58)) Then var36 = banco(58) Else varqa = var31 & ", " & var32 & ", " & var33 & ", " & var34 & ", " & var35
If Not IsNull(banco(59)) Then var37 = banco(59) Else varqa = var31 & ", " & var32 & ", " & var33 & ", " & var34 & ", " & var35 & ", " & var36
If Not IsNull(banco(60)) Then var38 = banco(60) Else varqa = var31 & ", " & var32 & ", " & var33 & ", " & var34 & ", " & var35 & ", " & var36 & ", " & var37
If Not IsNull(banco(61)) Then var39 = banco(61) Else varqa = var31 & ", " & var32 & ", " & var33 & ", " & var34 & ", " & var35 & ", " & var36 & ", " & var37 & ", " & var38
If Not IsNull(banco(62)) Then var40 = banco(62) Else varqa = var31 & ", " & var32 & ", " & var33 & ", " & var34 & ", " & var35 & ", " & var36 & ", " & var37 & ", " & var38 & ", " & var39
If Not IsNull(banco(62)) Then varqa = var31 + var32 + var33 + var34 + var35 + var36 + var37 + var38 + var39 + var40
.ListItems(1).ListSubItems.Add 2, , var
.ListItems(1).ListSubItems.Add 3, , varq
.ListItems(1).ListSubItems.Add 4, , vara
.ListItems(1).ListSubItems.Add 5, , varqa
End If
banco.MoveNext
Next i
     'atualiza o label de mensagens
    If banco.RecordCount <= 0 Then
        lblMensagens.Caption = banco.RecordCount & " registros encontrados"
    Else
        lblMensagens.Caption = banco.RecordCount & " registros encontrados"
    End If
    Exit Sub
    Set banco = Nothing
    cx.Desconectar
End With
Application.ScreenUpdating = True
End Sub
Não acho que seja problema no listview realmente, pois o listview esta configurado do mesmo jeito que todos os outros que uso no meu formulario, e todos funcionam corretamente.
O que ocorre é que no caso na tabela do banco de dados do access existem 7 registros atualmente, numerados em ordem de cadastro do 1 ao 7, ao carregar pro listview ele esta carregando na seguinte ordem: 7, 4, 5, 6, 1, 2, 3. PORQUEEE????
Andei analisando o processo do código, ele esta puxando nessa ordem da tabela do banco de dados, por isso acho que nao seja problema no listview, mas alguma forma como ele esta puxando os dados do banco...


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: ListView carregando em ordem aleatória

Mensagem por Reinaldo »

Cara acho que ja vi essa sopa de letrinhas :lol: :mrgreen:
Como e a rotina/função -->PreecheRecordSet<-- (Set banco = PreecheRecordSet(Data))
Provavelmente e possivel acrescentar no sql um order by Id


Anderson Rafael
Colaborador
Colaborador
Mensagens: 28
Registrado em: Seg Mai 14, 2018 11:09 am

Re: ListView carregando em ordem aleatória

Mensagem por Anderson Rafael »

Eai Reinaldo,
kkkkkk já tive outros problemas nessa mesma parte
Cara, realmente acho que usar o "order by" vai ser o jeito, mas acho estranho ele carregar assim em "aleatória", digo entre aspas pq ele segue um padrao, carrega sempre na mesma ordem, mas nao na ordem certa, nao tem nem lógica. Inclusive no mesmo arquivo onde tenho outros formularios com listview puxando de outras tabelas do bd access, nao tenho o order by na funçao PreencheRecordSet e ele funciona normalmente, puxa os dados na ordem que estão no bd, sem segredos... Realmente acho que nao tem explicaçao :(


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: ListView carregando em ordem aleatória

Mensagem por Reinaldo »

Normalmente o "padrão" e a ordem de gravação no disco, bem como se houver "amarrações" com outras tabelas, podem influenciar.
Depende também do tipo de dado da chave principal, se for Texto(string) com números, vai trazer algo como :
1,10,2,3,30,4.....


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Anderson Rafael
Colaborador
Colaborador
Mensagens: 28
Registrado em: Seg Mai 14, 2018 11:09 am

Re: ListView carregando em ordem aleatória

Mensagem por Anderson Rafael »

Pois é, mas não tem nenhum "amarraçao" com outra tabela nessa rotina...
E o tipo de dados que uso é numero mesmo, os registros no bd estão numerados corretamente: 1 2 3 4 5 6 7 8...
Mas na hora de carregar eles pelo vba no excel ele carrega em uma ordem muito estranha, algo como: 7 8 4 5 6 1 2 3...
Mas enfim, resolvi com o "order by" como vc falou, inclusive muito obrigado pela dica!
Inclusive adicionei o "order by" nos outros listview's que estavam funcionando corretamente. É aquela velha história, "vai que, né". Assim pelo menos garante que sempre apareça certo.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder