Deletar registro no DBGrid
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
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:
[b:34a6bb90a5]Como posso remover um registro utilizando essa Query?[/b:34a6bb90a5]
Desde já agradeço aqueles que puderem ajudar.
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
Curtidas 0
Respostas
Steve_narancic
05/07/2009
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;
GOSTEI 0
Edilsonlima
05/07/2009
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:
Não sei onde está o erro.
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.
GOSTEI 0
Steve_narancic
05/07/2009
Tente dar um commit logo apos o execsql;
DataModule2.ADOTHistorico.commit;
GOSTEI 0
Edilsonlima
05/07/2009
steve_narancic,
Estiv viajado e sem acss cmputaores, só agora fiz o teste, mas está faltan uma declaração e não estou conseguindo.
aguardo
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
GOSTEI 0