Ir para conteúdo

POWERED BY:

Arquivado

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

Eduardo Estudando

[Resolvido] Excluir Registro no Selecionado no DBgrid

Recommended Posts

Ola pessoal,

Estou usando banco Firebird, usando o componente Intebase,

Quero selecionar um registro no DBgrid e depois clicar em um Botão para

excluir este registro.

estou uando o seguinte comando:

 

form2.ibquery1.sql.add('delete from dataus where codigo = :codigo');

form2.IBQuery1.open;

 

Mas esta retornando o seguinte erro:

 

'Token unknown - Line 2 char 1

'delete'

 

Alguem por favor pode me ajudar!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente da seguinte maneira:

 

TForm2.IBQuery1.ExecSQL;

 

O método Open é utilizado para executar um comando SELECT. Para executar INSERT, UPDATE ou DELETE você deve usar ExecSQL.

 

Um abraço,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente da seguinte maneira:

 

TForm2.IBQuery1.ExecSQL;

 

O método Open é utilizado para executar um comando SELECT. Para executar INSERT, UPDATE ou DELETE você deve usar ExecSQL.

 

Um abraço,

 

Olá fernando.fxsoft

Obrigado pela ajuda, eu fiz o seguinte:

 

form2.ibquery1.SQL.Clear;

form2.ibquery1.sql.add('delete from dataus where codigo =:codigo');

form2.IBQuery1.ExecSQL;

 

Mas o registro simplemente não exclui, e não aparece nenhuma mensagem de erro, apenas o foco no grid vai

para o primeiro registro.

 

Pode me ajudar por favor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou você passar o valor do parâmetro :codigo para a sua sql, através do parambyname... se não me falha a memória, já que não tenho o delphi no trabalho para verificar, ficaria o código +/- assim:

 

 

form2.ibquery1.SQL.Clear;form2.ibquery1.sql.add('delete from dataus where codigo =:codigo');form2.ibquery1.sql.ParamByName('codigo').AsInteger := StrToInt(Edit1.text); //Ver se no IBQuery é ParamByName mesmo ok?form2.IBQuery1.ExecSQL; 

Uma vez que passe o valor do parâmetro antes do execSql, o delete deve funcionar.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso ainda não tenha funcionado, tente colocar o código no contexto de uma transação para que ao final as alterações sejam gravadas no banco.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal, ainda não funcionou,

 

Meu fonte esta assim:

 

procedure TForm4.Button1Click(Sender: TObject);

begin

form2.ibquery1.SQL.Clear;

form2.ibquery1.sql.add('delete from dataus where codigo =:codigo');

form2.IBQuery1.Params[0].value:=form2.DBGrid1.DataSource.DataSet.findfield('codigo').asInteger;

form2.IBQuery1.ExecSQL;

end;

end.

 

Mas está apresentado o seguinte erro: 'Project CADASTRO.exe raised exception class EAccessViolation whith message

'Access Violation at address 004B170B in module CADASTRO.EXE Read of Address '00000000'.

 

e marca a terceira linha, como se o erro fosse nela

form2.IBQuery1.Params[0].value:=form2.DBGrid1.DataSource.DataSet.findfield('codigo').asInteger;

 

 

Alguem pode me ajudar por favor!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente alterar esta linha:

 

form2.IBQuery1.Params[0].value:=form2.DBGrid1.DataSource.DataSet.FieldByName('codigo').asInteger;

 

 

 

 

Ola pessoal, ainda não funcionou,

 

Meu fonte esta assim:

 

procedure TForm4.Button1Click(Sender: TObject);

begin

form2.ibquery1.SQL.Clear;

form2.ibquery1.sql.add('delete from dataus where codigo =:codigo');

form2.IBQuery1.Params[0].value:=form2.DBGrid1.DataSource.DataSet.findfield('codigo').asInteger;

form2.IBQuery1.ExecSQL;

end;

end.

 

Mas está apresentado o seguinte erro: 'Project CADASTRO.exe raised exception class EAccessViolation whith message

'Access Violation at address 004B170B in module CADASTRO.EXE Read of Address '00000000'.

 

e marca a terceira linha, como se o erro fosse nela

form2.IBQuery1.Params[0].value:=form2.DBGrid1.DataSource.DataSet.findfield('codigo').asInteger;

 

 

Alguem pode me ajudar por favor!?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal,

Resolvi o problema assim, no form4( que eu uso para fazer a pergunta, se quer realmente excluir)

eu coloquei um IBquery. e ai o fonte ficou assim:

 

procedure TForm4.Button1Click(Sender: TObject);

begin

ibquery1.sql.add('delete from dataus where codigo =:codigo');

IBQuery1.Params[0].Value:=form2.DBGrid1.DataSource.DataSet.findfield('codigo').asInteger;

IBQuery1.ExecSQL;

FORM2.ibquery1.SQL.clear;

FORM2.ibquery1.SQL.Add('SELECT codigo,usuario,nivel FROM DATAUS order by usuario');

FORM2.ibquery1.Close;

FORM2.ibquery1.Open;

FORM4.CLOSE;

 

Ai funcionou,

Obrigado pela ajuda de todos!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apagar registro da dbgrid é simples...

 

dbgrid1.SelectedRows.Delete;

dm_pesq.bancocodigo.Value;

dm_pesq.qrybanco.Delete;

dm_pesq.qrybanco.Close;

dm_pesq.qrybanco.open;

dm_pesq.qrybanco.Refresh;

 

 

Acima esta os códigos que eu coloquei para apagar registro selecionado na dbgrid e funcionou direitinho!!

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.