Ir al contenido


Foto

Fast report e imagen


  • Por favor identifícate para responder
11 respuestas en este tema

#1 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 30 diciembre 2010 - 08:19

Muy buenas, alguien podría darme un empujón?
Tengo en fast report, etiquetas, donde me muestra el nombre, el apellido y la ficha. Cada uno de estos registros por Etiqueta. Es decir, cada registro, se muestra en una hoja (etiqueta) aparte.
Pero me gustaria asociarle una foto a cada registro, a cada hoja diferente.
Mi idea es hacer etiquetas, para funcionarios, con sus respectivas fotos, pero no se si hacerlo cargando la foto a la base de datos o por rutas.
Alguna sujerencia de cómo hacerlo?
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 diciembre 2010 - 08:28

Hola Bofillrafael bienvenido a DelphiAccess

Recuerdo haber hecho algo así, no tengo ese programa a la mano, en la tarde/noche (GMT -6) te comento que hice.

Salud OS


  • 0

#3 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 30 diciembre 2010 - 08:36

Voy a estar a la espera entonces, ojalá puedas ayudarme, estoy en mi trabajo buscando información para poder realizarlo, gracias por responder.
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 30 diciembre 2010 - 08:47

Seria bueno que nos pudieras comentar que tipo de BD estas utilizando
  • 0

#5 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 30 diciembre 2010 - 09:26

Es para una empresa que utiliza SQL 2000.
Utilizo Delphi 5
  • 0

#6 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 30 diciembre 2010 - 09:32

Conozco dos formas de hacerlo:

1) Directamente con blob's de datos, ejemplo firebird/interbase.
2) Utilizar un arreglo donde almacenas las imagenes y su Id de la persona, el cual irias pasando en tiempo de ejecución al reporte. Algo complejillo.

Fast Report trae varios demos, hay uno de pecesitos, no recuerdo el nombre del reporte, pero podría darte una buena idea.

Mi pregunta sería, ¿almacenas las imagenes en la bd o solo son rutas a archivos en un directorio del servidor?

Saludos.
  • 0

#7 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 30 diciembre 2010 - 09:39

Tambien uso base de datos 2005, preferentemente 2005.

Almacenamos las rutas y su extension.
Pero también sería interesante guardar la foto.

Voy a ver los ejemplos de delphi de los peces tambien.
  • 0

#8 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 30 diciembre 2010 - 09:46

En mi expereicnia personal, almacenamos documentos como actas de nacimiento, credenciales de elector, etc. y Crecen mucho las bases por el tipo de dato, recommiendo tener dos bases una de solo datos, para tus operaciones diarias y otra base para imagenes, video u otro con los id para poder hacer consultas y extraer la información correcta del cliente.

Saludos, tengo un código no muy depurado q uso en Lazarus para lograr meter imagenes de clientes en fastreport, la opción 2 q te comentaba, si es necesario te lo estaría compartiendo.

Saludos
  • 0

#9 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 30 diciembre 2010 - 12:41

Hola buenas, recurriendo por aqui para hallá encontré algo y he avanzado....

Cuando presiono mi boton imprimir


delphi
  1.     //Activo mi query
  2.     FDM1.Qimp_etiqueta.Close;
  3.     FDM1.Qimp_etiqueta.Params[0].AsInteger := cod_emp;
  4.     FDM1.Qimp_etiqueta.Params[1].AsInteger := ano_ing;
  5.     FDM1.Qimp_etiqueta.Params[2].AsInteger := mes_ing;
  6.     FDM1.Qimp_etiqueta.Params[3].AsInteger := StrToId(Eficini.Text);
  7.     FDM1.Qimp_etiqueta.Params[4].AsInteger := StrToId(Eficfin.Text);
  8.     FDM1.Qimp_etiqueta.Active := true;
  9.  
  10.     //Aqui ya cargo mi foto....
  11.     if FrReport2.PrepareReport then
  12.       begin
  13.       frReport2.LoadFromFile('Untitled.frf');
  14.       PV := TfrPictureView.Create;
  15.       PV :=(frReport2.FindObject('Picture1') as TfrPictureView);
  16.       PV.Picture.LoadFromFile('C: otos_52569.bmp');
  17.       frReport2.ShowReport;
  18.       end;



Pero solo tengo una foto fija, mi idea es cargar cada foto a cada registro, y ese es mi dilema



  • 0

#10 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 30 diciembre 2010 - 02:32

Yo usé Records en Lazarus para hacer lo siguiente:


delphi
  1. type
  2.     StreamRecord = Record
  3.                     IDE : array of String;
  4.                     BLOB : array of TStream;
  5.                   End;  //Arreglo de Streams para Blobs 



Ahora declaramos la variable:


delphi
  1. ImgArray : StreamRecord; //Para  Blobs



En un el procedimiento o boton donde vayas a empezar a llenar el registro, necesitamos varibales para almacenar el Stream, por ejemplo:


delphi
  1. m: TStream;



Ahora llenamos, en este caso con Blobs pero puedes sustituir por un archivo jpg o cualquiera q sea desplegable para fastreport:



delphi
  1. While Not SQLQuery1.EOF do
  2.     begin
  3.       if Not SQLQuery1PHOTO.IsNull then begin
  4.           i := i + 1;
  5.           SetLength(ImgArray.BLOB, i);
  6.           SetLength(ImgArray.IDE, i);
  7.           ImgArray.IDE[i-1] := SQLQuery1ID.Text ;
  8.           m := SQLQuery1.CreateBlobStream(SQLQuery1PHOTO, bmRead);
  9.           ImgArray.BLOB[i-1] := TMemoryStream.Create;
  10.           ImgArray.BLOB[i-1].CopyFrom(m,m.Size);
  11.       end;
  12.       SQLQuery1.Next;
  13.     end;
  14.     m.Free;



Para probar lo que tienes en la útima posición:


delphi
  1. PosArray := High(ImgArray.IDE);
  2.     Image1.Picture.Graphic:= TJpegImage.Create;
  3.     ImgArray.BLOB[PosArray].Seek(0,0);
  4.     Image1.Picture.Graphic.LoadFromStream(ImgArray.BLOB[PosArray]);



Bueno hay cosas que hacer por ejemplo si encuentras o no el IDE del cliente con su respectiva foto:


delphi
  1. function BinSearch(RecordList: StreamRecord; SubStr: string): Integer;
  2. var
  3.   First: Integer;
  4.   Last: Integer;
  5.   Pivot: Integer;
  6.   Found: Boolean;
  7. begin
  8.   First  := Low(RecordList.IDE); //Sets the first item of the range
  9.   Last  := High(RecordList.IDE); //Sets the last item of the range
  10.   Found  := False; //Initializes the Found flag (Not found yet)
  11.   Result := -1; //Initializes the Result
  12.   //If First > Last then the searched item doesn't exist
  13.   //If the item is found the loop will stop
  14.   while (First <= Last) and (not Found) do
  15.   begin
  16.     //Gets the middle of the selected range
  17.     Pivot := (First + Last) div 2;
  18.     //Compares the String in the middle with the searched one
  19.     if RecordList.IDE[Pivot] = SubStr then
  20.     begin
  21.       Found  := True;
  22.       Result := Pivot;
  23.     end
  24.     //If the Item in the middle has a bigger value than
  25.     //the searched item, then select the first half
  26.     else if RecordList.IDE[Pivot] > SubStr then
  27.       Last := Pivot - 1
  28.         //else select the second half
  29.     else
  30.       First := Pivot + 1;
  31.   end



Aclaro solo es una idea, en Lazarus y Lazreport(hijito de fastreport) me ha funcionado, pero no estoy seguro en Delphi, la idea es esa. Espero te de una idea.

Saludos.

  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 diciembre 2010 - 02:44

Hola

Se me hace que es menos complicado de lo que están imaginando, el concepto que yo utilicé es tener las fotos en un directorio X y de ahí se toman de acuerdo a un ID, imagino que debes de tener un ID de cada funcionarrio, sería lo más adecuado.

Como te comenté y si aún es tiempo por la noche publico mi idea.

Salud OS
  • 0

#12 Bofillrafael

Bofillrafael

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 30 diciembre 2010 - 02:58

Gracias gente!
De todas maneras, tratando y tratando y recopilando info lo solucioné asi:



delphi
  1. var
  2. PV: TfrPictureView;
  3. ruta : string;
  4. begin
  5.       ruta := FDM1.Qimp_etiquetaruta.asString +
  6.               FDM1.Qimp_etiquetarut.asString + '.' +
  7.               FDM1.Qimp_etiquetaextension.asString;
  8. //      frReport2.LoadFromFile('Untitled.frf');
  9.       PV := TfrPictureView.Create;
  10.       PV :=(frReport2.FindObject('Picture1') as TfrPictureView);
  11.       if FileExists(ruta) then
  12.         PV.Picture.LoadFromFile(ruta);




Con una ruta fija en el disco, y en el evento getvalues del fastreport.
  • 0




IP.Board spam blocked by CleanTalk.