Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Barbosa

Apagar registro usando o DBNAVIGATOR

Recommended Posts

Oi pessoal, estou com uma dúvida,

Tenho um grid e coloquei o DBNAVIGATOR com as opções de avançar, retornar, primeiro, ultimo e deletar.

Quando eu deleto, o registro até desaparece do GRID, mas ñ apagar fisicamente, ou seja, o registro continua lá e quando eu retorno a consulta ele aparece novamente.

Uso o componentes :

- SqlQuery -> da paleta DBExpress

- Data Source -> da paleta Data Acess

- ClienteDataSet -> da paleta Data Acess

- DataSetProvider -> da paleta Data Acess

 

Se alguem puder dar uma ajuda...

 

Eu tb poderia usar um dbclick do Dbgrid para exluir o registro e ele apagar certinho, mas quando reconstruo a tabela demora muito, por isso estou querendo testar usando O DBNAVIGATOR e ver se assim ele fica um pouco mais rápido.

Fazendo assim eu usei o código:

id := DS_Consulta_MG.DataSet.FieldByName('ID_INTERNO').AsString;
QR_Consulta_MG.Close;
QR_Consulta_MG.SQL.Clear;
QR_Consulta_MG.SQL.Add('DELETE FROM EXAMES WHERE ID_INTERNO ='+id);
QR_Consulta_MG.ExecSQL;

// RECONSTRUINDO O GRID

CDS_Consulta_MG.Active:=False;

QR_Consulta_MG.Close;
QR_Consulta_MG.SQL.Clear;
QR_Consulta_MG.SQL.Add('SELECT e.ID, e.IDPACIENTE, e.DATA, e.HORA, e.NUMEROEXAME, e.ID_INTERNO,e.LAUDO , p.ID,  p.NOME');
QR_Consulta_MG.SQL.Add('FROM EXAMES e, PACIENTES p');
QR_Consulta_MG.SQL.Add('WHERE e.IDPACIENTE = p.ID');
QR_Consulta_MG.SQL.Add('AND nome LIKE '''+'' + nome.Text +'%''');
QR_Consulta_MG.SQL.Add('AND data BETWEEN :data_ini AND :data_fim');

QR_Consulta_MG.SQL.Add('ORDER BY e.DATA, e.HORA, p.NOME');
QR_Consulta_MG.Params.ParamByName('data_ini').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_ini.Date);
QR_Consulta_MG.Params.ParamByName('data_fim').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_fim.Date);

QR_Consulta_MG.Open;
CDS_Consulta_MG.Active:=True; 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, informe quais componentes está utilizando.

 

Estou usando um DBGRID, DBrichedit, um dbnavigator e os que já citei acima.

A intenção é lista no dbgrid todas as informações do período de datas selecionado, aí o usuário pode escolher através das informações que aparecem no dbrichedit quais ele poderá apagar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade, gostaria de saber sobre seu dataset, no caso, o TClienteDataSet.

 

Para excluir um registro usando o dbNavigator seria necessário apenas linkar o TDataSource ao TClientDataSet e o TDBNavigator ao TDataSource. Com isto, ao clicar no sinal de - (menos) o registro seria excluido.

 

Quando você faz este processo o sistema gera alguma mensagem de erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade, gostaria de saber sobre seu dataset, no caso, o TClienteDataSet.

 

Para excluir um registro usando o dbNavigator seria necessário apenas linkar o TDataSource ao TClientDataSet e o TDBNavigator ao TDataSource. Com isto, ao clicar no sinal de - (menos) o registro seria excluido.

 

Quando você faz este processo o sistema gera alguma mensagem de erro?

Assim como você fala eu já tinha feito, e ñ aparece nenhuma mensagem de erro, quando clico no sinal - o registro até some do dbgrid, mas ñ exclui fisicamente, quando eu saio do dbgrid e retorno lá está ele novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não me lembro se o DBNavigator dispara o comando ApplyUpdates(0), esse comando que atualiza a tabela no banco de dados, geralmente nos botões Excluir coloco esse comando após o comando delete via ClienDataSet, claro que se a Exclusão for via SQL não precisa disso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não me lembro se o DBNavigator dispara o comando ApplyUpdates(0), esse comando que atualiza a tabela no banco de dados, geralmente nos botões Excluir coloco esse comando após o comando delete via ClienDataSet, claro que se a Exclusão for via SQL não precisa disso.

 

olha o applyUpdates funcionar, mas aí apareceu outro problema:

Seguinte eu uso duas tableas para montar a consulta, só que quando uso o CDS_consulta.ApplyUpdates(-1), ele ñ reconhece os campos da segunda tabela.

O sql está assim:

SELECT 
              e.ID, 
              e.IDPACIENTE, 
              e.DATA, 
              e.HORA, 
              e.NUMEROEXAME,  
              e.ORIGEMEXP, 
              e.ID_INTERNO,
              e.LAUDO,
              p.ID,  
              p.NOME
FROM 
             EXAMES e, 
             PACIENTES p

WHERE 
             e.ORIGEMEXP =:ORIGEM
AND
             e.DATA BETWEEN  :DATA_INI AND :DATA_FIM
AND
             e.IDPACIENTE = p.ID
AND
             e.laudo LIKE '%repetir%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi erro meu não me atentar que se trata de uma consulta envolvendo 2 tabelas.

 

Colega nesse caso eu não me lembro de exclusões em 2 tabelas simultâneamente através ClientDataSet, seria melhor montar instruções SQL separadas para cada tabela de acordo com determinada condição na claúsula WHERE.

 

Posso até estar enganado mas não sei se é possível esse tipo de operação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade ele excluir só o de uma tabela, mas preciso usar as duas para relacionar o nome e o id.

Mas já tô usando a exclusão com instrução.

O problema da instrução que q depois q eu deleto, preciso reconstruir a consulta pq se ñ o iten exluído fica na tela e quando reconstuo o curosr volta para o inicio da tabela, forçando o usuário toda vez q exclui voltar ao ponto posterior a exclusão...

Mas acho q irei deixar assim mesmo...rsrs

Vlw pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.