Erro na Exclusão

Delphi

17/03/2011

  sqlCupons.Close;
  sqlCupons.SQL.Clear;
  sqlCupons.SQL.Add('SELECT tblClientes.Nome, tblCupons.IdCupom, tblCupons.IdCaixa, tblCupons.IdUsuario, tblCupons.IdCliente,');
  sqlCupons.SQL.Add('tblCupons.IdTipo, tblCupons.TotalCupom, tblCupons.Status, tblCupons.DataCupom');
  sqlCupons.SQL.Add('FROM tblClientes LEFT JOIN tblCupons ON tblClientes.IdCliente = tblCupons.IdCliente');
//if Nome = true then 
  sqlCupons.SQL.Add('WHERE tblClientes.Nome LIKE "%' +EditNomeCliente.Text+ '%"  AND ((tblCupons.IdCupom) Is Not Null)');
if Id = true then
  sqlCupons.SQL.Add('AND tblCupons.IdCupom='+EditId.Text);
if DataIni = true then
  sqlCupons.SQL.Add('AND tblCupons.DataCupom>=#'+EditIni.Text+'#');
if DataFim = true then
  sqlCupons.SQL.Add('AND tblCupons.DataCupom<=#'+EditFim.Text+'#'); if RBNome.Checked then
  sqlCupons.SQL.Add('ORDER BY tblClientes.Nome')
else
  sqlCupons.SQL.Add('ORDER BY tblCupons.'+TipoOrBy);
  sqlCupons.Open; O Código acima, faz um filtro em duas tabelas para exibir informações de vendas   Quando mando excluir o cupon, simplesmente exclui o cliente também em: tblClientes!   Queria saber o que pode ser feito para evitar esse problema?
Paulo Andrade

Paulo Andrade

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

17/03/2011

Mas como você está excluindo os registros, você não colocou esta parte do código aqui.
E lembrando, sempre qdo for excluir regsitros, tente apagar registros utilizando o ClientDataSet da tabela ou um comando SQL contendo somente a tabela da qual deseja excluir o registro.

Espero ter colaborado.
GOSTEI 0
André Silveira

André Silveira

17/03/2011

O que pode estar ocorrendo é erro na configuração dos provider flags do TSQLQuery, com isso ele está deletando tudo da tabela cliente, se os campos deles no sqlquery estiverem para fazer parte do update, sugiro que troque a ordem das tabelas, colocando no from a tabela cupom e o join com a cliente e que nos campos que vem da tabela cliente no sqlquery coloque os provider flags de todos os campos em todas as opções como sendo false.

O motivo de mudar a ordem é que ao montar o sql de exclusão/atualização/inserção a classe provider pega da primeira tabela que tenha após o from.

Atenciosamente,


André Luis da Silveira.
GOSTEI 0
Paulo Andrade

Paulo Andrade

17/03/2011

Mas como você está excluindo os registros, você não colocou esta parte do código aqui.
E lembrando, sempre qdo for excluir regsitros, tente apagar registros utilizando o ClientDataSet da tabela ou um comando SQL contendo somente a tabela da qual deseja excluir o registro.

Espero ter colaborado.
. . O comando que utilizo para excluir é apenas sqlCupons.Delete
GOSTEI 0
Wilson Junior

Wilson Junior

17/03/2011

Sugiro não utilizar assim, além de ficar confuso, foge dos padrões do DataSet, que utiliza o primeiro nome de tabela após o FROM para definir como tabela principal, e ele deve estar apagando os registros da tabela CUPON porque voê deve ter uma FK com ON DELETE CASCADE.

Espero ter colaborado.
GOSTEI 0
Paulo Andrade

Paulo Andrade

17/03/2011

Sugiro não utilizar assim, além de ficar confuso, foge dos padrões do DataSet, que utiliza o primeiro nome de tabela após o FROM para definir como tabela principal, e ele deve estar apagando os registros da tabela CUPON porque voê deve ter uma FK com ON DELETE CASCADE.

Espero ter colaborado.
    A Idéia é apagar apenas o cupom
GOSTEI 0
André Silveira

André Silveira

17/03/2011

Agora fiquei preocupado, uma vez que você quer excluir cupons, pelo que eu saiba você deveria apenas cancelar os cupons, pois quando for fiscalizado e tirarem a memória fiscal da ecf e compararem com o seu banco de dados, vai dar problemas, pois na impressora terá cupons que não foram registrados no sistemas.

Muito cuidado, documentos de saída de mercadoria não devem ser excluídos, no máximo cancelados.

Se quiser mesmo excluir, dá uma olhada nos provider flags como citei em outro post.

Atenciosamente,

André Luis da Silveira.
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

17/03/2011

O André está certo, vc deveria cancelar o cupom e não excluir.   Outro ponto é q vc está listando os clientes e seus respectivos cupons fiscais e não os cupons com seus clientes, com isso vc está excluindo os clientes, reveja seu código, sua base, seus indices e componentes de acesso OK!   Boa sorte e bons códigos.
GOSTEI 0
Paulo Andrade

Paulo Andrade

17/03/2011

Agora fiquei preocupado, uma vez que você quer excluir cupons, pelo que eu saiba você deveria apenas cancelar os cupons, pois quando for fiscalizado e tirarem a memória fiscal da ecf e compararem com o seu banco de dados, vai dar problemas, pois na impressora terá cupons que não foram registrados no sistemas.

Muito cuidado, documentos de saída de mercadoria não devem ser excluídos, no máximo cancelados.

Se quiser mesmo excluir, dá uma olhada nos provider flags como citei em outro post.

Atenciosamente,

André Luis da Silveira.
. . Na verdade, o sistema é pra fim de controle de estoque e controle financeiro. Não é obrigado controle fiscal, mas como eu quero migrar o sistema para uma versão com cupom fiscal e NF-e, vou alterar para cancelar ao invez de excluir.   Obrigado pela dica, mas o poderia fazer com base no código acima, como ficaria o código para apagar apenas o cupom?
GOSTEI 0
Paulo Andrade

Paulo Andrade

17/03/2011

Então pessoal, mais alguma idéia?
GOSTEI 0
POSTAR