Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

g_informatica

Como fazer um filtro

Recommended Posts

Oi galera...

 

Estou enfrentando um dificuldade q p/ os experientes no assunto isso é moleza, mas p/ mim está sendo muito complicado!

Seguinte, estou fazendo um sistema escolar, nele existe uma tabela p/ cadastro de escola (ensino médio,fundamental)

gostaria q ao abrir o sistema tivesse um dblookupcombobox p/ o usuario escolher entre ensino médio e fundamental.

Eu precisaria fazer um filtro p/ q caso o usuario escolha a opção ensino médio todas as informações das outras tab. fossem somente do ensino médio. O q acontece é q não estou conseguindo fazer esse filtro, então qd executo o sistema vem as informações de todos os alunos tanto do ensino médio quanto do ensino fundamental. Não sei se estou sabendo informar o q estou precisando. Mas a lógica é como se fosse um sistema de vendas onde cada filial entra c/ o código da filial desejada e daí os dados q vem´são só os dessa filial.

 

Espero q alguém entenda o q estou precisando fazer... Estou a proucura de soluções ou até msm outras sugestões de como resolver isso. Desde já agradeço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem apenas uma tabela para o ensino médio e fundamental, ou seja os dois ensinos estão na mesma tabela ?

 

 

Se sim, qual é o campo da tabela que diferencia se é ensino médio ou fundamental ?

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, só existe uma tabela para os dois ensinos e o q diferencia um ensino do outro é o código, ele é do tipo int e não é autoincrement.

 

Se você puder ajudar, eu te agradeço muito, estou precisando muito dessa informação. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, não sei se é exatamente o que você precisa, mas..

 

suponhamos que ensino médio e fundamental fossem duas empresas diferentes, mas com as mesmas tabelas,

 

quando você entra no sistema você escolhe qual empresa quer trabalhar´.

 

aí, tudo que você fizer no sistema, você estará fazendo na empresa que foi escolhida ao logar no sistema.

 

 

Então..

 

 

você pode criar uma variável global, e quando acessar o sistema, atribuir a esta o código da empresa selecionado para trabalhar,

 

e quando você por exemplo for fazer uma consulta para exibição em um grid, faria assim:

 

 

 

 

with adoquery1 do

begin

SQL.Clear();

SQL.Add(' Select * from NomeTabela');

SQL.Add(' Where CodigoEmpresa = :parametro ');

Parameters.ParamByName('parametro').Value := nomedavariavelglobal;

open;

end;

 

 

e se fosse um insert...da mesma forma...

 

sempre colocando que os dados que você precisa é da empresa que esta na variável global.

 

 

espero ter ajudado

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

É exatamente isso q preciso!!! Sou iniciante no assunto, mas deixa eu v se entendi. Na tela inicial do sistema vou declarar uma variável global Ex. empresa:integer e no botão ok vou atribuir essa variável ao codigo da empresa, é isso?

 

E no código p/ consulta... Esses parametros q coloquei em negrito é tb o nome da variável globlal?

 

with adoquery1 do

begin

SQL.Clear();

SQL.Add(' Select * from NomeTabela');

SQL.Add(' Where CodigoEmpresa = :parametro ');

Parameters.ParamByName('parametro').Value := nomedavariavelglobal;

open;

end;

 

Obg pela ajuda!!!! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

{Na tela inicial do sistema vou declarar uma variável global Ex. empresa:integer e no botão ok vou atribuir essa variável ao codigo da empresa, é isso? }

 

Sim, você declara uma variavel global, e atribui a esta variavel o código da empresa.

 

 

 

{E no código p/ consulta... Esses parametros q coloquei em negrito é tb o nome da variável globlal?

 

with adoquery1 do

begin

SQL.Clear();

SQL.Add(' Select * from NomeTabela');

SQL.Add(' Where CodigoEmpresa = :parametro ');

Parameters.ParamByName('parametro').Value := nomedavariavelglobal;

open;

end;

}

 

Não.

 

depois do where você colocará o nome do campo código que esta na tabela, e onde esta referenciado com

 

:=parametro

 

você colocará o um nome qualquer de sua escolha e este nome qualquer deverá ser o mesmo que entrará na linha

 

Parameters.ParamByName('aquientraonomequalquermastemqueseromesmoqueestadepoisde := ').Value := nomedavariavelglobal.

 

 

onde esta nomedavariavelglobal você deverá atribuir o nome da variavel declarada, pois ela estará com o código da empresa.

 

 

desta forma, você esta passando por parâmetro o código da empresa em questão.

 

espero ter ajudado.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua explicação está muito lógica, porém c/ a minha falta de experiência no assunto ñ estou conseguindo resolver meu problema. Na minha tela inicial eu fiz como você falou, declarei a variavel global como empresa:integer e logo mais abaixo no botão ok atribui essa variavel ao campo código da tabela que ficou assim: empresa:=f_dados.q_escolacodigo.value;

 

Já na tela de pesquisa fiz como você falou:

 

depois do where você colocará o nome do campo código que esta na tabela, e onde esta referenciado com

 

:=parametro

 

você colocará o um nome qualquer de sua escolha e este nome qualquer deverá ser o mesmo que entrará na linha

 

Parameters.ParamByName('aquientraonomequalquermastemqueseromesmoqueestadepoisde := ').Value := nomedavariavelglobal.

 

 

onde esta nomedavariavelglobal você deverá atribuir o nome da variavel declarada, pois ela estará com o código da empresa.

 

Como o nome qualquer tem q ser o msm q está depois de :=').value:=nomedavariavelglobal e o nomedavariavelglobal é empresa então fiz assim:

 

with f_dados.q_escola do

begin

SQL.Clear();

SQL.Add(' Select * from aluno');

SQL.Add(' Where Codescola = :empresa ');

Parameters.ParamByName('empresa').Value := empresa;

open;

end;

 

No código acima ñ deu nenhum erro, porém ñ deu certo... O q estou fazendo de errado?

Ah, outra coisa, nas telas de pesquisa uso um radiogroup onde o usuario poderá escolher o tipo de pesquisa, se pelo inicio do nome, pelo fim do nome, em qualquer parte do nome ou pelo codigo do aluno. (Isso foi exigido pelo cliente)

 

O código q utilizo é o seguinte:

 

if radiogroup1.itemindex=3 then

begin

with f_dados.Q_ALUNO do

begin

close;

sql.clear;

sql.add('select * from aluno');

sql.Add('where codigo:=r order by codigo');

Parameters[0].Value:=strtoint(edit2.Text);

open;

end;

end

else

begin

with f_dados.Q_ALUNO do

begin

close;

sql.clear;

sql.add('select * from alunos where upper(nome) like :r order by nome');

case radiogroup1.itemindex of

0:parameters[0].value:=uppercase(Edit2.text)+'%';

1:parameters[0].value:='%'+uppercase(Edit2.text);

2:parameters[0].value:='%'+uppercase(Edit2.text)+'%';

end;

open;

end;

 

Minha pergunta é como eu usuaria o código q você passou nesse caso de pesquisa c/ radiogroup?

Agradeço sua ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você descreveu que teria 4 situações para a pesquisa, no entanto apenas postou duas.

 

Seguinte, três dessas pesquisas você pode transformá-la em apenas uma da seguinte forma

 

 

 

with f_dados.Q_ALUNO do

begin

close;

sql.clear;

sql.add('select * from alunos where upper(nome) like :r order by nome');

sql.add(' and Codescola = :Empresa ');

Parameters.parambyname('r').Value:= '%'+ Trim(Edit2.text)+'%';

Parameters.parambyname('Empresa').Value:= empresa; //lembrando que empresa é o nome da variavel global.

open;

end;

 

é basicamente a sua ultima linha..

 

2:parameters[0].value:='%'+uppercase(Edit2.text)+'%';

 

 

e pelo que entendi, a sua tabela tem o codigo da escola e o codigo do aluno,

 

sendo assim, você sempre deverá solicitar na pesquisa que traga o conteudo referente ao aluno mas da escola que esta na variavel

 

Como exemplo temos a query acima, pois esta consultando o nome do aluno, mas apenas onde a o codigo da escola é o que esta na variavel. Lembrando que da forma que esta a pesquisa, ele irá pesquisar qualquer parte do nome do Aluno, seja inicio, meio ou fim.

acredito que satisfará a necessidade de seu cliente. ou seja pesquisará letra por letra.

 

Quanto ao uso do radio group, é simples, você pode fazer assim.

 

if radiogroup1.itemindex=3 then //digamos que este seja para pesquisar pelo codigo do aluno, então..

begin

with f_dados.Q_ALUNO do

begin

sql.clear;

sql.add('select * from aluno');

sql.Add('where codigo = :r order by codigo'); //acredito eu que este código é o do aluno.

sql.Add('and Codescola = :Empresa ');

Parameters.parambyname('r').Value:= strtoint(edit2.Text);

Parameters.parambyname('Empresa').Value:= empresa; //lembrando que empresa é o nome da variavel global.

open;

end;

 

 

if radiogroup1.itemindex=2 then //digamos que este seja para pesquisar pelo nome, então..

begin

with f_dados.Q_ALUNO do

begin

close;

sql.clear;

sql.add('select * from alunos where upper(nome) like :r order by nome');

sql.add(' and Codescola = :Empresa ');

Parameters.parambyname('r').Value:= '%'+ Trim(Edit2.text)+'%';

Parameters.parambyname('Empresa').Value:= empresa; //lembrando que empresa é o nome da variavel global.

open;

end;

 

 

é basicamente isto.

 

espero ter ajudado...

 

abs http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.