Problema no mater/detail

Delphi

13/04/2005

Boa tarde pessoal,

Eu com um problema meio confuso em um master/detail

No componente DataSource da query Master, no evento onDataChange eu coloco o seguinte código:

-------------------------------------------------------------
obs: qryMaterial = Master e qryLocalizacao = Detail
-------------------------------------------------------------

if ((qryMaterial.State = dsBrowse) or (qryMaterial.State = dsBrowse)) then
begin
qryLOCALIZACAO.Close;
qryLOCALIZACAO.SQL.Clear;
qryLOCALIZACAO.SQL.ADD(´SELECT * FROM LOCALIZACAO WHERE CODMATERIAL = :CODMATERIAL´);
qryLOCALIZACAO.ParamByName(´CODMATERIAL´).Value := dsMaterial.DataSet.fieldbyname(´CODMATERIAL´).AsString;
qryLOCALIZACAO.Open;
end
else
begin
qryLOCALIZACAO.Close;
qryLOCALIZACAO.SQL.Clear;
qryLOCALIZACAO.SQL.ADD(´SELECT * FROM LOCALIZACAO WHERE CODMATERIAL = 0´);
qryLOCALIZACAO.Open;
end;

Esse código é o que realiza a função do Master/Detail.

Na query qryLocalizacao, na propriedade DataSource eu aponto para o dataSource da tabela Master, no meu caso o dsMaterial.

Até aí tudo ok. Caso eu edite o registro funciona perfeitamente, mas caso eu tente inserir um novo material e associá-lo a um local, na hora de gravar dá um erro de violação de chave estrangeira, como se estive tentando salvar primeiro o detail e o master depois, desta forma, daria o erro, pois o material ainda não existe.

Se eu ativar a opção de CacheUpdate nas querys esse erro não ocorre, mas apenas os dados da tabela master são gravados, enquando os dados da tabela detail não são.

eu gravo da seguinte forma.

Begin
dataBase.applyUpdates([tabelaMaster, tabelaDetal]);
transaction.commitRetaining;
end;

Alguém tem alguma sugestão do que posso fazer pra resolver o problema?


Igomes

Igomes

Curtidas 0

Respostas

Igomes

Igomes

13/04/2005

Me desculpem, a linha:

if ((qryMaterial.State = dsBrowse) or (qryMaterial.State = dsBrowse)) then

na verdade é assim:

if ((qryMaterial.State = dsBrowse) or (qryMaterial.State = dsEdit)) then

Eu postei errado!


GOSTEI 0
POSTAR