ORDENAR DADOS NO COMBOBOX

IRENKO 16/03/2011 14:13:32
#368133
Minha rotina para carregar o ComboBox:

Private Sub CarregaComboPeriodo()
Set RsComboPeriodo = New ADODB.Recordset
If RsComboPeriodo.State = 1 Then RsComboPeriodo.Close
If ChkComboPeriodo.Value = True Then
Sql = [Ô]Select Distinct Right(Mes,4) AS Ano FROM Dados[Ô]
Else
Sql = [Ô]Select Distinct Mes FROM Dados[Ô]
End If
Set RsComboPeriodo = ConexaoCartao.Execute(Sql)

With RsComboPeriodo
If Not .BOF And Not .EOF Then
.MoveFirst
Me.ComboPeriodo.Clear
For i = 1 To .RecordCount
If ChkComboPeriodo.Value = True Then
[ô]Me.ComboPeriodo.AddItem Right(!Ano, 4)
Me.ComboPeriodo.AddItem !Ano
.MoveNext
Else
Me.ComboPeriodo.AddItem UCase(!Mes)
.MoveNext
End If
Next
End If
.Close
Set RsComboPeriodo = Nothing
End With
End Sub

Considerando o carregamento apos o ELSE, fica assim:

ABRIL/2009
DEZEMBRO/2008
FEVEREIRO/2009
JANEIRO/2009

EXISTE MANEIRA DE CARREGAR PERSONALIZADO, OU SEJA:

DEZEMBRO/2008
JANEIRO/2009
FEVEREIRO/2009
ABRIL/2009

SALIENTO Q O CAMPO MES é TEXTO.

GRATO
KERPLUNK 16/03/2011 14:54:09
#368142
If ChkComboPeriodo.Value = True Then
Sql = [Ô]Select Distinct Right(Mes,4) AS Ano FROM Dados Order By Mes, Ano[Ô]
Else
Sql = [Ô]Select Distinct Mes FROM Dados Order By Mes, Ano[Ô]
End If
IRENKO 16/03/2011 15:17:25
#368145
KERPLUNK, VOU EXPLICAR MELHOR. NA TABELA EXISTE O CAMPO MES ONDE EU GRAVO O TEXTO, EX.:

DEZEMBRO/2008

NÃO EXISTE UM CAMPO ANO, AQUI EU FAÇO A PESQUISA:

Else
Sql = [Ô]Select Distinct Mes FROM Dados[Ô]

E CARREGA O COMBO:

ABRIL/2009
DEZEMBRO/2008
FEVEREIRO/2009
JANEIRO/2009

ORDENADO ALFABETICAMENTE, A PERGUNTA é: SERIA POSSIVEL ORDENAR ESSE COMBO BASEANDO-SE NO TEXTO DEPOIS DA (/)? FICANDO:

DEZEMBRO/2008
JANEIRO/2009
FEVEREIRO/2009
ABRIL/2009


KERPLUNK 16/03/2011 15:22:25
#368146
Não. Vc vai ter que incluir um campo contendo o número do mês para fazer a ordenação corretamente.
Mas se vc não tem o campo com o ano, o que [Ô]Me.ComboPeriodo.AddItem !Ano[Ô] faz??
IRENKO 16/03/2011 15:37:01
#368149
Citação:

Mas se vc não tem o campo com o ano, o que [Ô]Me.ComboPeriodo.AddItem !Ano[Ô] faz??



AQUI:
If ChkComboPeriodo.Value = True Then
Sql = [Ô]Select Distinct Right(Mes,4) AS Ano FROM Dados[Ô]

NO SELECT ESTOU PEGANDO PARTE DO TEXTO, OU SEJA, DEZEMBRO/2008, PEGO SOMENTE O 2008 (ANO) é O APELIDO DE (MES).

SERA Q NINGUEM TEM UMA GABIARRA PRA RESOLVER ESSE PROBLEMA?
KERPLUNK 16/03/2011 15:50:16
#368151
Bom, eu acho que fazer uma gambi pra isso seria mais difícil e passível de erros do que simplesmente inserir um campo com a data aí...
Até teria uma mais simples se o mês(ainda que num campo texto) estivesse numérico, daria pra fazer um cast de alguma maneira, mas do jeito que tá vai ficar difícil
MARCELO.TREZE 17/03/2011 11:19:08
#368257
irenko porque vc não melhora isso colocando ano em um combo e mes em outro

IRENKO 17/03/2011 16:10:04
#368299
Amigos, parecia impossivel mas consegui resolver. Primeiro criei uma nova tabela com um campo com todos os meses e um campo com os respectivos numeros de 1 a 12, seguindo a sugestão do KERPLUNK e principalmente LVFIOROT. Testei a sugestão do LVFIOROT, porem repetia os meses e usando o Distinct o mesmo entrava em conflito com o Order By, ai fiz dessa forma:

Sql = [Ô]SELECT Dados.[Mes],Periodo.[Meses],Periodo.[Numero] FROM (Dados INNER JOIN Periodo ON LEFT(Dados.[Mes], LEN(Dados.[Mes])-5) = Periodo.[Meses]) GROUP BY Dados.Mes,Periodo.Meses,Periodo.Numero ORDER BY Right(Dados.[Mes],4) + [Ô][Ô]/[Ô][Ô] + Periodo.[Numero];[Ô]

substistui o Distinct pelo Group By e........ Na Mosca!!

Evidentimente graças ao colega LVFIOROT.

Obrigado a todos.



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