Fast report e imagen
Started by
Bofillrafael
, Dec 30 2010 08:19 AM
11 replies to this topic
#1
Posted 30 December 2010 - 08:19 AM
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?
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?
#2
Posted 30 December 2010 - 08:28 AM
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
Recuerdo haber hecho algo así, no tengo ese programa a la mano, en la tarde/noche (GMT -6) te comento que hice.
Salud OS
#3
Posted 30 December 2010 - 08:36 AM
Voy a estar a la espera entonces, ojalá puedas ayudarme, estoy en mi trabajo buscando información para poder realizarlo, gracias por responder.
#4
Posted 30 December 2010 - 08:47 AM
Seria bueno que nos pudieras comentar que tipo de BD estas utilizando
#5
Posted 30 December 2010 - 09:26 AM
Es para una empresa que utiliza SQL 2000.
Utilizo Delphi 5
Utilizo Delphi 5
#6
Posted 30 December 2010 - 09:32 AM
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.
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.
#7
Posted 30 December 2010 - 09:39 AM
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.
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.
#8
Posted 30 December 2010 - 09:46 AM
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
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
#9
Posted 30 December 2010 - 12:41 PM
Hola buenas, recurriendo por aqui para hallá encontré algo y he avanzado....
Cuando presiono mi boton imprimir
Pero solo tengo una foto fija, mi idea es cargar cada foto a cada registro, y ese es mi dilema
Cuando presiono mi boton imprimir
delphi
//Activo mi query FDM1.Qimp_etiqueta.Close; FDM1.Qimp_etiqueta.Params[0].AsInteger := cod_emp; FDM1.Qimp_etiqueta.Params[1].AsInteger := ano_ing; FDM1.Qimp_etiqueta.Params[2].AsInteger := mes_ing; FDM1.Qimp_etiqueta.Params[3].AsInteger := StrToId(Eficini.Text); FDM1.Qimp_etiqueta.Params[4].AsInteger := StrToId(Eficfin.Text); FDM1.Qimp_etiqueta.Active := true; //Aqui ya cargo mi foto.... if FrReport2.PrepareReport then begin frReport2.LoadFromFile('Untitled.frf'); PV := TfrPictureView.Create; PV :=(frReport2.FindObject('Picture1') as TfrPictureView); PV.Picture.LoadFromFile('C: otos_52569.bmp'); frReport2.ShowReport; end;
Pero solo tengo una foto fija, mi idea es cargar cada foto a cada registro, y ese es mi dilema
#10
Posted 30 December 2010 - 02:32 PM
Yo usé Records en Lazarus para hacer lo siguiente:
Ahora declaramos la variable:
En un el procedimiento o boton donde vayas a empezar a llenar el registro, necesitamos varibales para almacenar el Stream, por ejemplo:
Ahora llenamos, en este caso con Blobs pero puedes sustituir por un archivo jpg o cualquiera q sea desplegable para fastreport:
Para probar lo que tienes en la útima posición:
Bueno hay cosas que hacer por ejemplo si encuentras o no el IDE del cliente con su respectiva foto:
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.
delphi
type StreamRecord = Record IDE : array of String; BLOB : array of TStream; End; //Arreglo de Streams para Blobs
Ahora declaramos la variable:
delphi
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
m: TStream;
Ahora llenamos, en este caso con Blobs pero puedes sustituir por un archivo jpg o cualquiera q sea desplegable para fastreport:
delphi
While Not SQLQuery1.EOF do begin if Not SQLQuery1PHOTO.IsNull then begin i := i + 1; SetLength(ImgArray.BLOB, i); SetLength(ImgArray.IDE, i); ImgArray.IDE[i-1] := SQLQuery1ID.Text ; m := SQLQuery1.CreateBlobStream(SQLQuery1PHOTO, bmRead); ImgArray.BLOB[i-1] := TMemoryStream.Create; ImgArray.BLOB[i-1].CopyFrom(m,m.Size); end; SQLQuery1.Next; end; m.Free;
Para probar lo que tienes en la útima posición:
delphi
PosArray := High(ImgArray.IDE); Image1.Picture.Graphic:= TJpegImage.Create; ImgArray.BLOB[PosArray].Seek(0,0); 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
function BinSearch(RecordList: StreamRecord; SubStr: string): Integer; var First: Integer; Last: Integer; Pivot: Integer; Found: Boolean; begin First := Low(RecordList.IDE); //Sets the first item of the range Last := High(RecordList.IDE); //Sets the last item of the range Found := False; //Initializes the Found flag (Not found yet) Result := -1; //Initializes the Result //If First > Last then the searched item doesn't exist //If the item is found the loop will stop while (First <= Last) and (not Found) do begin //Gets the middle of the selected range Pivot := (First + Last) div 2; //Compares the String in the middle with the searched one if RecordList.IDE[Pivot] = SubStr then begin Found := True; Result := Pivot; end //If the Item in the middle has a bigger value than //the searched item, then select the first half else if RecordList.IDE[Pivot] > SubStr then Last := Pivot - 1 //else select the second half else First := Pivot + 1; 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.
#11
Posted 30 December 2010 - 02:44 PM
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
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
#12
Posted 30 December 2010 - 02:58 PM
Gracias gente!
De todas maneras, tratando y tratando y recopilando info lo solucioné asi:
Con una ruta fija en el disco, y en el evento getvalues del fastreport.
De todas maneras, tratando y tratando y recopilando info lo solucioné asi:
delphi
var PV: TfrPictureView; ruta : string; begin ruta := FDM1.Qimp_etiquetaruta.asString + FDM1.Qimp_etiquetarut.asString + '.' + FDM1.Qimp_etiquetaextension.asString; // frReport2.LoadFromFile('Untitled.frf'); PV := TfrPictureView.Create; PV :=(frReport2.FindObject('Picture1') as TfrPictureView); if FileExists(ruta) then PV.Picture.LoadFromFile(ruta);
Con una ruta fija en el disco, y en el evento getvalues del fastreport.