Ajuda em criação de tela de Vendas no Delphi
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
Curtidas 0
Respostas
Rafael Bosco
19/07/2019
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;
GOSTEI 0