Consultar varias tabelas no banco
Olá pessoal, estou com dificuldade em um select
campos da tabela acesso
Codigo , DataEntrada, DataSaida, HoraEntrada, HoraSaida, nome
vejá so, tenho varias tabelas com o inicio do nome: Acesso_mmyyyy
onde mm=mes e yyyy = ano
preciso fazer um select em que me retorne as tabelas do mes 1 ao 12 em um determinando ano, verificando se existe um determinado nome.
desde já agradeço a atenção.
campos da tabela acesso
Codigo , DataEntrada, DataSaida, HoraEntrada, HoraSaida, nome
vejá so, tenho varias tabelas com o inicio do nome: Acesso_mmyyyy
onde mm=mes e yyyy = ano
preciso fazer um select em que me retorne as tabelas do mes 1 ao 12 em um determinando ano, verificando se existe um determinado nome.
desde já agradeço a atenção.
Sdph
Curtidas 0
Respostas
Emerson Nascimento
06/07/2009
mas o que você quer exatamente? retornar o nome das tabelas que contenham o nome procurado? retornar os registros dessas tabelas? o quê?
isso pode ser resolvido de várias formas, tanto através Delphi como do próprio banco de dados (desde que você informe qual bando de dados está utilizando)
isso pode ser resolvido de várias formas, tanto através Delphi como do próprio banco de dados (desde que você informe qual bando de dados está utilizando)
GOSTEI 0
Sdph
06/07/2009
O que preciso e pegar os dados destas tabelas e emitir um relatorio, ex:
O fulando de tal entrou no mes 01,02, 03.... portanto preciso unir varias tabelas já que minhas tabelas tem nomes diferentes como acesso_012009 a acesso_082009.
desde já agradeço a atenção...
O fulando de tal entrou no mes 01,02, 03.... portanto preciso unir varias tabelas já que minhas tabelas tem nomes diferentes como acesso_012009 a acesso_082009.
desde já agradeço a atenção...
GOSTEI 0
Daniel.felgar
06/07/2009
Boa tarde... voce pode tentar fazer assim
select codigo , dataEntrada, dataSaida, horaEntrada, horaSaida, nome
from acesso_012009
union
select codigo , dataEntrada, dataSaida, horaEntrada, horaSaida, nome
from acesso_022009
union
select codigo , dataEntrada, dataSaida, horaEntrada, horaSaida, nome
from acesso_032009
... etc...
Mas porque voce nao pode usar somente uma tabela para isso???
nao ha necessidade de varias tabelas!!!!
select codigo , dataEntrada, dataSaida, horaEntrada, horaSaida, nome
from acesso_012009
union
select codigo , dataEntrada, dataSaida, horaEntrada, horaSaida, nome
from acesso_022009
union
select codigo , dataEntrada, dataSaida, horaEntrada, horaSaida, nome
from acesso_032009
... etc...
Mas porque voce nao pode usar somente uma tabela para isso???
nao ha necessidade de varias tabelas!!!!
GOSTEI 0
Osocram
06/07/2009
acho q esta precisando aplicar uma normalização nesse banco.
GOSTEI 0
Cipriano
06/07/2009
Boa tarde, vi a sugestão acima e fiquei numa duvida: acho que seria necessário o predicado ALL logo após o comando UNION...para que retornem até os registros repetidos ( se for o caso da consulta que ele precisa ) e também acho que seria necessário a igualdade entre as tabelas - JOIN - para que ele consiga buscar os acessos de um nome especifico...ex:
where codigo_012009.codigo=codigo_013009.codigo and codigo_013009.codigo=codigo_014009.codigo etc...
where codigo_012009.codigo=codigo_013009.codigo and codigo_013009.codigo=codigo_014009.codigo etc...
GOSTEI 0
Sdph
06/07/2009
Olá pessoal, quero agradecer a todos que responderal este post.
e dizer que o meu problema ja foi solucionado, conforme segue codigo abaixo:
valeu!!!!.
procedure TFrm_FiltroIntervaloES.BitBtn2Click(Sender: TObject);
Var nRegistro : Integer;
var Id, nMesInicio, nAnoInicio, nMesFinal, nAnoFinal, mesAnoInicial, mesAnoFinal : Integer;
var nNome, Inicio, Fim : String;
begin
ibAcesso.Close;
ibAcesso.SelectSQL.Clear;
//****************************************************************************************************************************************************
if FormatDateTime(´mm´, edDataInicial.Date) <= FormatDateTime(´mm´, edDataFinal.Date) then
begin
nMesInicio := StrToInt(FormatDateTime(´mm´,edDataInicial.Date));
nAnoInicio := StrToInt(FormatDateTime(´yyyy´,edDataInicial.Date));
Inicio := dm.zeroesquerda(nMesInicio, 2);
fim := dm.zeroesquerda(nMesFinal,2);
nMesFinal := StrToInt(FormatDateTime(´mm´,edDataFinal.Date));
nAnoFinal := StrToInt(FormatDateTime(´yyyy´,edDataFinal.Date));
mesAnoInicial := nMesInicio+nAnoInicio;
mesAnoFinal := nMesFinal+nAnoFinal;
id := ibCadastroID_CODIGO.AsInteger;
nNome := ibCadastroNOME.AsString;
end;
//****************************************************************************************************************************************************
Memo1.Lines.Clear;
while (mesAnoInicial <= mesAnoFinal) do
begin
if (nAnoInicio < nAnoFinal) then
begin
while nMesInicio <= 12 do
begin
Inicio := dm.zeroesquerda(nMesInicio, 2);
Memo1.Lines.Add(´Select * From ACESSO´ + ´_´+Inicio+intToStr(nAnoInicio) + ´ Where DataEntrada >=:locEntrada And DataEntrada <=:locSaida´ );
Memo1.Lines.Add(´ And id_Cadastro =:locCadastro And Nome =:locNome ´);
Memo1.Lines.Add(´union all´);
nMesInicio := nMesInicio +1 ;
end;
nMesInicio := 1;
end;
if (nAnoInicio = nAnoFinal) then
begin
while (nMesInicio <= nMesFinal) do
begin
Inicio := dm.zeroesquerda(nMesInicio, 2);
Memo1.Lines.Add(´Select * From ACESSO´ + ´_´+Inicio+intToStr(nAnoInicio) + ´ Where DataEntrada >=:locEntrada And DataEntrada <=:locSaida´ );
Memo1.Lines.Add(´ And id_Cadastro =:locCadastro And Nome =:locNome ´);
if (nMesInicio < nMesFinal)then
begin
Memo1.Lines.Add(´union all´);
end;
nMesInicio := nMesInicio +1 ;
end;
end;
mesAnoInicial := nMesInicio+nAnoInicio;
nAnoInicio := nAnoInicio +1;
end;
end;
e dizer que o meu problema ja foi solucionado, conforme segue codigo abaixo:
valeu!!!!.
procedure TFrm_FiltroIntervaloES.BitBtn2Click(Sender: TObject);
Var nRegistro : Integer;
var Id, nMesInicio, nAnoInicio, nMesFinal, nAnoFinal, mesAnoInicial, mesAnoFinal : Integer;
var nNome, Inicio, Fim : String;
begin
ibAcesso.Close;
ibAcesso.SelectSQL.Clear;
//****************************************************************************************************************************************************
if FormatDateTime(´mm´, edDataInicial.Date) <= FormatDateTime(´mm´, edDataFinal.Date) then
begin
nMesInicio := StrToInt(FormatDateTime(´mm´,edDataInicial.Date));
nAnoInicio := StrToInt(FormatDateTime(´yyyy´,edDataInicial.Date));
Inicio := dm.zeroesquerda(nMesInicio, 2);
fim := dm.zeroesquerda(nMesFinal,2);
nMesFinal := StrToInt(FormatDateTime(´mm´,edDataFinal.Date));
nAnoFinal := StrToInt(FormatDateTime(´yyyy´,edDataFinal.Date));
mesAnoInicial := nMesInicio+nAnoInicio;
mesAnoFinal := nMesFinal+nAnoFinal;
id := ibCadastroID_CODIGO.AsInteger;
nNome := ibCadastroNOME.AsString;
end;
//****************************************************************************************************************************************************
Memo1.Lines.Clear;
while (mesAnoInicial <= mesAnoFinal) do
begin
if (nAnoInicio < nAnoFinal) then
begin
while nMesInicio <= 12 do
begin
Inicio := dm.zeroesquerda(nMesInicio, 2);
Memo1.Lines.Add(´Select * From ACESSO´ + ´_´+Inicio+intToStr(nAnoInicio) + ´ Where DataEntrada >=:locEntrada And DataEntrada <=:locSaida´ );
Memo1.Lines.Add(´ And id_Cadastro =:locCadastro And Nome =:locNome ´);
Memo1.Lines.Add(´union all´);
nMesInicio := nMesInicio +1 ;
end;
nMesInicio := 1;
end;
if (nAnoInicio = nAnoFinal) then
begin
while (nMesInicio <= nMesFinal) do
begin
Inicio := dm.zeroesquerda(nMesInicio, 2);
Memo1.Lines.Add(´Select * From ACESSO´ + ´_´+Inicio+intToStr(nAnoInicio) + ´ Where DataEntrada >=:locEntrada And DataEntrada <=:locSaida´ );
Memo1.Lines.Add(´ And id_Cadastro =:locCadastro And Nome =:locNome ´);
if (nMesInicio < nMesFinal)then
begin
Memo1.Lines.Add(´union all´);
end;
nMesInicio := nMesInicio +1 ;
end;
end;
mesAnoInicial := nMesInicio+nAnoInicio;
nAnoInicio := nAnoInicio +1;
end;
end;
GOSTEI 0