Relatorio com 4 tabelas

18/01/2006

0

Ai pessoal estou cada dia mais enrolado é os eguinte tenho q fazer um relatorio por data q vai pegar de perioto 1 as pereiodo 2 so q é em 4 tabelas no mesmo qreport todas as tabelas tem cadastro data e eu estou enrolado nisso fiquei perdido... e tenho q fazer a somatorio de de cada tabela para saber quantos exames foi feito nesse periodo... tem como fazer isse relatorio com 4 tabelas assim... ai no caso ficaria assim

as tabelas são essas abaixo: e elas vão m dar o total d exames por periodo

no caso da data tal a data tal foi feito tantos exames

Urtina...: 20 exames total mes
Fezes ...: 25 exames total mes
Hemograma: 10 exames total mes
Sangue..: 4 exames total mes

ela vai m dar esse valor no relatorio...

ja estou a 3 dias rodando foruns e foruns para m ajudar e nada ainda.. :cry:


Tchucky

Tchucky

Responder

Posts

18/01/2006

Xtreme

Bom em relatorios que ja fiz utilizando o QReport, utilizei sudbetails alem do detail, mas me informe o que vc usa pra fazer seus relatorios?
E outra a estruturas dessas tabelas sao iguais ou extremamente diferentes, pois caso os campos a serem listados no teu relatorio forem iguais vc pode atraves do sql fazer um union nas mesmas trazendo somente os campos que precisa.


Responder

18/01/2006

Xtreme

Lendo melhor tua pergunta se teu relatorio tem que listar apenas o ´tipo de exame´ e a quatidade acho que vc pode fazer assim via sql,

select ´urina´, count(*) from urina where data between :dtinicial and :dtfinal
union
select ´fezes´, count(*) from fezes where data between :dtinicial and :dtfinal
union
select ´hemog´, count(*) from hemograma where data between :dtinicial and :dtfinal
union
select ´sangu´, count(*) from sangue where data between :dtinicial and :dtfinal



Responder

18/01/2006

Edilcimar

xtreme, isto eu já respondi para o tchuck, no outro site mas ele respondeu-me que não serve


Responder

19/01/2006

Tchucky

o q eu naum entendi como vai ficar no qreport no caso um componente qrlabel receberá o valor mas como eu termino o codigo eu nunca usei sql e estou tomando uam surra


Responder

19/01/2006

Xtreme

Qual o banco que vc utiliza, e o delphi??


Responder

19/01/2006

Tchucky

estou usando o interbase com comandos em sql


Responder

19/01/2006

Tchucky

uam coisa q naum coloquei os campos datas naum tem os nomes iguais isso atraplha em alguma coisa por exemplo

tabelas

Urina campo U_data
Fezes campo F_data
Hemograma campo H_data
Sangue campo S_data


Responder

19/01/2006

Xtreme

nem cara os nomes dos campos nao tem problema, o que importa sao o tipo serem iguais assim como o tamanho, por exemplo se vc tem um campo descricao de tamanho 10 vc nao pode combina-lo com um de tamanho 20, os dois devem ter o tamanho 10, e tambem serem informados na mesma ordem, bom para seu relatorio vc pode fazer da seguinte maneira, use uma IBQuery e no sql dela jogue seu comando sql, como por exemplo este

select ´urina´, count(*) as total from urina where u_data between :dtinicial and :dtfinal
union
select ´fezes´, count(*) as total from fezes where f_data between :dtinicial and :dtfinal
union
select ´hemog´, count(*) as total from hemograma where h_data between :dtinicial and :dtfinal
union
select ´sangu´, count(*) as total from sangue where s_data between :dtinicial and :dtfinal


entao vc pode puxar os campos e montar seu relatorio no qreport!


Responder

19/01/2006

Tchucky

Colega extreme eu entendi o seu codigo mas eu terei q uma params tipo

ai q estou com duvidas qual data colocar


With DM1.ConExames Do
Begin
Close;
SQL.Clear;
SQL.Add( ´select ´urina´, count(*) as total from urina where u_data between :EdData1 and :F_DATA union

SQL.Add( ´ select sum(HEM_CODHEMOGRAMA) as HEMOGRAMA from HEMOGRAMA where (HEM_DATA >= EdData1 and HEM_DATA <= EdData2)´);
SQL.Add( ´ select sum(UR_CODURINA) as URINA from URINA where (UR_DATA >= EdData1 and UR_DATA <= EdData2)´);
SQL.Add( ´ select sum(S_CODIGO) as SANGUE from SANGUE where (S_DATA >= EdData1 and S_DATA <= EdData2)´);

aqui em baixo esta minha duvidas quanto as Params

SQL.Add( ´ And xxx informar a data >= :P00 ´ );
SQL.Add( ´ And xxx informar a data <= :P01 ´ );

Params[00].AsDate := strtodate(EdData1.Text);
Params[01].AsDate := strtodate(EdData2.Text);
Open;


eu estou usando a IBQuery


Responder

19/01/2006

Tchucky

naum entdi deste campo Total

select ´urina´, count(*) as total from urina where u_data between :EdData1 and :F_DATA union


ele é referente a q


Responder

19/01/2006

Xtreme

Bom se vc for informar o mesmo periodo a todas as tabelas faz assim

ibquery.close;
ibquery.sql.clear;
ibquery.sql.text:=´select ´+quotedstr(´urina´)+´, count(*) as total from urina where u_data between :d1 and :d2 ´+
´ union ´+
´ select ´+quotedstr(´fezes´)+´, count(*) as total from fezes where f_data between :d1 and :d2 ´+
´ union ´+
´ select ´+quotedstr(´hemog´)+´, count(*) as total from hemograma where h_data between :d1 and :d2 ´+
´ union ´+
´ select ´+quotedstr(´sangu´)+´, count(*) as total from sangue where s_data between :d1 and :d2 ´;
ibquery.parambyname(´d1´).asdatetime:=DATAINICIAL;
ibquery.parambyname(´d2´).asdatetime:=DATAFINAL;
ibquery.open;

Onde DATAINICIAL e DATAFINAL correspondem ao periodo desejado
e a questao do ´as total´ é como se fosse um apelido para a coluna que é formada com a quantidade de registros encontrada.

Obs: Se vc ainda continuar com duvida me manda a estrutura em sql de suas tabelas que eu faço um programinha exemplo pra ti!


Responder

19/01/2006

Tchucky

eu naum consegui copilar ele parou aqui

ibquery.parambyname(´d1´).asdatetime:=DATAINICIAL;
ibquery.parambyname(´d2´).asdatetime:=DATAFINAL;


o d1 e o d2 é referente ao maskedit q uso e o DATAINICIAL e DATAFINAL é refrente aque

pow o eu estou cada dia mais burro ou uam coisa esta acontecendo comigo :shock:


Responder

19/01/2006

Tchucky

assim ele rodou legal


With IBQuery1 Do
Begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text :=´select ´+quotedstr(´urina´)+´, count(*) as total from urina where UR_DATA between :D1 and :D2 ´+
´ union ´+
´ select ´+quotedstr(´fezes´)+´, count(*) as total from fezes where F_DATA between :D1 and :D2 ´+
´ union ´+
´ select ´+quotedstr(´hemograma´)+´, count(*) as total from hemograma where HEM_DATA between :D1 and :D2 ´+
´ union ´+
´ select ´+quotedstr(´sangue´)+´, count(*) as total from sangue where S_DATA between :D1 and :D2 ´;
IBQuery1.ParamByName(´D1´).asdatetime:= StrTodate(EdData1.Text);
IBQuery1.ParamByName(´D2´).asdatetime:= StrTodate(EdData2.Text);
IBQuery1.Open;




mas eu ainda num entendi como vai somar os campos no relatorio eu tenho q um QRDBText para quais campos :( isso m tirando do serio mexer com sql ta dificil


Responder

19/01/2006

Tchucky

assim ele rodou legal With IBQuery1 Do Begin IBQuery1.Close; IBQuery1.SQL.Clear; IBQuery1.SQL.Text :=´select ´+quotedstr(´urina´)+´, count(*) as total from urina where UR_DATA between :D1 and :D2 ´+ ´ union ´+ ´ select ´+quotedstr(´fezes´)+´, count(*) as total from fezes where F_DATA between :D1 and :D2 ´+ ´ union ´+ ´ select ´+quotedstr(´hemograma´)+´, count(*) as total from hemograma where HEM_DATA between :D1 and :D2 ´+ ´ union ´+ ´ select ´+quotedstr(´sangue´)+´, count(*) as total from sangue where S_DATA between :D1 and :D2 ´; IBQuery1.ParamByName(´D1´).asdatetime:= StrTodate(EdData1.Text); IBQuery1.ParamByName(´D2´).asdatetime:= StrTodate(EdData2.Text); IBQuery1.Open; aonde vai o campo q ele vai somar neste exemplo acima e eu ainda num entendi como vai somar os campos no relatorio eu tenho q um QRDBText para quais campos :( isso m tirando do serio mexer com sql ta dificil



Responder

19/01/2006

Aerreira

Tchucky... acho que está chegando onde quer com seu relatório, mas tenho uma pergunta a te fazer: esse sistema é seu? você quem o criou ou está gerando um relatório sobre dados de um sistema de terceiros?

Não pude deixar de observar o tópico, pois lido com isso no meu dia-a-dia há muitos anos e, infelizmente, há erros estruturais sérios em suas tabelas, pois um laboratório não é feito apenas de exames ´urina´, ´fezes´, ´hemograma´ e ´sangue´. Laboratórios de análises clínicas trabalham com uma infinidade de exames e amostras diversas, o que tornaria o resultado desse seu relatório algo incompleto se comparado à rotina do laboratório. Existem tabelas individuais para cada tipo de exame? Se sim... meu Deus, isso não está correto. Fale mais sobre este sistema, talvez eu possa ajudar.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar