Pesquisar (Montar um Select)

30/01/2006

eh o seguinte muito jah devem conhecer o metodo do kumon(para quem naum conhece eh tipo aula particular) entaum oq eles estaum precisando eh o seguinte
lah eles tem aula de Portugues Matematica e Ingles
tenho no meu form de pesquisa o seguinte
um edit para pesquisar pelo nome e 3 checkbox
o pesquisa eh a seguinte
c eu por o primeiro nome do aluno e ticar duas materias por exemplo
(
Nome
Lucas
materias
Portugues
matematica
)

quero todos os lucas que faze matematica e portugues


ou se eu por assim

(
Nome
Lucas
materias
Portugues
)

quero todos os lucas que fazem apenas portugues


ou se eu naum colocar o nome e apenas colocar as materias eu quero apenas os alunas que fazem as materias selecionadas naum pode fazer uma ou fazer a outra ..tem q fazer as duas selecionadas...


acredito q naum seja muito dificil...pq o meu maior problema eh com o sql mesmo

o meu banco eh em interbase
eu estou usando o ibdataset

a minha tabela chama Ficha
e os campos saum

Nome

matematica

portugues

ingles




vlw pela força pessoal


$grandaum$

Respostas

30/01/2006

Okama

Você tem duas condições iniciais: 1-Nome 2-Matérias

Primeiro verifique se o nome foi digitado e monte o primeiro select. Se não foi monte o segundo select:

if EditNome.text <> ´´ then 
  MONTA_SELECT1
else
  MONTA_SELECT2


Considerando que sua tabela está estruturada como

Nome Varchar
Portugues Int
matematica int
Ingles Int

e a seleção de cada matéria é feita por 0 e 1 nos campos:


Procedure MONTA_SELECT1
//Com nome digitado
begin

IBDataSet1.SelectSQL.text :=  ´Select * from tabela where nome = ´+QuotedStr( Trim( EditNome.text ) );

if CheckBoxPort.checked then 
  IBDataSet1.SelectSQL.add(´ and Portugues = 1 ´);

if CheckBoxMat.checked then 
  IBDataSet1.SelectSQL.add(´ and Matematica = 1 ´);

if CheckBoxIng.checked then 
  IBDataSet1.SelectSQL.add(´ and Ingles = 1 ´);

end;






Procedure MONTA_SELECT2
//Sem nome digitado
Var Materia : Boolean;
begin

IBDataSet1.SelectSQL.text :=  ´Select * from tabela ´; 
Materia := False;

if CheckBoxPort.checked then begin  
  IBDataSet1.SelectSQL.add(´ where Portugues = 1 ´);
  Materia := True;
end;

if CheckBoxMat.checked then 
  if Materia then
    IBDataSet1.SelectSQL.add(´ and Matematica = 1 ´)
  else begin
    IBDataSet1.SelectSQL.add(´ where Matematica = 1 ´);
    Materia := True;
  end; 


if CheckBoxIng.checked then 
  if Materia then
    IBDataSet1.SelectSQL.add(´ and Ingles = 1 ´)
  else
    IBDataSet1.SelectSQL.add(´ where Ingles = 1 ´);

end;


Separei os procedimentos para ficar mais enxuto o código, você pode fazer no mesmo procedimento controlando a variável ´Materia´ para inserir a clausula ´where´ ou ´add´


Responder Citar