Ver Mensaje Individual
  #3  
Antiguo 11-03-2009
Bauhaus1975 Bauhaus1975 is offline
Miembro
 
Registrado: may 2005
Ubicación: Málaga
Posts: 135
Reputación: 22
Bauhaus1975 Va por buen camino
Buenas,
Al Gónzalez ¡cuánto honor! que seas quien trate de guiarme entre este mar de sombras.

Cita:
Empezado por Al González Ver Mensaje
Para eliminar el registro, el componente proveedor necesita identificarlo de algún modo. Normalmente es mediante el campo que tenga la bandera pfInKey en ProviderFlags. Pero eso depende de qué valor tenga la propiedad UpdateMode del proveedor. Por lo general se recomienda upWhereKeyOnly.
No sé a que te refieres con eliminar. Solamente he obtenido un registro de la tabla 'clientes' y muestro sus datos en el formulario con controles 'data-aware'. El error me sale al editar. La consulta no cruza tablas, y la propiedad en el provider (TDataSetProvider) está UpdateMode=upWhereKeyOnly y creo que no debe dar problemas, ¿cierto?

Bien, ahora paso a intentar dar más información porque no soy capaz de aclararme viendo el debug de todo lo que me has recomendado.
Esto es lo que veo:

En la unit DBClient ejecutando el método 'TCustomClientDataSet.GetDelta', en la última línea 'DataPacketToVariant(TempPacket, Result);' Tras ejecutarla y ponerse sobre el 'end', llama posteriormente a una serie de código ensamblador en la unit 'System', tras lo cual es dónde se muestra la excepción. Creo entender que el código ensamblador ese es lo que lanza la expceción, pero no puedo sacar nada en claro.

La líneas de ensamblador que comento. Unit 'System':
Código Delphi [-]
function _IntfClear(var Dest: IInterface): Pointer;
{$IFDEF PUREPASCAL}
var
  P: Pointer;
begin
  Result := @Dest;
  if Dest <> nil then
  begin
    P := Pointer(Dest);
    Pointer(Dest) := nil;
    IInterface(P)._Release;
  end;
end;
{$ELSE}
asm
        MOV     EDX,[EAX]
        TEST    EDX,EDX
        JE      @@1
        MOV     DWORD PTR [EAX],0
        PUSH    EAX
        PUSH    EDX
        MOV     EAX,[EDX]
        CALL    DWORD PTR [EAX] + VMTOFFSET IInterface._Release
        POP     EAX
@@1:
end;

¿Podemos avanzar con esta nueva información?
Un saludo y gracias por la ayuda.
Responder Con Cita