Ajuda em criação de tela de Vendas no Delphi
19/07/2019
0
Olá pessoal da comunidade, estou com dificuldades na criação do meu formulário de vendas, não consigo relacionar o id gerado no cabeçalho pai para repassar o id gerado na tabela de produtos (filho) quando eu clico em adicionar o item e clico em salvar, ele pede para eu digitar o id da venda, que no caso era pra ser repassado da tabela de venda (pai), como eu faço para passar automaticamente o código gerado da tabela de vendas para a de itens da venda?
Estou utilizando Delphi, obrigado e abraços!
Estou utilizando Delphi, obrigado e abraços!
Rodrigo
Curtir tópico
+ 0
Responder
Posts
19/07/2019
Rafael Bosco
Se caso você esteja usando o FireBird como banco de dados, abaixo tem um código com as SQL de demonstração, caso seja outro banco de dados, só pesquisar referente a atribuição do RETURNING para cada banco de dados:
procedure CommitVenda; const SQLInsertVenda = 'INSERT INTO TESTEVENDA (ID) VALUES (GEN_ID(GEN_ID_TESTEVENDA, 1)) RETURNING ID'; SQLInsertVendaProduto = 'INSERT INTO TESTVENDAPRODUTO (ID, ID_VENDA,) VALUES (GEN_ID(GEN_ID_TESTEVENDA_PRODUTO, :ID_VENDA)'; var IDVenda: Int64; Query: TQuery; //usarei hipoteticamente uma query begin Query := TQuery.Create; try Query.SQL.Add(SQLInsertVenda); Query.Open; // Por que Open? o método RETURNING vai retornar o campo que você solicitar, por isso deve ser uma query de abertura if (not Query.IsEmpty) then IDVenda := Query.FieldByName('ID').AsLargeInt; // aqui tem o código da venda que você inseriu else IDVenda := 0; //significa que a query está vazia e não foi possível obter o identificador da venda if IDVenda > 0 then begin Query.CloseAndClear; Query.SQL.Add(SQLInsertVendaProduto); Query.ParamByName('ID_VENDA').AsLargeInt := IDVenda; Query.Exec; // como não é uma query de abertura, utiliza o EXEC end; finally FreeAndNil(Query); end; end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)