DBGrid

Delphi

08/01/2008

Boa tarde,
Tenho três tabelas em meu bd.
Uma de produtos, uma de pedido e outra de itens do pedido.

Criei o relacionamento master detail no delphi sem problemas,
a tela de pedido esta ok. Utilizo um dbgrid para inserir os itens.

Aqui tenho duas duvidas.

1a.No clientdateset do meu itens do pedido eu criei um campo lookup
para que pudesse aparecer o lookup na grid. Tem como colocar este
campo na dbgrid sem precisar cria-lo no clientdataset ? por este
procedimento, tenho que adicionar os campos no clientdateset, e eu
não costumo fazer isto. Isto é mais por curiosidade.

2a.Como já estou posicionado com o produto, existe alguma forma de
no meu dbgrid trazer o campo unidade que esta no cadastro do produto ?
em uma outra coluna ?

Gostaria que meu dbgrid ficasse assim:
Produto | Nome do Produto (lookup) | Und (Read-Only) | Preço

Quando abro minhas tabelas faço assim.

itens.commandtext := ´select * from itens order by pedido´

já tentei assim:
itens.commandtext := ´select itens.*, produto.unidade from itens left
join produto on (itens.produto = produto.codigo) order by pedido

Mas ele dá erro de SQL no left. Se deixo desta forma e tiro o relacionamento ele vai funcionar. Mas é evidente que preciso
do relacionamento.

Grato


Emarcolongo

Emarcolongo

Curtidas 0

Respostas

Djjunior

Djjunior

08/01/2008

1º Não utilize o Master/Detail do Delhpi é bugado! (pelo menos no bde já tive muitos problemas) o melhor é no AfterPost da query Pai vc fechar e abrir a query filha é mais seguro

2º Pra ter o campo de unidade é mais fácil vc criar um campo calculado e no evento onCalc da query colocar algo do tipo:

if not (CodProduto.isNull) and (CodProduto.Text <> ´´) then
  CodUnid.Text := BuscaUnid(codProduto);




3º O problema da sua query é que vc tá misturando as bolas... ou vc faz:
select itens.*, produto.unidade 
from itens left join produto 
        on (itens.produto = produto.codigo) 
order by pedido 
(SQL ANSI não funcina no ORACLE abaixo das versões 9x)

ou vc faz...
select itens.*, produto.unidade from itens , produto 
where itens.produto = produto.codigo(+) 
order by pedido 

Forma usual no Oracle o (+) significa que é opcional ou seja left join se o (+) estivesse no itens.produto seria um right join sacou ?


GOSTEI 0
POSTAR