PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Problema no mater/detail #277093

13/04/2005

0

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

Responder

Posts

13/04/2005

Igomes

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!


Responder

Gostei + 0

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

Aceitar