ROTINA PESQUISAR OCORRE ERRO AO ORDENAR POR CAMPO
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?
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?
MILTONSILVA94,
Desculpe, não entendi...
... você colocou no código:
Mas escreveu que:
Embora aparentemente as duas linhas estão corretas:
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:
[][ô]s,
Tunusat.
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.
TUNUSAT, realmente havia descrevido as informações de forma errado ali encima, editei lá agora, dê uma olhada.
MILTONSILVA94,
Ficou legal.
Funfou o [Ô]ORDER BY[Ô]?
[][ô]s,
Tunusat.
Ficou legal.
Funfou o [Ô]ORDER BY[Ô]?
[][ô]s,
Tunusat.
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.
Inclusive na linha do ORDER BY tirei o espaço que tinha, testei também e não deu certo.
Nao é por nada, mas nao deveria ser o select where e por ultimo o order?
Seguindo o codigo apos o order esta o where
Seguindo o codigo apos o order esta o where
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
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
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
[ô]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
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
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....
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....
Agora sim, boa idéia NICKOSOFT!
Tópico encerrado , respostas não são mais permitidas