Fórum Deletar registro no DBGrid #371992

05/07/2009

0

Amigos,

Mais uma vez deparei com um problema que não estou conseguindo resolver. O caso é o seguinte:

Tenho uma consulta que exibe o resultado em um DBGrid com a SQL que faz consulta em duas tabelas. A tabela PROCESSO e a tabela HISTORICO

SQL

SELECT PROCESSO.PROCESSO, PROCESSO.NOME,HISTORICO.COD_PROCESSO, HISTORICO.DATA, MOVIMENTACAO.NOME_MOVIMENTACAO, HISTORICO.OBS
FROM PROCESSO INNER JOIN (MOVIMENTACAO INNER JOIN HISTORICO ON MOVIMENTACAO.COD_MOVIMENTACAO = HISTORICO.COD_MOVIMENTACAO) ON PROCESSO.COD_PROCESSO = HISTORICO.COD_PROCESSO
ORDER BY PROCESSO.NOME


Até aí tudo bem, agora precisaria deletar um dos registros (da tabela HISTORICO) exibidos, dando um duplo clique sobre o registro na DBGid.

Quando efetuo o duplo clique tudo se processa como se estivesse sido deletado , mas não acontece.

Acredito ser pelo fato d a SQL fazer a consulta em duas tabelas, pois como teste fiz a consulta direta na tabela HISTORICO e aí é deletado normalmente.

Não posso fazer a consulta diretamente na tabela pois as informações que retornassem não seria nada apresentáveis para o usuário.

O código que utilizei foi o seguinte:

begin
if MessageDlg (´tem certeza que deseja excluir a informacao?´,mtConfirmation,[mbYes,mbNo],0)= mrYes then begin
   DataModule2.ADOTHistorico.Delete;
   ShowMessage(´Movimento deletado com sucesso´);

end;


[b:34a6bb90a5]Como posso remover um registro utilizando essa Query?[/b:34a6bb90a5]

Desde já agradeço aqueles que puderem ajudar.


Edilsonlima

Edilsonlima

Responder

Posts

05/07/2009

Steve_narancic

Utilize um outro dataset passando para ele a instrução de delete algo como abaixo.


ADODelHistorio.close;
ADODelHistorio.sql.clear;
ADODelHistorio.sql.add(´Delete from HISTRORIO where COD_PROCESSO =:COD_PROCESSO AND COD_MOVIMENTACAO = :COD_MOVIMENTACAO´);
ADODelHistorio.Parambyname(´COD_PROCESSO´).value := ADOTHistorico.fieldbyname(´COD_PROCESSO´).value;
ADODelHistorio.Parambyname(´COD_MOVIMENTACAO´).value := ADOTHistorico.fieldbyname(´COD_MOVIMENTACAO´).value;
ADODelHistorio.execsql;



Responder

Gostei + 0

05/07/2009

Edilsonlima

Olá steve_narancic,

Antes de mais nada obrigado pela atenção.

Fiz exatamente como vc sugeriu, mas continua do mesmo jeito, as mensagens são exibidas como se houvesse deletado o registro porem no banco não acontece nada.

Ficou assim:
procedure TF_Consulta_Proc.DBGrid1DblClick(Sender: TObject);
begin
if MessageDlg (´Tem certeza que deseja excluir a informacao?´,mtConfirmation,[mbYes,mbNo],0)= mrYes then begin

   DataModule2.ADOQDelHistorico.close;
   DataModule2.ADOQDelHistorico.sql.clear;
   DataModule2.ADOQDelHistorico.sql.add(´Delete from HISTORICO where COD_PROCESSO =:COD_PROCESSO AND COD_MOVIMENTACAO = :COD_MOVIMENTACAO´);
   DataModule2.ADOQDelHistorico.Parameters.Parambyname(´COD_PROCESSO´).value := DataModule2.ADOTHistorico.fieldbyname(´COD_PROCESSO´).value;
   DataModule2.ADOQDelHistorico.Parameters.Parambyname(´COD_MOVIMENTACAO´).value := DataModule2.ADOTHistorico.fieldbyname(´COD_MOVIMENTACAO´).value;
   DataModule2.ADOQDelHistorico.execsql;

   ShowMessage(´Movimento deletado com sucesso´);

end;


Não sei onde está o erro.


Responder

Gostei + 0

05/07/2009

Steve_narancic

Tente dar um commit logo apos o execsql;


DataModule2.ADOTHistorico.commit;



Responder

Gostei + 0

08/07/2009

Edilsonlima

steve_narancic,
Estiv viajado e sem acss cmputaores, só agora fiz o teste, mas está faltan uma declaração e não estou conseguindo.


[Error] fConsulta.pas(112): Undeclared identifier: ´commit´


aguardo


Responder

Gostei + 0

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

Aceitar