Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Me lleva el diablo.... (https://www.clubdelphi.com/foros/showthread.php?t=16754)

sercornejov 10-12-2004 07:12:54

Me lleva el diablo....
 
Hola.

Tengo una base de datos que está en FB 1.5. A esa base le tengo que "acomodar" la medio bobadita de 50.000 fotos a un campo blob sub_type 0 segment size 80.

Claro la tabla ademas tiene otros campos (5 mas) pero pues esos no son tan complicados...

La idea es poder hacerlo en un script.

Como le hago? Como lo harián Ustedes los magos?

Las fotos están en formato .JPG, en el Disco Duro.

AAAAAAAYUUUUUUUUUDAAAAAAAAAAAAAAAAAAA
:confused: :confused: :( :confused: :(

mosorio 10-12-2004 18:16:23

Hola sercornejov, creo que yo lo haría de la siguiente forma, ya que son demasiados ficheros los que se encuentran en el DD, debes implementar una pequeña operación con una sql que efectúe un update, ya que me supongo que la tabla tiene datos, realizar un ciclo que determine el número de registros deacuerdo a los registros en esa tabla y a cada fichero colocarle el mismo nombre del id del registro, asi al ir corriendo el ciclo, debería ir una instrucción que busque el fichero en una ruta indicada del almacenaje de los ficheros.

Espero que con esta ayuda o idea te pueda dar un impulso para que no te detengas.
Saludos

PD: Buena frase la que tienes en el pie de pagina. ¡Arriba la patria! y que disculpen los foristas pero cuando se tiene la tierra lejos uno se entusiasma con cualquier cosa que se la recuerde.

sercornejov 10-12-2004 19:49:33

Hola paisano...

Gracias por responder.

La verdad las fotos se llaman igual que el ID (la cédula del personaje), pero lo que no se es como hacer la sentencia UPDATE con un BLOB para insertar...

Ayuda!!!!!!!

Tomás 10-12-2004 20:19:10

Hola:

Yo utilizo esto, pero es para cargar de una en una (puedes adaptarlo a tu caso), y guardo el formato en otro campo porque a veces son .jpg y otras .bmp, si las tuyas son siempre .jpg no necesitarás este dato.

Te pongo el código por si es esto lo que quieres y te sirve de algo adaptándolo a tus necesidades.

Código Delphi [-]
procedure TFPalabras.TBCargaFotoClick(Sender: TObject);
var
  m, f: TStream;
  s: string;
begin
  //se abre picturedialog para cargar fichero foto que se coja
  if dlgOpenPicture.Execute then
    begin
      //modo edición
      DM.IBDSPalNue.Edit;
      //stream a partir campo Blob que contendrá la imagen
      m:= DM.IBDSPalNue.CreateBlobStream(DM.IBDSPalNueFOTO, bmWrite);
      //stream para acceder al archivo gráfico
      f:= TFileStream.Create(dlgOpenPicture.filename, fmOpenRead);
      //copiar de un stream a otro
      m.CopyFrom(f, f.Size);
      //coger formato foto y ponerlo en campo correspondiente
      s:= AnsiUpperCase(ExtractFileExt(dlgOpenPicture.FileName));
      if s='.JPEG' then
        s:= '.JPG';
      DM.IBDSPalNueFORMATOFOTO.AsString:= Copy(s,2,3);
      DM.IBDSPalNue.Post;
      //destruir streams
      f.Free;
      m.Free;
    end
end;

Para mostrar la imagen lo hago con un TImage. Si te interesa saber como me lo dices.

Un saludo.

sercornejov 13-12-2004 16:45:04

Gracias.

VOY A ENSAYARLO (LA DEMORA HA SIDO POR VIAJE...) LO DE MOSTRARLO, ES DECIR SACANDOLO DE LA db LO HACES COMÓ?

Gracias.

Tomás 13-12-2004 23:39:45

Hola:

Para mostrar la foto hago esto:

Pongo un TDataSource enlazado al DataSet correspondiente y un TImage.

En el evento OnDateChange del DataSource pongo esto:
Código Delphi [-]
procedure TFPalabras.DSFotoPalNueDataChange(Sender: TObject; Field: TField);
var
  m: TStream;
begin
  if DM.IBDSPalNueFOTO.IsNull then
    //para registros sin foto poner imagen vacia
    ImgFotoPalNue.Picture := nil
  else
    begin
      if DM.IBDSPalNueFORMATOFOTO.AsString = 'BMP' then
          //si es formato BMP
          ImgFotoPalNue.Picture.Graphic:= TBitmap.Create
      else if DM.IBDSPalNueFORMATOFOTO.AsString = 'JPG' then
          //si es formato JPG
          ImgFotoPalNue.Picture.Graphic:= TJpegImage.Create
      else
        Exit;
      //copiar los datos desde la tabla con un stream
      m:= DM.IBDSPalNue.CreateBlobStream(DM.IBDSPalNueFOTO, bmRead);
      ImgFotoPalNue.Picture.Graphic.LoadFromStream(m);
      m.Free;
    end;
end;

Para borrar la foto (del TImage y del campo Blob) pongo esto:
Código Delphi [-]
procedure TFPalabras.TBBorraFotoClick(Sender: TObject);
begin
  if Application.MessageBox('¿Seguro que desea borrar esta foto?','Borrar',mb_OkCancel+mb_IconQuestion)= IdOk then
    begin
      //borrar imangen
      ImgFotoPalNue.Picture.Assign(nil);
      //borrar foto del campo blob
      if (DM.IBDSPalNue.State <> dsEdit) and (DM.IBDSPalNue.State <> dsInsert) then
        DM.IBDSPalNue.Edit;
      DM.IBDSPalNueFOTO.Assign(nil);
      DM.IBDSPalNue.Post;
    end;
end;
Como te dije tengo fotos .bmp y .jpg y por eso tengo un campo donde guardo el formato.

Para .jpg hay que añadir en el uses la unit JPeg

Puedes mirar aquí:
http://www.rinconcitodelphi.com/comp...omponentes.htm
De título: Imágenes en campos Blob de Interbase y componentes IBX

Suerte. Tomás.


La franja horaria es GMT +2. Ahora son las 06:23:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi