Como fazer uma instrução SQL com 4 tabelas e mostrar no DBGrid?

Delphi

05/10/2023

Pessoal,
Preciso fazer uma instrução SQL,
para mostrar 04 tabelas no DBGrid, a saber:

Tabela Pessoa-> Campos (Id,TipoCadastro e Nome)
O Tipo Cadastro tem 3 opções-> (Fornecedor,Parceiros e Clientes)
Dessa tabela preciso mostrar o Campo Nome cujo TipoCadastro seja = ''Fornecedor'';

Tabela Produto-> Campos (Id,Descricao,Preco).
Dessa Tabela preciso mostrar somente o Campo (Descricao).

Tabela Compra -> Campos (Id, Id_Pessoa, DataEmissao,ValorTotal)
Somente os campos (DataEmissao,ValorTotal)

Tabela CompraItens-> Campos( Id,Id_Compra,Id_Produto,Quantidade,ValorUnitario,ValorTotal)
Somente os campos Quantidade,ValorUnitario e o valorTotal
Podem me ajudar????
Mauricio Bomfim

Mauricio Bomfim

Curtidas 0

Respostas

Arthur Heinrich

Arthur Heinrich

05/10/2023

select
  f.Nome,
  c.DataEmissao, c.ValorTotal valor_total_compra,
  p.Descricao descricao_produto, i.Quantidade, i.ValorUnitario, i.ValorTotal valor_total_item
from
  Pessoa f
    join Compra c
      on c.Id_Pessoa = f.Id
    join CompraItens i
      on i.Id_Compra = c.Id
    join Produto p
      on p.Id = i.Id_Produto
where
  f.TipoCadastro = 'Fornecedor'
order by c.DataEmissao, c.id, p.Descricao
GOSTEI 0
Mauricio Bomfim

Mauricio Bomfim

05/10/2023

Muito Obrigado.Valeu.
GOSTEI 0
Mauricio Bomfim

Mauricio Bomfim

05/10/2023

Muito Obrigado.Valeu.
Fiz a instrução conforme sua orientação. Mas quando abre a dbgrid os campos estão fora da ordem. Quanto faço o teste da instrução no SQLite Studio dá certo, mas na dbgrid do delphi aparece fora daordem.Como posso corrigir a ordenação dos campos. Segue minha instrução abaixo:

procedure TPageCompras.Pesquisar;
var
SQL : String;
FiltroPesquisa : string;
// FiltroTipo : string;
begin
SQL := ('select f.Nome, c.DataEmissao, c.ValorTotal valor_total_compra,'+
'p.Descricao descricao_produto, i.Quantidade, i.ValorUnitario, i.ValorTotal valor_total_item'+
'from Pessoa f join Compra c on c.Id_Pessoa = f.Id join CompraItens i on i.Id_Compra = c.Id' +
'join Produto p on p.Id = i.Id_Produto where f.TipoCadastro = "Fornecedor" ' +
' order by c.DataEmissao, c.id, p.Descricao');
FiltroPesquisa := TUtilitarios.LikeFind(edtPesquisar.Text, DBGrid1);
dmCompras.cdsCompra.Close;
dmCompras.cdsCompra.CommandText := 'Select * from Compra where 1 = 1' + FiltroPesquisa;
dmCompras.cdsCompra.Open;
edtPesquisar.Clear;
inherited;
end;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

05/10/2023

dê um duplo clique no dataset. se os campos estiverem persistidos, ordene-os como desejar.

veja se os campos também não estão persistidos na grade (columns).
GOSTEI 0
POSTAR