Cita:
Empezado por Bauhaus1975
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).
|
Eso me temía. Ahora, ¿podrías detener el programa en esa línea que señalas y decirnos qué valor tienen la propiedad
SQL.Text y los parámetros de la colección
Params (Params.Count, Params [0].Value, Params [1].Value...)?
En cuanto a las banderas del campo ID, parecen estar bien. La clave va a estar en esa sentencia SQL Update (SQL.Text) que no afecta a la base de datos, probablemente porque los parámetros indican un registro inexistente.
Esperamos retroalimentación.
Al González.
