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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar