Buenas de nuevo.
Cita:
Empezado por Al González
¿Ya revisaste la propiedad ProviderFlags de ese campo en ambos conjuntos de datos? 
|
Creo que te refieres a ver la propiedad del TField 'ID' que es la clave de la tabla. Pero no puedo (o sé) ver la lista de campos. Cuando va a realizar el cds.Applyupdates, trato de ver los campos del clientdataset (bajo el objeto TDataSet), pero son listas que muestran una direccion de memoria.
TDataSet-> FFields -> FDataSet -> FFields etc. no hay manera de ver mi lista de campos.
Por otra parte he visto usando el depurador detenidamente que al ejecutar el siguiente método del provider:
Código Delphi
[-]
procedure TSQLResolver.DoExecSQL(SQL: TWideStringList; Params: TParams);
var
RowsAffected: Integer;
PS2: IProviderSupport2;
begin
if Supports(Provider.DataSet, IProviderSupport2, PS2) then
RowsAffected := PS2.PSExecuteStatement(SQL.Text, Params)
else
RowsAffected := (Provider.DataSet as IProviderSupport).PSExecuteStatement(SQL.Text, Params);
if not (poAllowMultiRecordUpdates in Provider.Options) and (RowsAffected > 1) then
begin
if Assigned(PS2) then
PS2.PSEndTransaction(False)
else
(Provider.DataSet as IProviderSupport).PSEndTransaction(False);
Provider.TransactionStarted := False;
DatabaseError(STooManyRecordsModified);
end;
if RowsAffected < 1 then
DatabaseError(SRecordChanged);
end;
Ejecuta la línea -> RowsAffected := PS2.PSExecuteStatement(SQL.Text, Params)
Y RowsAffected queda con valor '0' tras ello, y por tanto es lo que hace que se lance la excepción (en la última línea del procedimiento)
No sé, tendrá que ser una tonteria (ni idea).
Creo que sería más fácil aislar el codigo y dejártelo ver o ejecutar a ver que opinas.
Gracias de nuevo.