Ir para conteúdo
Fórum Script Brasil
  • 0

Parametros Master/Datail ClientDataSet


coisvaes

Pergunta

Tenho 2 Tabelas, conforme abaixo:

Tabela VENDAS (Master)

PedidoID

CommandText - 'select * from VENDAS'

tabela VENDAITEM (Detail)

PedidoID

ProdutoID

CommandText - 'select * from VENDAITEM where PedidoID = :PedidoID and ProdutoID = :ProdutoID'

Estou ligando o Detail ao Master através de um DataSource e do DataSetField, do ClientDataSet.

Supondo que eu precise selecionar somente o ProdutoID igual a 10. O valor do parametro :ProdutoID seria enviado a partir do click de um botão, mais ou menos assim:

sdsVendaItem.Open;

sdsVendaItem.Params.ParamByName('PRODUTOID').Value := 10;

sdsVendaItem.Open;

O problema é que o campo PRODUTOID existe na tabela VENDAITEM mas NÃO EXISTE na tabela VENDAS e, quando tento carregar os campos em sdsVendas, sou informado que o campo PRODUTOID não existe.

Para resolver isso estou usando: cdsVendaItem.Filter := 'PRODUTOID ='+10;

Entretanto, preciso resolver isto na instrução SQL porque a tabela ITEMVENDA tem mais de 1 milhão de registros.

Se eu fizer "SELECT * FROM VENDAITEM WHERE VENDAID = :VENDAID AND PRODUTOID = 10" não dá erro, mas, preciso usar o paramentro, pois, é o usuário quem vai escolher o produto.

Editado por coisvaes
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá, tenta assim:

SELECT * FROM VENDAITEM

WHERE (:PRODUTOID IS NULL OR PRODUTOID = :PRODUTOID)

AND VENDAID = :VENDAID

quando tiver que trazer todos os itens , utilize:

sdsVendaItem.Open;

sdsVendaItem.Params.ParamByName('PRODUTOID').Value := null;

sdsVendaItem.Open;

e quando escolher o item:

sdsVendaItem.Open;

sdsVendaItem.Params.ParamByName('PRODUTOID').Value := 10;

sdsVendaItem.Open;

Abs. Progr'amador

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, Progr'amador. Valeu!

O problema é que o campo PRODUTOID não existe na tabela VENDAS e quando tento carregar os campos em cdsVendas, dá erro por não existir o campo.

Para fazer o relacionamento Master/Detail, de uma forma, digamos, "padrão", a instrução SQL seria assim:

sdsVendas - select * from vendas e

sdsItemVenda - select * from itemvenda where vendaid = :vendaid

Só para lembrar, no relacionamento Master/Detail (com DataSetField) o nome do parametro, na tabela Detail, tem que ser, obrigatoriamente, igual ao nome do campo chave primaria na tabela Master.

Observou o problema? Em "select * from itemvenda where vendaid = :vendaid", o nome do parametro é igual ao nome do campo chave primaria na tabela master, ou seja, :VENDAID. Mas, seu eu fizer "select * from itemvenda where vendaid = :vendaid and produtoid = :produtoid", PRODUTOID não existe na tabela Master, e dá erro quando tento carregar os campos em ClientDataSetVendas, mesmo que eu informe que o parametro :PRODUTOID é NULL.

Editado por coisvaes
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...