Consulta SQL
26/05/2008
0
Bom dia amigos,
Possuo um sistema feito em DELPHI 7, que utiliza banco de dados PARADOX, e gera relatórios usando o QuickReport 3.0.9.
Esse sistema possui apenas uma tabela, chamada FILIADOS
Dentro dessa tabela possuo vários campos (nome, endereco, bairro, etc..), e dois desses campos são:
LIDER - BOOLEAN (Uso com um DBCheckBox que quando marcado, ou seja, checked retorna true e desmarcado false. QUe diz se a pessoa em questão é um líder)
CONTATO - STRING (Uso com um DBEdit e quando o DBCheckBox Lider está desmarcado, ou seja, false, esse campo fica habilitado para eu digitar o nome do líder)
Eu já fiz vários relatórios no sistema, usando uma TQuery, adiciono os comandos SQL dinamicamente, mais ou menos assim:
with dmFiliados.qrybusca do
begin
Close;
SQL.Clear;
SQL.Add(´SELECT * FROM FILIADOS´);
SQL.Add(´WHERE UPPER(NOMEELEITOR) LIKE UPPER(:NOME)´);
SQL.Add(´ORDER BY NOMEELEITOR´);
ParamByName(´NOME´).AsString := edtConteudo.Text + ´¬´;
Open;
if dmFiliados.qrybusca.RecordCount > 0 then
frmrelatorio.qrFiliados.Preview
else
Showmessage(´Não há dados!´);
end;
O relatório que eu queria fazer seria oque:
Mostrar assim:
Nome Líder: João das Couves Bairro: Centro Celular: 312312313
Liderados
Nome | Bairro | Celular
Maria | rocinha | 55345355
Zezinho | portelinha | 65456464
Seria mais um menos um mestre-detalhe, mas em apenas uma tabela.
Pergunto: É possível fazer isso que estou falando?
Nome dos campos:
NOMEELEITOR (Nome das pessoas)
BAIRROELEITOR (Bairro das pessoas)
CELULAR (Num celular das pessoas)
CONTATO (Nome do lider)
LIDER (TRUE = LIDER , FALSE = LIDERADO)
Desde já, muito obrigado pela atenção de vocês.
Possuo um sistema feito em DELPHI 7, que utiliza banco de dados PARADOX, e gera relatórios usando o QuickReport 3.0.9.
Esse sistema possui apenas uma tabela, chamada FILIADOS
Dentro dessa tabela possuo vários campos (nome, endereco, bairro, etc..), e dois desses campos são:
LIDER - BOOLEAN (Uso com um DBCheckBox que quando marcado, ou seja, checked retorna true e desmarcado false. QUe diz se a pessoa em questão é um líder)
CONTATO - STRING (Uso com um DBEdit e quando o DBCheckBox Lider está desmarcado, ou seja, false, esse campo fica habilitado para eu digitar o nome do líder)
Eu já fiz vários relatórios no sistema, usando uma TQuery, adiciono os comandos SQL dinamicamente, mais ou menos assim:
with dmFiliados.qrybusca do
begin
Close;
SQL.Clear;
SQL.Add(´SELECT * FROM FILIADOS´);
SQL.Add(´WHERE UPPER(NOMEELEITOR) LIKE UPPER(:NOME)´);
SQL.Add(´ORDER BY NOMEELEITOR´);
ParamByName(´NOME´).AsString := edtConteudo.Text + ´¬´;
Open;
if dmFiliados.qrybusca.RecordCount > 0 then
frmrelatorio.qrFiliados.Preview
else
Showmessage(´Não há dados!´);
end;
O relatório que eu queria fazer seria oque:
Mostrar assim:
Nome Líder: João das Couves Bairro: Centro Celular: 312312313
Liderados
Nome | Bairro | Celular
Maria | rocinha | 55345355
Zezinho | portelinha | 65456464
Seria mais um menos um mestre-detalhe, mas em apenas uma tabela.
Pergunto: É possível fazer isso que estou falando?
Nome dos campos:
NOMEELEITOR (Nome das pessoas)
BAIRROELEITOR (Bairro das pessoas)
CELULAR (Num celular das pessoas)
CONTATO (Nome do lider)
LIDER (TRUE = LIDER , FALSE = LIDERADO)
Desde já, muito obrigado pela atenção de vocês.
Jlsmendes
Curtir tópico
+ 0
Responder
Posts
26/05/2008
Emerson Nascimento
você pode fazer de duas formas:
1 - usando duas queries:
a) SELECT * FROM FILIADOS WHERE LIDER = ´SIM´
b) SELECT * FROM FILIADOS WHERE LIDER <> ´SIM´
depois você faz uma ligação mestre-detalhe entre elas, ligando o campo CONTATO da tabela b com o campo NOME da tabela a.
ou
2 - usando apenas uma query:
daí, você coloca um QRGroup e informa que a expressão de agrupamento são os campos NOMELIDER, BAIRROLIDER e CELULARLIDER, e monta o layout do QRGroup de modo a exibir os dados do líder e o layout do QRDetail da forma que você quer que exiba os dados dos liderados.
1 - usando duas queries:
a) SELECT * FROM FILIADOS WHERE LIDER = ´SIM´
b) SELECT * FROM FILIADOS WHERE LIDER <> ´SIM´
depois você faz uma ligação mestre-detalhe entre elas, ligando o campo CONTATO da tabela b com o campo NOME da tabela a.
ou
2 - usando apenas uma query:
SELECT A.NOMEELEITOR NOMELIDER, A.BAIRROELEITOR BAIRROLIDER, A.CELULAR CELULARLIDER, B.NOMEELEITOR, B.BAIRROELEITOR, B.CELULAR FROM FILIADOS A LEFT JOIN FILIADOS B ON (B.LIDER = ´NAO´ AND B.CONTATO = A.NOMEELEITOR) WHERE A.LIDER = ´SIM´ ORDER BY A.NOMEELEITOR, A.BAIRROELEITOR, A.CELULAR, B.NOMEELEITOR, B.BAIRROELEITOR, B.CELULAR
Responder
26/05/2008
Jlsmendes
Boa tarde Emerson,
Irei testar e já te passo o resultado.
Obrigado pela atenção.
Irei testar e já te passo o resultado.
Obrigado pela atenção.
Responder
Clique aqui para fazer login e interagir na Comunidade :)