Ver Mensaje Individual
  #7  
Antiguo 12-03-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Bauhaus1975 Ver Mensaje
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.
Responder Con Cita