Consulta sql em mais de uma tabela

Delphi

08/05/2005

Olá pessoal! Tô precisando de uma ajuda:tenho tres tabelas, fichapessoa, auxilios e movimento. Na fichapessoa eu registro as pessoas, na auxilio os tipos de auxilio, e na movimento eu registro que auxilios sairam, eu gravo o codigo da pessoa e o codigo do auxilio. oque eu preciso fazer mas não sei se é possivel, é selecionar da tabela movimento o codigo da pessoa e o codigo do auxilio, e da tabela fichapessoa o nome da pessoa e da tabela auxilio o nome do auxilio, e jogar o conteudo selecionado da tres tabelas em uma query, de modo que o conteudo delas apareça em um grid. Nesse grid teria o nome de quem teve o auxilio e o nome do auxilio, e os dados do movimento, como dia. fazer consulta sql em uma só tabela eu sei, não sei se dá para fazer assim tb.
Qualquer ajuda ou dica me ajudara muito!
Muito obrigado pela atenção!
Um forte abraço a todos!


Jorgerock

Jorgerock

Curtidas 0

Respostas

Raserafim

Raserafim

08/05/2005

jorge, isso é possível sim e trata-se de uma consulta SQL simples:

select MOVIMENTO.COD_PESSOA, MOVIMENTO.COD_AUXILIO, FICHA_PESSOA.NOME, AUXILIOS.NOME
from FICHA_PESSOA join MOVIMENTO on FICHA_PESSOA.COD_PESSOA = MOVIMENTO.COD_PESSOA join AUXILIOS on AUXILIOS.COD_AUXILIO = MOVIMENTO.COD_AUXILIO


basta agora fazer as adaptações dos nomes de campos das suas tabelas e ver se é isso mesmo que vc quer.


GOSTEI 0
Jorgerock

Jorgerock

08/05/2005

certo.
a minha consulta ficaria assim:

select MOVIMENTO.CODIGOPESSOA, MOVIMENTO.CODIGOAUXILIO, MOVIMENTO.DATAMOVIMENTO, MOVIMENTO.QUANTIDADE, FICHAPESSOA.NOMEPESSOA, AUXILIOS.NOMEAUXILIO, AUXILIOS.UNIDADEAUXILIO
from FICHAPESSOA join MOVIMENTO on FICHAPESSOA.CODIGOPESSOA = MOVIMENTO.CODIGOPESSOA join AUXILIOS on AUXILIOS.CODIGOAUXILIO = MOVIMENTO.CODIGOAUXILIO

no meu formulario, por eu tenho que resgatar, todos os auxilios que fulano de tal pegou ou todas as saidas que tal auxilio teve, e tambem todos os auxilios que fulano de tal pegou em um intervalo de tempo.
resgatar tudo oque fulano de tal pegou eu consegui assim:

dmdados.qryconsultamovimento.sql.clear;
dmdados.qryconsultamovimento.sql.add(´select MOVIMENTO.CODIGOPESSOA, MOVIMENTO.CODIGOAUXILIO, MOVIMENTO.DATAMOVIMENTO, MOVIMENTO.QUANTIDADE, FICHAPESSOA.NOMEPESSOA, AUXILIOS.NOMEAUXILIO, AUXILIOS.UNIDADEAUXILIO ´);
dmdados.qryconsultamovimento.Sql.Add(´from FICHAPESSOA join MOVIMENTO on FICHAPESSOA.CODIGOPESSOA = MOVIMENTO.CODIGOPESSOA join AUXILIOS on AUXILIOS.CODIGOAUXILIO = MOVIMENTO.CODIGOAUXILIO where FICHAPESSOA.CODIGOPESSOA=´+#39+edtcodigopessoa.text+39);
dmdados.qryconsultamovimento.Prepare;
dmdados.qryconsultamovimento.open;

mas agora eu preciso pegar oque ele pegou em determinado periodo de tempo, fiz assim mas não compila:

var
inicio:string;
final:string;
begin
dmdados.qryconsultamovimento.sql.clear;
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);
dmdados.qryconsultamovimento.sql.clear;
dmdados.qryconsultamovimento.sql.add(´select MOVIMENTO.CODIGOPESSOA, MOVIMENTO.CODIGOAUXILIO, MOVIMENTO.DATAMOVIMENTO, MOVIMENTO.QUANTIDADE, FICHAPESSOA.NOMEPESSOA, AUXILIOS.NOMEAUXILIO, AUXILIOS.UNIDADEAUXILIO ´) ;
dmdados.qryconsultamovimento.Sql.Add(´from FICHAPESSOA join MOVIMENTO on FICHAPESSOA.CODIGOPESSOA = MOVIMENTO.CODIGOPESSOA join AUXILIOS on AUXILIOS.CODIGOAUXILIO = MOVIMENTO.CODIGOAUXILIO where FICHAPESSOA.CODIGOPESSOA=´+#39+edtcodigopessoa.text+39 and ´MOVIMENTO.DATAMOVIMENTO >=:pInicial and MOVIMENTO.DATAMOVIMENTO <=:pFinal´);
dmdados.qryconsultamovimento.ParamByName(´pInicial´).AsDateTime := StrToDate(Inicio);
dmdados.qryconsultamovimento.ParamByName(´pFinal´).AsDateTime := StrToDate(Final);
dmdados.qryconsultamovimento.Prepare;
dmdados.qryconsultamovimento.open;

pode me ajudar a resolver esse codigo. é a primeira vez que eu faço uma consulta deste tipo.

Muito obrigado pela atenção!

Um forte abraço!

Obrigado por tudo!


GOSTEI 0
Jorgerock

Jorgerock

08/05/2005

Descobri o problema... bios pura.... faltava um + e um ´
ficou assim o codigo:
inicio:string;
final:string;
begin
dmdados.qryconsultamovimento.sql.clear;
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);
dmdados.qryconsultamovimento.sql.clear;
dmdados.qryconsultamovimento.sql.add(´select MOVIMENTO.CODIGOPESSOA, MOVIMENTO.CODIGOAUXILIO, MOVIMENTO.DATAMOVIMENTO, MOVIMENTO.QUANTIDADE, FICHAPESSOA.NOMEPESSOA, AUXILIOS.NOMEAUXILIO, AUXILIOS.UNIDADEAUXILIO ´) ;
dmdados.qryconsultamovimento.Sql.Add(´from FICHAPESSOA join MOVIMENTO on FICHAPESSOA.CODIGOPESSOA = MOVIMENTO.CODIGOPESSOA join AUXILIOS on AUXILIOS.CODIGOAUXILIO = MOVIMENTO.CODIGOAUXILIO where FICHAPESSOA.CODIGOPESSOA=´+#39+edtcodigopessoa.text+39+ ´and MOVIMENTO.DATAMOVIMENTO >=:pInicial and MOVIMENTO.DATAMOVIMENTO <=:pFinal´);
dmdados.qryconsultamovimento.ParamByName(´pInicial´).AsDateTime := StrToDate(Inicio);
dmdados.qryconsultamovimento.ParamByName(´pFinal´).AsDateTime := StrToDate(Final);
dmdados.qryconsultamovimento.Prepare;
dmdados.qryconsultamovimento.open;

Valeu raserafim, sozinho eu não teria conseguido!
Um forte abraço!


GOSTEI 0
POSTAR