Fórum Erro ao editar registro usando CLientDataset #321240
12/05/2006
0
Em tabelas que não possuem chave estrangeira... está funcionando tudo perfeitamente (consultar,inserir,editar).
Agora em tabelas que possuem chave estrangeira o edição da erro... consigo inserir e consultar normal mais editar não!
SQLDataSet+DataSetProvider+ClientDataSet+DataSource
SQLDataSet
select PRODUTOR.*, CIDADE.NOME_CIDADE from PRODUTOR inner join CIDADE on (PRODUTOR.COD_CIDADE = CIDADE.COD_CIDADE) where PRODUTOR.COD_PRODUTOR = :CODIGO
Para editar o registro uso apenas: dm.cdsProdutor.Edit;
E para salvar uso o dm.cdsProdutor.Post; aqui aparece o erro na edição!
Erro:
EDatabaseError "DBX Error: No Mapping for Error Code Found"
Tem alguma idéia do que pode estar errado?
Ah... no AfterPost estou usando
if (DataSet as TClientDataSet).ApplyUpdates(0) <> 0 then raise EDataBaseError.Create(Exception(exceptobject).Message) else (DataSet as TClientDataSet).Refresh;
Por favor se alguém puder ajudar!
Obrigado
Slipkorn
Curtir tópico
+ 0Posts
12/05/2006
Emerson Nascimento
mapeie esses campos estrangeiros com o ProviderFlags = pfHidden
Gostei + 0
12/05/2006
Slipkorn
Tentei alterar ambos para pfHidden, eles estavam dessa forma:
ProviderFlags:[pfInUpdate,pfInWhere]
Tentei de várias formas..
mudei para ProviderFlags:[pfInUpdate,pfInWhere,pfHIdden] ambos os campos...
mudei para ProviderFlags:[pfInUpdate,pfInWhere,pfHIdden] somente o campo NOME_CIDADE
Depois tentei fazer o mesmo com o COD_CIDADE...
tentei deixar somente pfHidden.... tentei de várias formas o problema continua...
Outra sugestão?
Obrigado pela ajuda!
Gostei + 0
12/05/2006
Slipkorn
Tentei alterar ambos para pfHidden, eles estavam dessa forma:
ProviderFlags:[pfInUpdate,pfInWhere]
Tentei de várias formas..
mudei para ProviderFlags:[pfInUpdate,pfInWhere,pfHIdden] ambos os campos...
mudei para ProviderFlags:[pfInUpdate,pfInWhere,pfHIdden] somente o campo NOME_CIDADE
Depois tentei fazer o mesmo com o COD_CIDADE...
tentei deixar somente pfHidden.... tentei de várias formas o problema continua...
Outra sugestão?
Obrigado pela ajuda!
Gostei + 0
13/05/2006
Eleusis
-- Va no evento BeforeUpDateRecord do DataSetProvider e ponha o seguinte código:
DeltaDS.FieldByName(´Nome_do_Campo´).ProviderFlags :=[pfHidden]
Faz isso para cada chave estrangeira
Espero ter ajudado
Eleusis
Gostei + 0
16/05/2006
Slipkorn
Tentei fazer o que vc sugeriu também não funcionou...
Agora está aparecendo outro erro:
Dynamic SQL Error SQL Error code = -206 column unknown NOME_CIDADE Column does not belong to referenced table Error Code: 249
Mais alguma idéia...????
Obrigado pela ajuda!
Gostei + 0
16/05/2006
Emerson Nascimento
tente assim:
if SourceDS = Seu_SQLDataset then begin DeltaDs.FieldByName(´Campo_Estrangeiro1´).ProviderFlags := [pfHidden]; DeltaDs.FieldByName(´Campo_Estrangeiro2´).ProviderFlags := [pfHidden]; end;
Gostei + 0
16/05/2006
Slipkorn
Outra sugestão
Gostei + 0
17/05/2006
Slipkorn
Se vc puder dar uma olhada... eu poderia enviar o fonte para vc...
Valew
T+
Gostei + 0
17/05/2006
Emerson Nascimento
emerson.en@gmail.com
Gostei + 0
17/05/2006
Slipkorn
valew pela ajuda... qq coisa estou no msn...
diegobrandao85@hotmail.com
Gostei + 0
17/05/2006
Emerson Nascimento
if SourceDS = Seu_SQLDataset then begin DeltaDs.FieldByName(´Campo_Estrangeiro1´).ProviderFlags := [pfHidden]; DeltaDs.FieldByName(´Campo_Estrangeiro2´).ProviderFlags := [pfHidden]; end;
amigo, já sei o porque do seu problema!!!
preste atenção no código que eu postei pra você (acima). olhe minuciosamente...
encontrou?
se não encontrou, vou te falar: a verificação é feita em função do [b:82846e0c3d]SQLDataset[/b:82846e0c3d] (Seu_[b:82846e0c3d]SQL[/b:82846e0c3d]Dataset ). preste atenção no código acima.
mas você fez a verificação no ClientDataset!!!
if SourceDS = cdsProdutor then
altere para
if SourceDS = [b:82846e0c3d]SQLProdutor[/b:82846e0c3d] then
que seus problemas estarão resolvidos.
Gostei + 0
18/05/2006
Slipkorn
Kra valew pela ajuda... agora funcionou perfeitamento... Nem reparei nesse detalhe fundamental... mais uma vez obrigado!
Problema Resolvido!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)