Fórum Falha na exclusão de linha via Delphi e Zeos #459265

23/10/2013

0

Boa tarde, amigos!

Criei uma rotina para limpar dados de uma tabela. Porém, apesar de não apresentar falha, não está deletando as linhas na tabela. quando executo o mesmo comando diretamente no banco de dados, funciona perfeitamente.
A rotina é:

with DM_OS do
begin
ZTTemp.First;
while not (ZTTemp.Eof) do
begin
if (ZTTemp.FieldByName('cnpj').AsString = FGerarLote.MaskEditCNPJ.Text) and (ZTTemp.FieldByName('estado').AsBoolean = False) then
begin
PesquisaOS.Active := false;
PesquisaOS.SQL.Clear;
PesquisaOS.SQL.Add('DELETE FROM ONLY temp WHERE chassi = ''' + ZTTemp.FieldByName('chassi').AsString + '''');
PesquisaOS.Active := true;
ZTTemp.ApplyUpdates;
end;
ZTTemp.Next;
end;
end;

Já verifiquei, através de mensagens na tela, que está entrando na rotina, está selecionando corretamente a linhas a serem deletadas, e o comando SQL está correto. Mais uma vez, informo que não há qualquer mensagem de erro nem travamento do sistema.

Alguma alma caridosa poderia me ajudar?
Santos Carvalhais

Santos Carvalhais

Responder

Posts

24/10/2013

Marcos Iwazaki

olha amigo não uso o Zeos.. uso do dbexpress

Talvez seja algo parecido. P executar comando que não necessita retorno como um delete, insert, update vc não usa o Active ou .Open. Procure por um comando tipo Exec ExecComand algo do tipo.
Responder

Gostei + 0

24/10/2013

Santos Carvalhais

olha amigo não uso o Zeos.. uso do dbexpress

Talvez seja algo parecido. P executar comando que não necessita retorno como um delete, insert, update vc não usa o Active ou .Open. Procure por um comando tipo Exec ExecComand algo do tipo.


Como sou iniciante, não posso dizer se isto é válido para o Zeos. Porém, posso garantir que o INSERT e o UPDATE funcionam perfeitamente da maneira que fiz. Só estou tendo problemas com o DELETE. De qualquer maneira, agradeço a resposta.

Em tempo, informo que o banco de dados usado é o Postgres, caso essa informação seja necessária para que alguém me ajude a solucionar o problema.
Responder

Gostei + 0

24/10/2013

Marcos Iwazaki

certo, certo....
bom... como não conheço o Zeos.. fica mais complicado.

tenta verificar essas coisas
var
sql :string;

sql:='DELETE FROM ONLY temp WHERE chassi = ''' + ZTTemp.FieldByName('chassi').AsString + '''';
PesquisaOS.SQL.Add(sql);
tenta debugar este codigo, eu apenas joguei o sql p uma variavel p ficar facil de pegar o result dela no debug.
E depois testa direto no banco p ver se não tem nenhum erro de sintaxe.
PesquisaOS.Active := true;


ZTTemp.ApplyUpdates;
este applyUpdate eu não entendi o pq vc usa. Pois vc não executou nada nele. Esta apenas percorrendo no while.
Responder

Gostei + 0

24/10/2013

Santos Carvalhais

Resolvido


O problema foi solucionado com a inclusão do comando ExecSQL, conforme sugerido.

O código ficou assim:
begin
if (ZTTemp.FieldByName('cnpj').AsString = FGerarLote.MaskEditCNPJ.Text) and (ZTTemp.FieldByName('estado').AsBoolean = False) then
begin
PesquisaOS.Active := false;
PesquisaOS.SQL.Clear;
PesquisaOS.SQL.Add('DELETE FROM ONLY temp WHERE chassi = ''' + ZTTemp.FieldByName('chassi').AsString + '''');
PesquisaOS.Active := true;
PesquisaOS.ExecSQL;
ZTTemp.ApplyUpdates;
end;
ZTTemp.Next;
end;

Obrigado pela ajuda!!!

P.S.: Como faço para mudar este tópico para resolvido?
Responder

Gostei + 0

24/10/2013

Marcos Iwazaki

blz então.
olha eu acho que aparece a opcao de resolvido qdo o ultimo post foi outra pessoa diferente de quem abriu o post..
nesse caso.. veja se c este meu post aparece a opcao p vc.
e mto bom ter resolvido seu problema.
T+
Responder

Gostei + 0

24/10/2013

Santos Carvalhais

As opções que aparecem aqui são Enviar, Code, Quote e URL.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar