REVELAR

Fórum Deletar em cascata no Delphi 5 e banco Firebird 2.0? #328783

06/09/2006

0

Olah pessoal, nao sei seh eh aqui no forum do Delphi ou no do Firebird que devo postar essa duvida, mas, estou querendo deletar em cascata usando firebird, e nao sei como fazer ainda.

Tipo na tabela pai (sind2) tenho um campo chamado matricula PK e na tabela filha (corrente) tambem tenho o mesmo campo FK

Indices:
Na tabela pai criei uma unique chamada
UNQ_MATR

e Na tabela filha criei uma chave secundaria chamada
FK_CORRENTE_1

Agora preciso ao deletar um numero de matricula na tabela pai(SIND2) automaticamente apague a matricula da tabela filha (CORRENTE) independente dos lançamentos na tabela filha, deve deletar tudo.

Fiz o seguinte codigo em um no evento de um button para deletar na tabela pai
procedure TFExcluirAssoc.BtExcluirClick(Sender: TObject);
var
ok: boolean;
begin
if trim(e1.text)=´´ then begin
showmessage(´Selecione a ID do Associado que vc deseja excluir´);
end else
if application.messagebox(Pchar(´Deseja Excluir este Lançamento:´ + #13+ dm.ibq1.FieldByName(´Matricula´).AsString +´  ´+ 13+ dm.ibq1.FieldByName(´associado´).AsString), Pchar(´Excluir Dados´+Self.Caption), MB_ICONQUESTION
+ MB_YESNO) = IDYES then begin
  try //começo co except unie o laço
    with dm.ibq1 do
      begin
        close;
        sql.clear;
        sql.add(´delete from sind2´); //codigo SQL para deletar linha
        sql.add(´where matricula = ´+quotedstr(e1.text)+´´);
        ExecSQL;
      end;
  except
      application.MessageBox(´Erro na Exclusão! Tente Novamente!´,´Aviso´,mb_ok+mb_iconexclamation);
      ok:=false;
  end; // final do except
  if ok then
     begin
       dm.ibt2.Commit;  //comitar o lançamento
       dm.ibq1.open;
       sbar.SimpleText := ´Linha Excluída...´;
     end else begin
       dm.ibt2.Rollback;
       sbar.SimpleText := ´Abortado...´;
     end;
  end;
end;


Aqui neste codigo nao estou conseguindo deletar nada, ou seja diz que excluiu, mais nao exclui nada, veja que uso a clausula where com o campo e e1.text(edit1.text) no edit o codigo que eu digitar deve ser excluido, mais nao esta acontecendo nada.

Na parte do IBExpert coloquei esse script
alter table corrente
constraint fk_corrente_1 //fk_corrente_1 eh a FK
foreign key (matricula, associado)
references sind2(matricula, associado)
on delete CASCADE


Mais aparece o erro de script
[b:f3d7747149]Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 22.
constraint.[/b:f3d7747149]

Agradeço a ajuda de todos
Abraços
Adriano.


Adriano_servitec

Adriano_servitec

Responder

Posts

06/09/2006

Adriano_servitec

Pessoal, me desculpe, foi uma grande distraçao minha aqui, o edit nao estava localizando o associado certo conforme eu digitava o numero da ID do mesmo. Por isso nao excluia o associado.

Por um motivo de eu nao ter colocado um LOCATE tive esse problema, pois coloquei na linha do MESSAGEBOX o nome e o numero da matricula do associado, mais nao excluia soh me mostrava, poir isso o erro.

Me desculpe mesmo, ja resolvi meu problema.


Responder

Gostei + 0

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

Aceitar