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)
-   -   Error Imagenes JPG BMP en ibquery (https://www.clubdelphi.com/foros/showthread.php?t=25922)

CarlosHernandez 07-10-2005 19:04:07

Error Imagenes JPG BMP en ibquery
 
hola de nuevo....

trabajo con firebird 1.5 y delphi 6, yo se que he preguntado mucho en este foro pero despues que logre que me guardara las imagenes bmp y jpg todo bien, pero desde ayer me da error con los jpg dice que "imagen bitmap invalida" y aveces la muestra, otras veces no, y da error cuando quiero usar esa tabla en una consulta ibquery y asi no vea la foto me da el error si es un jpg, pero con bmp no....

el famoso error que me carga loco yque da el delphi es el siguiente "bitmap image is no valid."

las imagenes la visualizo en un image1...

codigo para buscar registros

Código Delphi [-]
 with tabla do begin
   //buscar cedula ya existente
   IBQuerypersonal.SQL.Clear;
   IBQuerypersonal.Close;
   IBQuerypersonal.SQL.Add('SELECT * FROM Personal WHERE cedula='+QuotedStr(Edit1.Text)+'' ); //
   IBQuerypersonal.Prepare;
   IBQuerypersonal.Open;
   with tabla.IBQuerypersonal do begin
     edit2.Text:=FieldByName('nombre').AsString;
     edit3.Text:=FieldByName('apellido').AsString;
     //*****ver foto
     if tabla.DSpersonalFOTO.IsNull then begin
       Image1.Picture:=nil;
     end else begin
       if tabla.DSpersonalFORMATOFOTO.AsString ='BMP' then
         image1.Picture.Graphic:=TBitmap.Create
       else if tabla.DSpersonalFORMATOFOTO.AsString ='JPG' then
         Image1.Picture.Graphic:=TJpegImage.Create
       else
         exit;
     m:=tabla.DSpersonal.CreateBlobStream(tabla.DSpersonalFOTO,bmread);
     Image1.Picture.Graphic.LoadFromStream(m);
     m.Free;
   end;
   //********* ver foto
y para ingresarlos..

Código Delphi [-]
 with tabla.IBQuerypersonal do begin
   close;
   SQL.Clear;
   SQL.Add('INSERT INTO Personal (');
   sql.Add('Cedula, Nombre);
   if OpenPictureDialog1.FileName<>'' then begin
     sql.Add(', FOTO');
     sql.Add(', FORMATOFOTO');
   end;
   sql.Add(', apellido') '); //
   sql.Add('VALUES ');
   sql.Add('(arcedula, arnombre');
   if OpenPictureDialog1.FileName<>'' then begin
     sql.Add(', arfoto, arformato');
   end;
   sql.Add(', arpellido)');
   Prepare;
   ParamByName('parcedula').AsString := edit1.Text;
   ParamByName('parnombre').AsString := edit2.Text;
   ParamByName('parapellido').AsString :=edit3.Text;
   if OpenPictureDialog1.FileName<>'' then begin
     ParamByName('parfoto').LoadFromFile(OpenPictureDialog1.FileName, ftBlob);
     s:=AnsiUpperCase(ExtractFileExt(OpenPictureDialog1.FileName));
     if s='.JPEG' then s:='.JPG';
       ParamByName('parformato').AsString :=copy(s,2,3);
   end;
   ExecSQL;
   {...}
y aunque sea que utilice el codigo de busqueda me da el erro si es jpg

Código Delphi [-]
 //buscar cedula ya existente
 IBQuerypersonal.SQL.Clear;
 IBQuerypersonal.Close;
 IBQuerypersonal.SQL.Add('SELECT * FROM Personal WHERE cedula='+QuotedStr(Edit1.Text)+'' ); //
 IBQuerypersonal.Prepare;
 IBQuerypersonal.Open;
en firebird tengo dos campos
formato string que guarda la extension y foto tipo Blob...

agradezco cualqueir ayuda.

lpmlpm 07-10-2005 21:55:39

Simple curiosidad, tienes en el uses de la unidad donde despliegas la imágen, y donde asignas el valor al campo, la unidad "JPEG" ???? esta unidad le permite al objeto Graphic poder interpretar adecuadamente el formato jpg; eso suele resolver el problema en la mayoria de los casos...

Saludos

rastafarey 10-10-2005 18:13:59

Resp
 
Mira puede ser lo dle uses jpge pero estoy seguro que aparte de eso tienes otro problema si usa lo scompoenentes de delphi para imagenes tendras problemas ya que en lo sdb solo soporta bmp.

Asi que usa uno que soporte bmp.

A y una cosa mas te recomeindo guardar solo jpg en tu bd ya que de lo cantrario se pondra un poco pesad por los bmp.

CarlosHernandez 11-10-2005 16:05:26

Si Tengo Uses JPEG
 
la verdad que si tengo jpeg declarada arriba, pero y asi con eso me da el error, pero si hago un locate en el Ibdataset directamente no me da ningun tipo de error y eso es lo que me tiene con dolor de cabeza, solo me lo da en sql con un Ibquery conectado a mi IBdataset.... pero es muy lento ya que manejo mas de 30000 registros, y en otra tabla que me da el error (Personal) hay 500 personas y cada una con foto...

no se si ese codigo tiene algo mal o ???????
el dilema es locate si sirve pero es muy lento
sql no sirve pero es mas rapido.....

mi intencion es pasar todas las fotos a jpg para dismunir el tamaño de la bdd pero con este error no e podido y mi bdd pesa 80 MB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

gracias por las respuestas...... acepto cualquier sugerencia..

Gydba 11-10-2005 19:12:43

Hola,

En la búsqueda del foro tenés algunas respuestas sobre como cargar y guardar imágenes JPG/BMP/etc en Interbase/Firebird. Te invito a visitarlo.

De todas maneras si querés economizar el tamaño de la BD podrías cambiar el diseño y NO almacenar las imágenes dentro de ella. En lugar de eso almacená la ruta hacia la imágen y vas a conseguir una mayor performance en las consultas y aprobechamiento de espacio. Pero eso último depende demasiado de como querés el diseño del sistema.

Saludos!

CarlosHernandez 28-10-2005 23:23:21

Listo..
 
ok gracias a todos por sus repuestas, ya resolvi el problema, es algo muy simple que no vi, el codigo al parecer esta bien (o por lo menos Funciona) lo que paso es que a mi Ibquery personal le tenia agsinado en otro formulario (creo que era el 21 de 30 de mi sistema) un Dbimage, y por supuesto me iba dar error.....

espero que le sirva de algo el codigo... :cool:


La franja horaria es GMT +2. Ahora son las 13:33: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