Ver Mensaje Individual
  #9  
Antiguo 21-07-2007
Avatar de ariefez
ariefez ariefez is offline
Miembro
 
Registrado: sep 2005
Ubicación: Perú - Lima
Posts: 63
Reputación: 19
ariefez Va por buen camino
OK entiendo las razones... como te dije en mi primer post delphi usa algo similar en sus componentes o en alguna parte no me acuerdo donde lo lei, asi q solo era adentrarse un poco , te dejo un par de funciones, basicamente no hago nada, todo lo hace delphi a la hora de comparar (la comparacion es de forma binaria)....

comparacion mediante streams:
Código Delphi [-]
function CompareStreams(StreamA, StreamB: TMemoryStream): Boolean;
begin
  Result := (Assigned(StreamA) and Assigned(StreamB))
    and (StreamA.Size = StreamB.Size)
    and CompareMem(StreamA.Memory, StreamB.Memory, StreamB.Size);
end;

solo falta convertir el campo a stream, eso se arregla con esta funcion:
Código Delphi [-]
function BlobToStream(Field: TField): TMemoryStream;
begin
  Result := nil;
  if Field.IsBlob then
  begin
    Result := TMemoryStream.Create;
    try
      TBlobField(Field).SaveToStream(Result);
    except
      FreeAndNil(Result);
    end;
  end;
end;

aca va un ejemplo de uso:
Código Delphi [-]
var
  StreamA: TMemoryStream;
  StreamB: TMemoryStream;
begin
  ...
  StreamA := BlobToStream(TuTabla.Fields[1]);
  StreamB := BlobToStream(TuTabla.Fields[2]);

  if CompareStreams(StreamA, StreamB) then
    ShowMessage('Los campos blob son iguales');

  if Assigned(StreamA) then
      StreamA.Free;
  if Assigned(StreamB) then
    StreamB.Free;
  ...
end;
Responder Con Cita