Erro ao editar registro usando CLientDataset
Estou tendo problema nas tabelas que possuem chave estrangeira...
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
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:
Tem alguma idéia do que pode estar errado?
Ah... no AfterPost estou usando
Por favor se alguém puder ajudar!
Obrigado
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
Curtidas 0
Respostas
Emerson Nascimento
12/05/2006
você precisa informar ao provider que os campos ´estrangeiros´ não devem ser gravados. que eles servem somente para exibição.
mapeie esses campos estrangeiros com o ProviderFlags = pfHidden
mapeie esses campos estrangeiros com o ProviderFlags = pfHidden
GOSTEI 0
Slipkorn
12/05/2006
Tentei fazer o que vc sugeriu também não funcionou, no caso o campo NOME_CIDADE que é da tabela cidade e o campo COD_CIDADE que é a chave estrangeira...
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!
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
Slipkorn
12/05/2006
Tentei fazer o que vc sugeriu também não funcionou, no caso o campo NOME_CIDADE que é da tabela cidade e o campo COD_CIDADE que é a chave estrangeira...
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!
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
Eleusis
12/05/2006
Caro amigo, ja passei por esse problema, se resolve da seguinte forma:
-- 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
-- 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
Slipkorn
12/05/2006
Olá Eusis....
Tentei fazer o que vc sugeriu também não funcionou...
Agora está aparecendo outro erro:
Mais alguma idéia...????
Obrigado pela ajuda!
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
Emerson Nascimento
12/05/2006
o problema pode estar ocorrendo por você ter mais de um clientdataset anexado ao provider (acontece quando se usa nesteddatasets).
tente assim:
tente assim:
if SourceDS = Seu_SQLDataset then begin DeltaDs.FieldByName(´Campo_Estrangeiro1´).ProviderFlags := [pfHidden]; DeltaDs.FieldByName(´Campo_Estrangeiro2´).ProviderFlags := [pfHidden]; end;
GOSTEI 0
Slipkorn
12/05/2006
Esse tá difícil nada ainda apareceu o mesmo erro... E só estou usando um clientdataset nesse provider...
Outra sugestão
Outra sugestão
GOSTEI 0
Slipkorn
12/05/2006
emerson.en
Se vc puder dar uma olhada... eu poderia enviar o fonte para vc...
Valew
T+
Se vc puder dar uma olhada... eu poderia enviar o fonte para vc...
Valew
T+
GOSTEI 0
Emerson Nascimento
12/05/2006
envie o fonte e seu db pra eu dar uma olhada.
emerson.en@gmail.com
emerson.en@gmail.com
GOSTEI 0
Slipkorn
12/05/2006
Kra acabei de enviar o fonte e o banco!!
valew pela ajuda... qq coisa estou no msn...
diegobrandao85@hotmail.com
valew pela ajuda... qq coisa estou no msn...
diegobrandao85@hotmail.com
GOSTEI 0
Emerson Nascimento
12/05/2006
o problema pode estar ocorrendo por você ter mais de um clientdataset anexado ao provider (acontece quando se usa nesteddatasets).
tente assim:
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
Slipkorn
12/05/2006
Salve Emerson
Kra valew pela ajuda... agora funcionou perfeitamento... Nem reparei nesse detalhe fundamental... mais uma vez obrigado!
Problema Resolvido!
Kra valew pela ajuda... agora funcionou perfeitamento... Nem reparei nesse detalhe fundamental... mais uma vez obrigado!
Problema Resolvido!
GOSTEI 0