problemas com o dbexpress

Delphi

25/01/2008

Saudações pessoal,

Estou envolvido em um projeto onde estamos usando dbexpress+delphi2007+firebird. Tenho 1 problema e 1 duvida.

a duvida: No DataSetProvaider, o que devo usar no UpdateMode? Estou usando upWhereAll(onde não esta dando problema nenhum), mas em alguns materiais que tenho lido vejo que o pessoal recomenda usar upWhereKeyOnly, porem quando uso este método tenho tido erros ao gravar arquivos.

o problema: Tenho um select feito da seguinte forma:
Select pm.*,
       tp.descricao as nome_tpproduto
from produto_marca pm
inner join tipo_produto tp on (tp.id_tipoproduto = pm.id_tipoprod)
order by pm.descricao


onde NOME_TPPRODUTO não faz parte da tabela mas o dbexpress entende que ele faz parte da tabela PRODUTO_MARCA.
fui nos field do SQLDataSet e mudei as propriedades:
Required->False
ProviderFlags -> todos para False
mesmo assim ao gravar um registro tenho uma tela de erro onde diz: Table unknown produto_marca. Só que a tabela esta aberta. Depois apresenta o seguinte erro: No key specified.

O que pode esta ocorrendo?

Desde já agradeço a atenção de todos.


Antonio Correia


Antoniocorreia

Antoniocorreia

Curtidas 0

Respostas

Adriano Santos

Adriano Santos

25/01/2008

Oi Antonio, é muito simples.

Realmente você precisa usar upWhereKeyOnly no DataSerProvider. Agora precisa mexer também no ClientDataSet. No Fields Editor você precisa alterar a propriedade ProviderFlags dos campos.

[list:7d211c1a55]
[*:7d211c1a55]1. Selecione o campo chave e marque-o como as três primeiras opções como True. As duas primeras já estão, terá que marcar só o pfInKey.

[*:7d211c1a55]2. Agora selecione os demais campo, NÃO INCLUINDO AQUELES DO JOIN, e deixe marcado só as duas primeiras opções.

[*:7d211c1a55]3. Os campos que vem em JOIN desmarque todas as opções.

[/list:u:7d211c1a55]

Pronto!


GOSTEI 0
Felipeiw

Felipeiw

25/01/2008

Bom dia Adriano, fiquei com uma duvida, no Segundo caso, nao é para ficar somente true a primeira opcao, pois se a segunda opcao ficar true estou dizendo para o campo entrar na clausula where, me desculpe se eu estiver errado.

Abs


GOSTEI 0
POSTAR