Criei uma grid para listar relatórios de pedidos feitos por usuários de um portal. Estes pedidos estão armazenados numa tabela chamada psd_pedidos, com os seguintes campos:
pedido_id
pedido_data
pedido_data_hora
pedido_valor
pedido_status
Esta tabela está como chave estrangeira de outra, chamada psd_itens, no campo pedido_id, que armazena os itens do pedido com a seguinte estrutura:
itens_id
pedido_id
itens_id_produto
itens_produto
itens_quantidade
itens_valor_produto
itens_total
Criei um formulário que o usuário chama a partir da referida grid com o resultado dos pedidos, para atualizar o status dele. Isso sem problemas. Meu desejo é que ele, no momento que mudasse o status do pedido, fizesse simultaneamente a atualização da quantidade do produto que está numa tabela chamada psd_produtos. Esta tabela, chamada psd_produtos, possui o campo prd_id, cujo valor é repassado no momento da inserção dos itens do pedido, para a tabela psd_itens no campo itens_id_produto. Junto com este identificador do produto nessa mesma tabela é inserida a quantidade dele que foi comprada no campo itens_quantidade, que desejo utilizar no SQL para atualizar o campo prd_estoque, reduzindo dele na atualização quantidade comprada.
Para fazer a atualização que desejo, estou tentando usar no evento onAfterUpdate
a macro sc_exec_sql com a seguinte SQL:
sc_exec_sql (
"
Update psd_produtos
SET prd_estoque = prd_estoque - (Select itens_quantidade FROM psd_itens WHERE pedido_id = {pedido_id})
WHERE
prd_id IN (Select itens_id_produto FROM psd_itens WHERE pedido_id = {pedido_id})
",
"cnx ");
E aqui está meu problema: não estou conseguindo fazer a construção adequada. Ao tentar fazer a atualização do campo prd_estoque, o scriptcase me retorna a seguinte mensagem: Erro ao acessar o banco de dados. Subquery returns more than 1 row. Ou seja, ele dá erro por que a subconsulta retorna mais que uma linha (e é isso mesmo, pois há pedidos com mais do que um item). Como contorno esse problema?