Problema com CASCATA (CASCADE)

Delphi

27/02/2014

Olá Pessoal,

Eu estou tentando deletar uma TABELA PAI e uma TABELA FILHO ao mesmo tempo no qual minhas tabelas são:
PAI
TABELA - KIT
PK - ID_KIT

FILHO
TABELA - DETALLE_KIT (ESTA EM ESPANHOL)
FK - ID_KIT

Então dei uma boa pesquisada e eu vi que pelo IBExpert tem como ser criado a chave estrangeira com o DELETE RULE: CASCADE. Então eu recriei a minha chave estrangeira e fiz isso.

Após isso criei o seguinte código no Edit do IBExpert e dei um commit ele funcionou perfeitamente deletou a tabela pai e filho do codigo 26 ao mesmo tempo:
delete from kit B where B.id_kit = 26


E então fui testar no delphi eu criei um TSQLDataSet, Provider, e um ClientDataset com o seguinte commandText, no qual cria um parametro do 0 -ID do tipo ftInteger:
delete from kit B where B.id_kit = :ID


E então OnClick do botão excluir eu fiz o seguinte código:
procedure TF_FormKit.btnExcluirClick(Sender: TObject);
begin
  if MessageDlg('Tem certeza que deseja excluir o registro?', mtInformation, [mbYes, mbNo],0) = mrYes then
  begin
     if not dtsConsultarKit.DataSet.IsEmpty then
     begin
       dtsConsultarKit.DataSet.Delete;
       if dtsConsultarKit.DataSet is TClientDataSet then
       begin
        with TClientDataSet(dtsExcluirKit.DataSet) do
        begin
          Close;
          Params[0].AsInteger := TClientDataSet(dtsConsultarKit.DataSet).Fields[0].AsInteger;
          Open;
        end;
        ShowMessage('Registro excluido com sucesso!');
       end;
     end;
  end;
  dtsConsultarKit.DataSet.Close;
  dtsConsultarKit.DataSet.Open;
  dtsConsultarDetalheKit.DataSet.Close;
  dtsConsultarDetalheKit.DataSet.Open;
  limpar;
  edtProcurar.SetFocus;
end; 


E ele não consegue excluir pois ele da o seguinte error:
Project CMS.exe raised exception class EDBClient with message 'Cannot delete master record with details.'.


Alguem saberia o porque deste erro se no IBExpert funciona normalmente e no delphi não? To precisando muito resolver esse erro!
-Eu já chequei os parametros do TSQLDataSet com o ClientDataSet estão os mesmos.
-Eu já testei pra ver se o
TClientDataSet(dtsConsultarKit.DataSet).Fields[0].AsInteger
está pegando o ID e está pegando corretamente.

Eu sinceramente não sei o que está errado.

Desde já agradecido!
Edson Vilhalba

Edson Vilhalba

Curtidas 0

Respostas

Marcio Reis

Marcio Reis

27/02/2014

Olá,

Não sei como é sua estrutura de programação, mas quando se utiliza clientdataset, imaginio que vc esteja utilizando o trio fantastico( clientdataset, provider, query ou dataset),

Quando utilizamos este processo e vamos realizer um master/detail, realizamos a configuração do objeto query do filho realizamos a ligação do provider master utilizando propriedade datasource na query, OK.

No clientedataset realizamos a ligação do detail com o master utilizando a propriedade datasetfield , Ok,

Se isto estiver OK, basta vc ativar a propriedade no cascadedelete no provider

Marcio
GOSTEI 0
Edson Vilhalba

Edson Vilhalba

27/02/2014

Olá,

Não sei como é sua estrutura de programação, mas quando se utiliza clientdataset, imaginio que vc esteja utilizando o trio fantastico( clientdataset, provider, query ou dataset),

Quando utilizamos este processo e vamos realizer um master/detail, realizamos a configuração do objeto query do filho realizamos a ligação do provider master utilizando propriedade datasource na query, OK.

No clientedataset realizamos a ligação do detail com o master utilizando a propriedade datasetfield , Ok,

Se isto estiver OK, basta vc ativar a propriedade no cascadedelete no provider

Marcio


Marcio era exatamente isso! Muito Obrigado!
GOSTEI 0
POSTAR