Consulta SQL

26/05/2008

1

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.


Responder

Posts

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:
   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
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.


Responder

26/05/2008

Jlsmendes

Boa tarde Emerson,

Irei testar e já te passo o resultado.

Obrigado pela atenção.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira