Tabelas relacionadas com where não grava atualização
Estou com o seguinte problema: 2 tabelas relacionadas usando o seguinte commandtext no clientdataset:
select A.codfilial, A.codcliente, A.codatendimento, A.codtecnico,A.Status, A.atendimento_DT, A.aprovado_vl, A.visita_vl,A.solicitacao, A.conclusao, A.conclusao_dt, A.tipo, A.local, A.codproduto1, B.CODCLIENTE, B.NOME, B.Bairro from atendimentos as A, clientes as B where A.codfilial = :CODFILIAL and ATENDIMENTO_DT >= :DI and ATENDIMENTO_DT <= :DF and A.Status = :Status and A.local = :LOCAL and B.CODCLIENTE = A.CODCLIENTE.
Informo os valores das variáveis e abro o cds normalmente, surgem os registros, OK.
Configurei o providerflags true(2 primeiros) e false(2 ultimos) de todos campos da tabela A, exceto CODATENDIMENTO que é a chave primária (3 primeiros true, ultimo false.
Já os campos da tabela B foram configurados todos para false.
,
Altero apenas o campo codtecnico e dou apply updates.
Testei com as 3 opções de updatemode do datasetprovider:
dsp1.UpdateMode := upWhereAll -> Erro: Column unknown CODCLIENTE_1At line 17, column 20
dsp1.UpdateMode := upWhereKeyOnly -> Erro: Unable to find record. No key specified
dsp1.UpdateMode := upWhereChanged; -> Erro: Update affected more than 1 record.
Se eu ao invés de usar where ou Join, usar campos lookup funciona, mas fica muito mais lento! E não pode ser que isso não funcione, eu é que estou fazendo algo errado.
A impressão que dá é que o providerflags não esta sendo considerado...
Alguém tem uma dica pra me ajudar?
select A.codfilial, A.codcliente, A.codatendimento, A.codtecnico,A.Status, A.atendimento_DT, A.aprovado_vl, A.visita_vl,A.solicitacao, A.conclusao, A.conclusao_dt, A.tipo, A.local, A.codproduto1, B.CODCLIENTE, B.NOME, B.Bairro from atendimentos as A, clientes as B where A.codfilial = :CODFILIAL and ATENDIMENTO_DT >= :DI and ATENDIMENTO_DT <= :DF and A.Status = :Status and A.local = :LOCAL and B.CODCLIENTE = A.CODCLIENTE.
Informo os valores das variáveis e abro o cds normalmente, surgem os registros, OK.
Configurei o providerflags true(2 primeiros) e false(2 ultimos) de todos campos da tabela A, exceto CODATENDIMENTO que é a chave primária (3 primeiros true, ultimo false.
Já os campos da tabela B foram configurados todos para false.
,
Altero apenas o campo codtecnico e dou apply updates.
Testei com as 3 opções de updatemode do datasetprovider:
dsp1.UpdateMode := upWhereAll -> Erro: Column unknown CODCLIENTE_1At line 17, column 20
dsp1.UpdateMode := upWhereKeyOnly -> Erro: Unable to find record. No key specified
dsp1.UpdateMode := upWhereChanged; -> Erro: Update affected more than 1 record.
Se eu ao invés de usar where ou Join, usar campos lookup funciona, mas fica muito mais lento! E não pode ser que isso não funcione, eu é que estou fazendo algo errado.
A impressão que dá é que o providerflags não esta sendo considerado...
Alguém tem uma dica pra me ajudar?
Marcello Assumpção
Curtidas 0
Respostas
Marcello Assumpção
25/07/2015
DESCOBRI!!
Olha, Não sei se estarei ajudando alguém, mas quero deixar aqui registrado que achei a solução para o problema acima.
Tem que configurar o providerflags no SQLDataset e não no ClientDataset como eu vinha fazendo. Passou a funcionar corretamente.
Mas li muito e não achei nada sobre isso. A rapidez justifica o esforço, muito melhor que campos lookups.
Olha, Não sei se estarei ajudando alguém, mas quero deixar aqui registrado que achei a solução para o problema acima.
Tem que configurar o providerflags no SQLDataset e não no ClientDataset como eu vinha fazendo. Passou a funcionar corretamente.
Mas li muito e não achei nada sobre isso. A rapidez justifica o esforço, muito melhor que campos lookups.
GOSTEI 0