Ver Mensaje Individual
  #2  
Antiguo 16-03-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Siguiendo la ayuda que encontraste tendrías que hacer algo como esto:

1. En tu tabla access, el campo que quieras para almacenar la foto debe ser de tipo "Object OLE"

2. En tu aplicación, enlaza un componente ADOTable (o Table o el que uses) a tu tabla access.

3. En ese componente entra al editor de campos (doble clic sobre el componente) y agrega todos los campos (menú contextual|Add all fields).

4. Uno de estos campos corresponde al de la foto, se llamará algo así como ADOTable1Foto suponiendo que el campo de tu tabla access se llama foto. Este campo, en el inspector de objetos podrás ver que es de tipo TBlobField.

5. Para poner datos en un camp BlobField usas su método LoadFromStream o LoadFromFile.

6. Para recuperar los datos de un campo BlobField usas su método SaveToStream o SaveToFile.

--------------

Ahora bien, analicemos cómo agregar una imagen y como recuperar una imagen.

Agregar una imagen

Aquí debes decidir si tomas la imagen desde un archivo en disco o si ya la tienes en un componente TImage en tu aplicación.

Si es lo primero, entonces puedes usar el método LoadFromFile del BlobField (lee arriba). Pero si es lo segundo, deberás usar un objeto Stream como intermediario:

Código Delphi [-]
var
  Stream: TMemoryStream;

begin
  Stream := TMemoryStream.Create;

  try
    // Pasas el contenido de Image1 a Stream
    Image1.SaveToStream(Stream);

    // Ponemos el Stream al principio
    Stream.Position := 0;

    // Pasas el contenido del Stream al BlobField
    ADOTable1Foto.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

Aquí estoy suponiendo que ya tienes preparado el registro donde poner la foto. Es decir, si es para un registro nuevo:

Código Delphi [-]
ADOTable1Foto.Insert;

Y si era un registro ya existente:

Código Delphi [-]
ADOTable1Foto.Edit;

una vez que te hayas colocado en el registro deseado.

Ya que tengas esto, procedes como ya sabes. Llenas los otros campos y ejecutas el método Post del ADOTable.


Recuperar una imagen

Para el paso inverso, mostrar en un componente Image, la imagen del registro actual, también necesitas un Stream de intermediario:

Código Delphi [-]
var
  Stream: TMemoryStream;

begin
  Stream := TMemoryStream.Create;

  try
    // Pasas el contenido del BlobField al Stream
    ADOTable1Foto.SaveToStream(Stream);

    // Ponemos el Stream al principio
    Stream.Position := 0;

    // Pasas el contenido del Stream a Image1
    Image1.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

Espero que te haya quedado más claro, si no, consulta otra vez, pero dedícale un tiempo a intentar entender. He puesto el código como lo fui pensando, sin probar; así que es posible que haya uno que otro error.

// Saludos
Responder Con Cita