CONSULTA PARAMETRIZADA

USUARIO.EXCLUIDOS 07/09/2007 22:20:48
#234688
Olá pessoal!
Andei pesquisando em alguns tutoriais da internet, mas ainda não encontrei nada que pudesse resolver o meu caso. é o seguinte, digamos que eu tenha um sistema de Cadastro de Alunos e uma área que possa fazer uma pesquisa para encontrar dados especificos dos alunos

Supomos que a pesquisa tenha sido feita da seguinte maneira:
Nome: que comece comece com tal letra ou primeiro nome
Bairro: Centro ou qualquer outro
Cidade: Sao Paulo
Estado: SP
Idade: 30 ou maior maior que 30
Estado Civil: Casado

Se um campo tiver sem registro, como faço, ou talves ñ quero preencher todos os campos, somente Nome e cidade, ou talves alunos maiores de 30 anos, ou alunos casados, enfim; a rotina tem que ser parametrizada, ter várias opções de consultas.

quais componentes devo usar:
Options, checkbox, textbox, combos, commandbutton.
DBGrid, FlexGrid.
Ou mostrar o resultado em um realatorio?


Nesse caso, eu precisaria criar uma string SQL que "aninhasse" vários AND's e OR's. Por exemplo:

SELECT * FROM TblCadastroAlunos WHERE (Nome=Marcelino OU Nome=M) E (Bairro=Centro OU Bairro=C) E Cidade=Sao Paulo E (Estado=SP)

Como montar uma string desse tipo?
Se puderem me mostrar uma string funcionado ou um modelo pronto, ficaria muito grato!!!

obs.: Minha tabela TblCadastroAlunos ja possue 490 registros!!!

Marcelino Neto
VB6.0
Access2000
DAO
MJAC 08/09/2007 11:17:38
#234725
Amigo primeiro vamos definir o seguinte:
Campos de texto vamos usar TextBox, opções de operação <, =, >, <> vamos usar ComboBox agora para os seus campos vamos montar usando curinga para quase todos pois a idade ficará de fora por ser mais complexo.
Vamos lá primeiro desenhe no formulário o Label e text para todos os seis campos e mais um combo para a idade no combo cadastre as 4 opções mencionadas acima (menor, igual, maior e diferente) agora acrecente um DATA (DAO, pode ser ADO se já sabe utilizá-lo) e um command.

Programando o botão:
  
Data1.DataBaseName = "Coloque aqui o caminho do banco de dados ex. C:\Pasta\bd.mdb"
Data1.RecordSource = "Select * from TblCadastroAlunos Where CampoNome Like '" & txtNome.Text & "*' And CampoBairro Like '" & txtBairro.Text & "*' And CampoCidade Like '" & txtCidade.Text & "*' And CampoEstado Like '" & txtEstado.Text & "*' And CampoCivil Like '" & txtCivil.Text & "*'"
If Idade.Text <> VbNullString Then
Data1.RecordSource = Data1.RecordSource & " And CampoIdade " & cmb.Text & txtIdade.Text
End If
Data1.Refresh

Coloque um MSFlexGrid ou outro Grid de sua preferência para visualizar os resultados. Abraços
ROBIU 08/09/2007 11:23:21
#234727
Resposta escolhida
Não precisa usar Or aqui. O operador Like junto com "%' pega todos registros cujo Nome Comece com as iniciais que você digitar. Se digitar M vai aparecer Maria, Marcos, Marcelino, Moises etc, se digitar MO vai aparecer Moises.

Dim Sql As String
Sql = "Select * From TalCadastroAlunos Where Nome Like '" & TxtNome.Text & "%'"
Sql = Sql & " And Bairro Like '" & TxtBairro.Text & "%' And Cidade Like '" & TxtCidade & "'"
Sql = Sql & " And Estado Like '" & TxtUF.Text & "' order By Nome"


Os dados Podem ficar nas textBoxs mesmo mas couidado para validar se tem valor nos textboxs e evitar erros.
Da forma que você colocou a sql deu para enterder que seria isso, mas depois você pergunta se é para colocar em Options, checkbox, textbox, combos fiquei na dúvida se não seria desse jeito: Se Filtra por Nome ou por bairro ou por Cidade etc. Se for esse o caso colocaria uma combo com os campos na lista e um Select:

dim sql as String
Select Combo1.Caption
Case "Nome"
Sql="Select * From Tabela Where Nome Like '" & txt.Text "%'"
Case "Bairro"
Sql="Select * From Tabela Where Bairro Like '" & txt.Text "%'"
Case "Cidade"
Sql="Select * From Tabela Where Cidade Like '" & txt.Text "%'"
Case else
sql="Select * From Tabela" 'Limpa o filtro
end select
Se for isso eu tenho um projeto pronto também

ICEMAN 08/09/2007 11:27:05
#234729
Em ado

Select * from tbcadastroalunos where nome like'" & txtnome & "%' and bairro like''" & txtbairro & "%' and cidade like''" & txtcidade "%' and estado like''" & txtcidade & "%'"

em dao

Select * from tbcadastroalunos where nome like'" & txtnome & "*' and bairro like'" & txtbairro & "*' and cidade like'" & txtcidade "*' and estado like'" & txtcidade & "*'"


observaçoes no modo ado eu tilizo % (simbolo porcentagem) que nem txtnome=M
vai trazer tudo que iniciar com M aqui quem determina é o texto na caixa de texto se o text no txtnome for marcelino ele vai trazer todos os marcelinos cadastrados e assim por diante ja no modo dao eu utilizo o * (simbolo de multiplicar que conhecemos como tudo nas intruçoes sqls) para gerar a mesma função do %(porcentagem) so que muda de ado pra dao.

eu aconselho vc mostrar todos os dados num listview

se nao souber usar listeview aqui eu explico

http://www.vbmania.com.br/vbmania/vbmdetail.php?varID=6726

pode ser tilizado com outras bases de dados tambem

boa sorte
ICEMAN 08/09/2007 11:30:40
#234730
KKK todo mundo respondeu junto KKKK
USUARIO.EXCLUIDOS 08/09/2007 12:05:08
#234738
bom dia meus amigos, obrigado pelas respostas, todas funcionaram bem!!!
Agradeço a todos, vou terminar este projeto e posto o mesmo hoje ainda!!!

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