24/02/2006

Update affected more than 1 record (DBX) Problema

Estou enfrentando esse problema, ao tentar dar o Post, ApplyUpdates, é retornado o seguinte erro

´[b:ce1b599629]Update affected more than 1 record´[/b:ce1b599629]

Notei que o DataSetProvider está setado para não permitir que mais de um registro seja alterado (poAllowMultiRecordUpdates=False). É isso mesmo que eu quero..

Notei tbm q o problema acontece porque tenho algums registros que são iguais, onde será diferenciado apenas pelo numero de série,

Alguém sabe como contornar isso?


Eniorm

Respostas

24/02/2006

Vinicius2k

Enio,

Isto acontece exatamente por ter registros iguais e a propriedade [b:2742e65bf8]UpdateMode[/b:2742e65bf8] do TDataSetProvider *deve* estar setada para [b:2742e65bf8]upWhereKeyOnly[/b:2742e65bf8].
Esta propriedade é a responsável por definir quais os campos entram na cláusula WHERE da instrução SQL de UPDATE gerada pela Midas.

Altere o [b:2742e65bf8]UpdateMode[/b:2742e65bf8] para [b:2742e65bf8]upWhereAll[/b:2742e65bf8]. Com isso a cláusula WHERE incluirá todos os campos e, a não ser que você tenha registros com 100¬ dos campos repetidos, o erro não mais ocorrerá.

T+


Responder Citar

26/02/2006

Eniorm

blza..... mas veja só

no select eu uso assim pra abrir o dataset onde o registro será alterado:

SELECT NOME, END, ..... FROM...

veja q o campo código eu não estou buscando, pois assim qdo eu inserir, o proprio banco vai criar o autoincremento (FB)

qdo eu trazia o campo codigo, eu tinha problema, pois o campo codigo não poreria ficar em branco.

me disseram pra usar o TField setado para AutoInc, mas eu não gosto de usar os TFields,

então como devo proceder?????,


Responder Citar

27/02/2006

Vinicius2k

Enio,

Se você não trouxer para no select ao menos um campo único, você terá este problema.
O que a Midas faz é construir para você a instrução SQL para atualizar os dados no servidor e ela constrói a instrução baseada nos campos que você trouxe no select.
Penso que você deveria trazer o campo único no select e setar ´Required := False;´ no TField correspondente ao seu campo único (tanto no TSQLDataSet quanto no TClientDataSet).


Responder Citar