PDA

Ver la Versión Completa : Problemas de Exception Class


edwin.simon
17-09-2014, 16:30:49
Buen día, como están?

Estoy trabajando en un proyecto para carnet-izar a una cantidad N de personas, no estoy guardando la foto en la base de datos solo guardo la ruda de dicha foto, problema esta cuando consulto o trato de imprimir un registro que no tiene foto, presenta la siguiente Exception.

project pry_sistemacarnet.exe raised exception class einvalidGraphic with Unknown picture file extension (.) process stopped use step o run to continuer



//Buscar Registro
procedure TFrm_ImprimirCarnet.BuscarRegistroClick(Sender: TObject);
begin
if Tbl_Carnet.Locate('Codigo_carnet',Edit1.Text,[])then
Image1.Picture.LoadFromFile(Tbl_Carnet.FieldByName('Foto').AsString);
end;




// Mostrar foto en un Reporte
procedure TFrm_ImprimirCarnet.ppImage1Print(Sender: TObject);
begin
ppImage1.Picture.LoadFromFile(Tbl_Carnet.FieldByName('Foto').AsString);
end;

radenf
17-09-2014, 17:06:35
Hola edwin.simon

Prueba con este código que evalúa si el campo Foto está vacío o no.

if Tbl_Carnet.Locate('Codigo_carnet',Edit1.Text,[])then
if Tbl_Carnet.FieldByName('Foto').IsNull then
Dialogs.MessageDlg('¡ No existe foto de esta persona !', mtWarning, [mbOk], 0);
else
Image1.Picture.LoadFromFile(Tbl_Carnet.FieldByName('Foto').AsString);

Es más preciso utilizar un Query que un Locate.

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:= 'Select Codigo_carnet, Foto from Tbl_Carnet where Codigo_carnet like '+QuotedStr(Edit1.Text+'%') ;
Query1.Open;
if Query1.RecordCount >0 then
Image1.Picture.LoadFromFile(Query1.FieldByName('Foto').AsString)
else
Dialogs.MessageDlg('¡ No existe foto de esta persona !', mtWarning, [mbOk], 0);
end;

Lo hice de memoria, pero la idea va por ahí.
Saludos

roman
17-09-2014, 17:18:32
Por el mensaje de error que recibes da la impresión de que la ruta que guardas en la base de datos no contiene la extensión. ¿Ya verificste eso?

// Saludos

edwin.simon
17-09-2014, 18:05:16
Gracias radenf y roman, con la primera rutina por lo meno elimino al Exception ya que me muestra un mensaje si tiene o no tiene foto y con la segunda tengo que especificar todos los campos de tabla, de igual puedo usarla.

roman ese es el problema que tengo cuando el registro no tiene foto lo que quiero es poder imprimirlo tengo o no foto.

roman
17-09-2014, 18:28:02
roman ese es el problema que tengo cuando el registro no tiene foto lo que quiero es poder imprimirlo tengo o no foto.

Cierto, no había leído correctamente la pregunta.

En casos similares yo he optado por usar una imagen por defecto para quienes no tienene foto, por ejempo, una silueta. Cuando se guarda un registro sin foto, en el campo pongo la ruta de esa imagen. De esta manera evito comprobar en cada caso si hay o no foto.

// Saludos

edwin.simon
17-09-2014, 19:18:56
el problema es que tengo mas de 4000 registro porque estoy haciendo un cambio ya que cuando guardo la foto en la base de datos esta se torna super lenta.

mil gracias seguiré investigando roman.

radenf
17-09-2014, 19:27:15
Me alegra que te funcionara.
Lo que señala roman también es una buena alternativa.
Puedes cambiar Dialogs.MessageDlg('¡ No existe foto de esta persona !', mtWarning, [mbOk], 0); por Exit y no mostrará el mensaje.

Salu2

edwin.simon
17-09-2014, 19:39:56
Disculpa radenf no comprendo la parte de cambiar, ........!
Puedes cambiar Dialogs.MessageDlg('¡ No existe foto de esta persona !', mtWarning, [mbOk], 0); por Exit y no mostrará el mensaje.

radenf
17-09-2014, 21:24:11
Si sustituyes la frase:

Dialogs.MessageDlg('¡ No existe foto de esta persona !', mtWarning, [mbOk], 0);

por

Exit

El mensaje no aparecerá y no te dará la excepción por la que preguntaste, si es que así lo deseas.
Es sólo una opción, ya que a muchos no le gusta que aparezcan mensajes que requieren la intervención del usuario.

Saludos

roman
17-09-2014, 21:55:44
el problema es que tengo mas de 4000 registro porque estoy haciendo un cambio ya que cuando guardo la foto en la base de datos esta se torna super lenta.


No digo que guardes las fotos en la base. Lo que digo es que en el mismo directorio donde guardes las fotos, guardes un jpg con la imagen por defecto. Esta imagen puede llamarse, por ejemplo, "silueta.jpg".

Entonces, cuando des de alta un registro y no dispongas de foto para es registro, en el campo foto almacenes "c:\ruta\a\las\fotos\silueta.jpg".

Así, cuando leas los registros, dejas el código tal como lo tenías al principio. Si el registro no tiene foto, lo que cargará será silueta.jpg y no te marcará el error.

// Saludos

edwin.simon
19-09-2014, 14:12:05
Me siento muy agradecido por toda la ayuda brindada, gracias radenf y roman, no tengo problema con el mensaje que presenta ya que me indica lo que esta pasando y con relación a colocar la imagen para los registro que no tiene foto tampoco es un problemas, el caso es que estamos hablando de mas de 4 mil registro que no tienen fotos momentaniamente.

la historia de esto es que tengo un sistema funcionando con mas de 4 mil registro y cada uno tiene su foto, el problema de esto es que la base de datos esta super lenta y tengo que usarlo en una maquina local ya que cuando lo pongo en red tarda mucho para subir y consume mucho recurso, si existiera la forma de mejor el movimiento fuera un éxito, estoy usando access 2007.

rebotea
23-09-2014, 20:35:37
Tenta cambiar tu base dados mejor desempenho = SQLITE