DELETE

Olá, tenho um formulário de pedidos onde o usuário seleciona (lookup editável) os materiais que ele quer pedir (por um grid editável) onde esse pedido é salvo na tabela PEDIDOS e em seguida o usuário clica no botão enviar e essas informações são enviadas por email.

O problema é: após ela ser enviada por email eu preciso apagar essa tabela PEDIDOS. tentei colocar no onValidate após a chamada do método que envia a mensagem por email e da um erro, tentei colocar no onInit, para apagar quando ele inicia a aplicação mas ele executa o DELETE em qualquer atualização da página.

Alguém sabe uma solução?

Desde já agradeço.

Bom Dia,

Qual o erro dado, quando deixa o “delete” depois do envio do email?

Você tentou colocar no evento OnAfterInsert, por exemplo?

Rodrigo Lins.

Olá, boa tarde!

O “Enviar” é um botão php? se for, tem que ver se está as variáveis estão sendo gravadas em sessão, pra executar o delete na tabela…

Por acaso o banco é MySQL com transactions? Não sei se pode ser esse o problema, mas em alguns casos específicos acabo precisando usar a macro sc_commit_trans() antes de realizar uma nova operação no mesmo registro, principalmente em grid editáveis…

Talvez uma solução fosse criar um campo do tipo Checkbox (“Enviar email?” Sim -> 1 e Não -> 0), e no evento onValidate conferir se o checkbox foi clicado… se for ‘= 1’ vc chama o método que envia o email e apaga o registro no banco.

Pessoalmente eu prefiro separar algumas coisas em aplicações diferentes, até pra ter um melhor controle de permissões dos usuários… uso uma aplicação do tipo “Controle” que só realiza um método no onInit e já retorna pra aplicação anterior…

Mas como disse o Rodrigo, coloque mais informações sobre os erros… assim fica mais fácil pro pessoal ajudar!

Att.
Robson

Sim, Já tentei colocar no onAfterInsert, mas não da certo pois ele trava na hora de inserir uma linha de dados.
O Banco que estou usando é o SQLBase.
O botão “enviar” na verdade é o botão ‘Ok’ que ja vem no form. Uma coisa que não disse é que esse Grid está dentro de um campo label que criei no form.

O erro dado é o seguinte:

"ERRO

Erro ao acessar o banco de dados
[Microsoft][ODBC SQL Server Driver][SQL Server]The DELETE permission was denied on the object ‘Material_Socilitacao’, database ‘tcesql’, schema ‘dbo’.
DELETE FROM dbo.Material_Socilitacao
"

Olá And,

Verifique as permissões no seu banco de dados, pois parece que o usuário não possui permissões para realizar DELETE…

Att.
Robson

Bom Dia,

Concerteza é problema de permissão ao usuário que está acessando o banco.

Tente executar este comando através da ferramenta SQL Builder, que tem no ScriptCase. Deve ocorrer o mesmo erro.

Verifique as permissões deste usuário no SQL Server ou converse com o responsável (caso não seja você).

Rodrigo Lins.

Ja fiz isso e o DBA ja confirmou que esse usuário que estou usando tem permissão sim. E como eu disse antes, eu consigo fazer um DELETE na tabela no onInit, mas eu preciso fazer depois do envio do email.

Boa Tarde,

Lembrei de uma coisa, voce esta utilizando o SQL Server…

Voce tera que usar a macro sc_commit_trans logo apos o comando DELETE.

Tente fazer desta forma.

Ex:
sc_exec_sql(“DELETE * FROM minha_tabela WHERE codigo=1”);
sc_commit_trans();

Link do manual:
http://downloads.scriptcase.net/downloads/v4/manual/pt_br/webhelp/manual_mp/80-Apendice/08-Programacao/01-Macro_sc/00-macros_sc.htm#sc_commit_trans

Espero que agora consiga.
Rodrigo Lins.

Obrigado rodrigo, mas resolveu não.

Acho que não tem a vê com banco não. Acho que é o momento em que tou dando o Delete, acho que não é possível da um DELETE no onValidate. Agora eu queria saber como ‘burlar’ isso.

And,

Vc atribuiu o valor do campo chave como “Auto-incremento (automático)”? Senão ele não tem o valor da chave primária para realizar o Delete…
Acho que o mais fácil é realizar a rotina nos eventos onAfter…

Att.
Robson