ROTINA PESQUISAR OCORRE ERRO AO ORDENAR POR CAMPO

MILTONSILVA94 02/09/2015 14:57:14
#450899
Na rotina pesquisar conforme está abaixo, ocorre erro se eu deixar como está:

Private Sub RotinaPesquisar()
Dim lsql As String
Dim lTBPerfis As Recordset
Dim lItem As ListItem

[ô]Rotina para fazer a pesquisa sem ter sido informado os parâmetros
lsql = [Ô]SELECT * FROM PERFIS [Ô]
lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô]

lvwLista.SetFocus

[ô]If para fazer a consulta pelos parâmetros informados na consulta
If Trim(cboDescricaoPerfil.Text) <> [Ô][Ô] Then
lsql = lsql & [Ô] WHERE descricao_perfil LIKE [ô][Ô] & Trim(cboDescricaoPerfil.Text & [Ô]*[ô][Ô])
End If

[ô]Depois de retornar os resultados do comando pesquisar, o cursor retorna para o listview
cboDescricaoPerfil.SetFocus

Set lTBPerfis = gBDSistemaIntegrado.OpenRecordset(lsql, dbOpenSnapshot)

If lTBPerfis.EOF Then
MsgBox [Ô]Nenhum perfil foi encontrado com os parâmetros informados![Ô], vbCritical

cboDescricaoPerfil.ListIndex = -1
lvwLista.ListItems.Clear
lblContador.Caption = [Ô][Ô]
cboDescricaoPerfil.SetFocus

Exit Sub
End If

End Sub

Sendo que se eu deixar desta forma ele aparece as opções no [ô]CBO[ô] e no [ô]Listview[ô] pela descrição do perfil, porém ao pesquisar ocorre o erro do anexo.
Conforme análise, o problema está na linha lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô] se eu apagar ele não vai ocorrer erro.
Porém, gostaria de ordenar no listview pela [ô]Descrição[ô] mesmo e não pelo [ô]ID[ô].
Procuro e não consigo localizar e alterar de maneira que fique da melhor forma. Alguém consegue me auxiliar?
TUNUSAT 02/09/2015 16:29:14
#450901
MILTONSILVA94,

Desculpe, não entendi...
... você colocou no código:
Citação:

[ô]Rotina deve ficar comentada, caso contrário ocorre erro ao pesquisar(mesmo assim os resultados irão aparecer pela ordem do ID)
[ô]lsql = lsql & [Ô] ORDER BY id_perfil ASC[Ô]



Mas escreveu que:

Citação:

Conforme análise, o problema está na linha lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô] se eu apagar ele não vai ocorrer erro.
Porém, gostaria de ordenar no listview pela [ô]Descrição[ô] mesmo e não pelo [ô]ID[ô].



Embora aparentemente as duas linhas estão corretas:
lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô]

[ô]lsql = lsql & [Ô] ORDER BY id_perfil ASC[Ô]


Mas adiantando ... tem certeza que os nomes dos campos são [Ô]descricao_perfil[Ô] e [Ô]id_perfil[Ô]?
Não dá para ver por aqui, porque você colocou tudo como [Ô]SELECT *[Ô].

Tente rodar esta query na base de dados:
SELECT descricao_perfil, id_perfil 
FROM PERFIS
ORDER BY descricao_perfil


[][ô]s,
Tunusat.
MILTONSILVA94 02/09/2015 16:49:41
#450903
TUNUSAT, realmente havia descrevido as informações de forma errado ali encima, editei lá agora, dê uma olhada.
TUNUSAT 02/09/2015 16:53:51
#450905
MILTONSILVA94,

Ficou legal.
Funfou o [Ô]ORDER BY[Ô]?

[][ô]s,
Tunusat.
MILTONSILVA94 02/09/2015 18:37:33
#450907
O pior que não deu certo, adiciono mais uma imagem para você ver onde me volta o erro. Olha só.
Inclusive na linha do ORDER BY tirei o espaço que tinha, testei também e não deu certo.
NICKOSOFT 02/09/2015 22:42:24
#450926
Resposta escolhida
Nao é por nada, mas nao deveria ser o select where e por ultimo o order?
Seguindo o codigo apos o order esta o where
OMAR2011 02/09/2015 23:37:45
#450927
Igual ao NICKOSOFT postou.

Private Sub RotinaPesquisar()
Dim lsql As String
Dim lTBPerfis As Recordset
Dim lItem As ListItem

[ô]Rotina para fazer a pesquisa sem ter sido informado os parâmetros
lsql = [Ô]SELECT * FROM PERFIS [Ô]
[ô] [txt-color=#e80000]lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô]
[/txt-color]
[ô]Você tem que tirar
lvwLista.SetFocus

[ô]If para fazer a consulta pelos parâmetros informados na consulta
If Trim(cboDescricaoPerfil.Text) <> [Ô][Ô] Then
lsql = lsql & [Ô] WHERE descricao_perfil LIKE [ô][Ô] & Trim(cboDescricaoPerfil.Text & [Ô]*[ô] [txt-color=#e80000]ORDER BY descricao_perfil ASC[/txt-color][Ô])
[ô] é aqui que tem de ficar.
End If

[ô]Depois de retornar os resultados do comando pesquisar, o cursor retorna para o listview
cboDescricaoPerfil.SetFocus

Set lTBPerfis = gBDSistemaIntegrado.OpenRecordset(lsql, dbOpenSnapshot)

If lTBPerfis.EOF Then
MsgBox [Ô]Nenhum perfil foi encontrado com os parâmetros informados![Ô], vbCritical

cboDescricaoPerfil.ListIndex = -1
lvwLista.ListItems.Clear
lblContador.Caption = [Ô][Ô]
cboDescricaoPerfil.SetFocus

Exit Sub
End If

End Sub
MILTONSILVA94 03/09/2015 11:39:11
#450948
O problema está justamente se eu deixo assim conforme abaixo, o mesmo faz a pesquisa corretamente lá no [ô]ComboBox[ô] cboDescricaoPerfil se eu selecionar alguma opção, porém no listview ele não traz por ordem alfabética os perfis

[ô]Rotina para fazer a pesquisa sem ter sido informado os parâmetros
lsql = [Ô]SELECT * FROM PERFIS [Ô]

[ô]If para fazer a consulta pelos parâmetros informados na consulta
If Trim(cboDescricaoPerfil.Text) <> [Ô][Ô] Then
lsql = lsql & [Ô] WHERE descricao_perfil LIKE [ô][Ô] & Trim(cboDescricaoPerfil.Text & [Ô]*[ô] ORDER BY descricao_perfil ASC[Ô])
End If

------------------------------------------------------------------------------------------------------------------------------
Agora se eu mudar e deixar conforme abaixo, ele me traz no listview os perfis por ordem alfabética, porém ao fazer a pesquisa com os dados informados no [ô]ComboBox[ô] cboDescricaoPerfil, me apresentando erro:

[ô]Rotina para fazer a pesquisa sem ter sido informado os parâmetros
lsql = [Ô]SELECT * FROM PERFIS [Ô]
lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô]

[ô]If para fazer a consulta pelos parâmetros informados na consulta
If Trim(cboDescricaoPerfil.Text) <> [Ô][Ô] Then
lsql = lsql & [Ô] WHERE descricao_perfil LIKE [ô][Ô] & Trim(cboDescricaoPerfil.Text & [Ô]*[ô] ORDER BY descricao_perfil ASC[Ô])
End If
NICKOSOFT 03/09/2015 13:10:46
#450955
mas veja o código....
se o cmbdescricao estiver diferente de vazio ele acrescenta o where fora de lugar a query....
se o cmb estiver vazio não acrescenta isso, então a query estaria correta, sem where fora de lugar

  
[ô]Rotina para fazer a pesquisa sem ter sido informado os parâmetros
lsql = [Ô]SELECT * FROM PERFIS [Ô]

[ô]Você tem que tirar
lvwLista.SetFocus

[ô]If para fazer a consulta pelos parâmetros informados na consulta
If Trim(cboDescricaoPerfil.Text) <> [Ô][Ô] Then
lsql = lsql & [Ô] WHERE descricao_perfil LIKE [ô][Ô] & Trim(cboDescricaoPerfil.Text & [Ô]*[ô] ORDER BY descricao_perfil ASC[Ô])
[ô] é aqui que tem de ficar.
else
lsql = lsql & [Ô] ORDER BY descricao_perfil ASC[Ô]

End If

agora se o combo não for vazio ele acrescenta o where e order em ordem
se o combo for vazio apenas acrescenta o order a query inicial....
MILTONSILVA94 03/09/2015 13:29:36
#450957
Agora sim, boa idéia NICKOSOFT!
Tópico encerrado , respostas não são mais permitidas