Identificar registros selecionados
Bom dia pessoal.
Estou fazendo um pequeno sistema de compras em delphi + firebird.
A ideia é a seguinte:
Tenho a tabela de compras e itens_compras. Na itens_compras, os usuarios vão inserindo suas requisições de compras. Então quando acesso essa tela, uma sql lista todas os itens cujo status seja pendente.
O proximo passo é selecionar os itens que se deseja comprar, clicar num botão que vai abrir uma nova janela onde vou escolher um fornecedor e um prazo de entrega. Para isso bolei essa rotina:
//Insere os dados na tabela de compras
frmdm.qrCompras.Append;
frmdm.qrComprasFORNECEDOR_COD.AsInteger:= StrToInt(Edit1.Text);
frmdm.qrComprasDATA_COMPRA.AsDateTime:= Date;
frmdm.qrComprasPREV_RECEBIMENTO.AsDateTime:= DateTimePickerEntrega.Date;
frmdm.spCompras.ParamByName('TABELA').AsString := 'COMPRAS';
frmdm.spCompras.ExecProc;
frmdm.qrComprasCODIGO.AsInteger := frmdm.spCompras.ParamByName('RESULT').AsInteger;
frmdm.qrCompras.Post;
frmdm.trCompras.CommitRetaining;
//atualiza itens com os dados da compra
qrSelecionados.Close;
qrSelecionados.SQL.Clear;
qrSelecionados.SQL.Add('Update ITENS_COMPRAS set NUM_PEDIDO = :CODCOMPRA, STATUS = "COMPRADO"');
qrSelecionados.SQL.Add('Where SELECIONADO = 1');
qrSelecionados.parambyname('CODCOMPRA').AsInteger:= frmdm.spCompras.ParamByName('RESULT').AsInteger;
qrSelecionados.ExecSQL;
//marca os selecionados para 0 pra evitar que sejam atualizados na proxima compra
qrSelecionados.Close;
qrSelecionados.SQL.Clear;
qrSelecionados.SQL.Add('Update ITENS_COMPRAS set SELECIONADO = 0');
qrSelecionados.SQL.Add('Where SELECIONADO = 1');
qrSelecionados.ExecSQL;
Mensagem:= 'Compra realizada com sucesso.';
Application.MessageBox(Pchar(Mensagem),'Gestão de Compras RM',mb_ok+MB_ICONINFORMATION);
Até funciona bem, mas o grande problema está nesse update pois se, durante o fechamento da compra, outro usuario selecionar um registro, esse update vai acabar marcando como comprando um item que não devia.
qrSelecionados.SQL.Add('Where SELECIONADO = 1');
Alguma sugestão de como melhorar isso?
Discussão (14)
Carregando comentários...