Array
(
)

Deletar registros

Thiago Silva
   - 02 dez 2009

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....

Bruno Batista
   - 02 dez 2009

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.

0
|
0

Thiago Silva
   - 02 dez 2009

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;

0
|
0

Bruno Batista
   - 02 dez 2009

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.

0
|
0

Thiago Silva
   - 02 dez 2009

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?

0
|
0

Martins
   - 03 dez 2009

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.

0
|
0

Thiago Silva
   - 07 dez 2009

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?


0
|
0

Paulo Silva
   - 15 dez 2009

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 ^^

0
|
0

Thiago Silva
   - 18 dez 2009

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!


0
|
0

Armando Filho
   - 18 dez 2009

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;

0
|
0

Thiago Silva
   - 21 dez 2009

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

vlw

0
|
0

Thiago Silva
   - 22 dez 2009

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.

0
|
0