Pesquisa complexa

Delphi

10/10/2003

Preciso fazer uma pesquisa em uma tabela um pouco complicada(acima de meus conhecimentos)

Tenho uma tabela assim(ela possu um auto-relacionamento)
Cod
Nome
End
Chefia

onde em chefia eu digito o codigo de um outro funcionario, tipo assim
Cod Nome End Chefia
1 Marechal sdsd 0 (nao tem chefe)
2 Everaldo fdffd 1 (o chefe e Marechal)
3 Aroldo dsds 1 (o chefe e Marechal)
4 Areta fdfd 2 (o chefe e Everaldo)
e assim por diante, se pode ter uma hirerarquia enorme,
ok ate ai vai tudo bem.
Agora eu quero fazer a seguinte leitura:
ai eu digito 2(Everaldo)
Digiti o cod do chefe:2
ai ele vai e me mostra todos os subordinados do Everaldo:
Everaldo
Subordinados:
Areta

So que o exemplo acima e simples, eu sei que um select resolve, so que pense se eu tiver uma longa hierarquia, abaixo da Areta mais dois, e abaixo desses dois mais tres e assim por diante.
Por favor, preciso muito dessa ajuda, muito mesmo.


Isaac Cavalcanti

Isaac Cavalcanti

Curtidas 0

Respostas

Marlon Spiess

Marlon Spiess

10/10/2003

Olá,
eu tenho um sistema q faz +/- isso, eu tenho um cadastro de produtos e receitas desses produtos, q podem ser de outra receita assim por diante.
No meu caso, eu tinha q fazer baixa de estoque dos produtos, o q eu fiz foi o seguinte. criei uma função q chama ela mesma quando o produto tiver subproduto, e se subproduto tiver subproduto, chama novamente. Vou passa parte dessa rotina, mas vc terá q implementar conforme sua necessodade.

procedure BaixaEstoqueProdutos(pCdProduto : Longint; pQtAcumulada : Double);
var
xQtd : Double;
xProdAnt : Longint;
begin
TabProPro.IndexName := ´´;
TabProPro.FindNearest([pCdProduto]);

//
// aqui começa o pula do gato, é aqui q a função vai chamar ela mesma

While (not TabProPro.Eof) and (TabProProCdProduto.Value = pCdProduto) do
begin
xProdAnt := TabProProCdSubProduto.Value;
if TabProProQtSubProduto.Value = 0 then
xQtd := pQtAcumulada
else
xQtd := pQtAcumulada * TabProProQtSubProduto.Value;
//--------------
BaixaEstoqueProdutos(TabProProCdSubProduto.Value, xQtd);
//-------------- observe q a rotina chama ela mesma
TabProPro.FindKey([pCdProduto,xProdAnt]);
TabProPro.Next;
end;
TabPro.IndexName := ´Por Reduzido´;
if TabPro.Findkey([pCdProduto]) and
(TabProIdEstoque.Value = ´S´) then
begin
TabPro.Edit;
TabProQtEstoque.Value := TabProQtEstoque.Value - pQtAcumulada;
TabPro.Post;
end;
end;



Espero ter ajudado, qualquer coisa MP-me, muito boa sorte


GOSTEI 0
POSTAR