Deletar registros

02/12/2009

0

bom, tenho um consulta que é exibida no dbgrid todos os campos da tabela usuario, gostaria que quando clicasse no botao excluir, deletasse o registro selecionado!   eu uso delphi e firebird!   eu fiz mais ou menos assim, mais deu errado....   dm.cdsbusu.Close;
dm.cdsbusu.CommandText:='delete from USUARIO where codigo=codigo';
essa linha se nau me engano deve ter um parametro, mais na conseguir fazer dm.cdsbusu.Execute;   me ajudem por favor! abraços....
Thiago Silva

Thiago Silva

Responder

Posts

02/12/2009

Bruno Batista

Boa tarde.

Me parece que você está utilizando ClientDataSet, é só fazer isso.

dm.cdsbusu.Delete;
 
com isso deletará o registro que o cursor estiver posicionado.

Atenciosamente,

Bruno Moreira Batista.
Responder

02/12/2009

Thiago Silva

esse clientdataset q eestou usando é somente de consulta, o outro é q está ligado com o formulario de cadasttro de usuarios, por isso não há como usar esse comando:   dm.cdsbusu.delete;   obrigado msm assim;
Responder

02/12/2009

Bruno Batista

Boa tarde,

Então terá que posicionar o ClientDataSet de cadastro, no registro que deseja excluir.

if (DM.ClientDataSetCadastro.Locate('Chave', DM.ClientDataSetConsulta.FieldByName('CHAVE').Value,[])) then
  DM.ClientDataSetCadastro.Delete;

Atenciosamente,

Bruno Moreira Batista.
Responder

02/12/2009

Thiago Silva

não aconteceu nada, ficou desse jeito o codigo....   begin
  if (dm.cdsusu.Locate('CODIGO', dm.cdsbusu.FieldByName('CODIGO').Value,[])) then
     begin
      dm.cdsusu.Delete;
     end;   end; o q pode ser? e outra, o codigo q postei anteriormente está totalmente errado?
Responder

03/12/2009

Perivaldo Martins

você está usando ClientDataSet e escreveu uma instrução informando um parametro mas não o instancia.

então tente mudar seu código para:

dm.cdsbusu.Close;
dm.cdsbusu.CommandText:='delete from USUARIO where codigo = :codigo';
dm.cdsbusu.param.parambyname('codigo').asinteger := StrToInt(Edit1.Text);
dm.cdsbusu.Execute;

Algo mais ou menos assim, teste pq eu não testei, eu geralmente faço a exclusão usando Query.

Boa sorte e bons códigos.
Responder

07/12/2009

Thiago Silva

o consulta é exibida em um dbgrid, entao para funcionar a consulta deve ser igual ao registro selecionado do dbgrid!
ao invés de ser caixa de texto com q vc colocou no parametro 
mais como faço isso?
Responder

15/12/2009

Paulo Silva

dm.cdsbusu.Close;
dm.cdsbusu.CommandText:='delete from USUARIO where codigo = :codigo';
dm.cdsbusu.param.parambyname('codigo').asinteger := seuDBGRId.Fields[0].asinteger; dm.cdsbusu.Execute;     /coloque o indice do campo  no lugar do zero caso seja o primeiro pode manter o zero pois o indice é incrementado apartir do zero ^^
Responder

18/12/2009

Thiago Silva

rapaz deu esse seguinte erro access violation at address 004d84c0 in module 'videolocadora.exe'. Read of address 000000......saberiam me dizer o q pode ser? desde ja abrigado!
Responder

18/12/2009

Armando Filho

deve servir para qualquer banco

uses IBODataset;

procedure Deletar(xDatabase:TIBODatabase;xTransaction:TIBOTransaction;Tabela,CampoChave,CompararCom:String;QueryRefresh:TIBOQuery;Generator:String;IniciarTransaction:Boolean=True);
var Query:TIBOQuery;
begin
  if (MessageDlg('Confirma a exclusão do registro ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
  begin
    Query:=TIBOQuery.Create(Application.Owner);
    TRY
      Query.IB_Connection:=xDatabase;
      Query.IB_Transaction:=xTransaction;
      if(IniciarTransaction)AND(NOT xTransaction.InTransaction)then
        xTransaction.StartTransaction;

      Query.Close;
      Query.SQL.Text:='DELETE FROM '+Tabela+' WHERE ('+CampoChave+'=:CompararCom)';
      Query.ParamByName('CompararCom').AsString:=CompararCom;
      Query.ExecSQL;

      Query.Close;
      Query.SQL.Text:='SET GENERATOR '+Generator+' TO '+IntToStr(GetMaxCampo(xDatabase,xTransaction,Tabela,CampoChave));
      Query.ExecSQL;

      if(IniciarTransaction)then xTransaction.Commit;
      if(QueryRefresh.Active)then QueryRefresh.Refresh;
    FINALLY
      Query.Close;
      Query.Free;
    END;
  end;
end;


Responder

21/12/2009

Thiago Silva

tem um jeito mais simples nau? ta meio dificil de entender.... vlw
Responder

22/12/2009

Thiago Silva

Boa tarde.. uma terceira forma de se fazer isso é a seguinte, vou charmar de CDSUsuario a query que vc usa para os registros ok, nao esta que esta usando para pesquisa, mas o cds que vc usa pra post e apply, estou considerando que esteja usando um CDS para efetuar os registros.. ------------------------ CDSUsuario .Close;
CDSUsuario .CommandText := ' select * from usuario ';
CDSUsuario .Open;
CDSUsuario .Locate('CODIGO', dm.cdsbusuCODIGO.AsInteger ,[]); CDSUsuario .Delete; CDSUsuario .ApplyUpdates(-1);   -------------------------   Dessa forma é pra dar certo.. das outras que nossos amigos passaram tb dá.. no caso, estou abrindo todos os registros da sua query principal, para que traga tudo que existe na tabela, e dando um locate no campo código, que no caso, deve ser sua pk.. com locate eu jogo o foco no registro da query que vc usa para efetuar transações com o banco de dados pelo codigo da query que vc usa para consultas, apos dar locate e jogar o foco, dou um delete e um applyupdates na query para efetuar a transação...   O problema de se fazer desta forma, é que caso vc tenha muitoa registros na sua query, quando abrir a query principal, por estar abrindo todos os registros, irá demorar um pouco, por consequencia, sua deleção ficará lenta, mas no caso, aparentemente é pra cadastro de usuario, e dificilmente vc terá 10000 usuarios ou coisa do tipow.. então é pra vinga de boa..   Espero ter ajudado.. Sucesso.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar