Relatorio com 4 tabelas

18/01/2006

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

Respostas

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 Citar

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 Citar

18/01/2006

Edilcimar

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


Responder Citar

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 Citar

19/01/2006

Xtreme

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


Responder Citar

19/01/2006

Tchucky

estou usando o interbase com comandos em sql


Responder Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar