Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Grabar un TImage en FB 2.5

Buenos días. He estado mirando aquí y en otros foros cómo grabar el contenido de un TImage en una BB.DD. Firebird 2.5. La tabla está definida así:
Código SQL [-]
CREATE TABLE IMAGEN (
  TIPO SMALLINT NOT NULL,
  REGISTRO INTEGER NOT NULL,
  POSICION VARCHAR(1) NOT NULL,
  CARATULA BLOB SEGMENT SIZE 240);
El TImage lo cargo a partir de un fichero que selecciono con un TOpenPictureDialog y para grabar el contenido del TImage en la tabla uso esto:
Código:
TJPEGImage *ImgJpg = new TJPEGImage;
TMemoryStream *msImagen = new TMemoryStream;

msImagen->Clear();
ImgJpg->Assign(Caratula->Picture->Bitmap);
ImgJpg->SaveToStream(msImagen);
msImagen->Seek(0, soFromBeginning);

Query->Close();
Query->SQL->Text = "INSERT INTO Imagen (Tipo, Registro, Posicion, Caratula) VALUES (:Tipo, :Registro, 'P', :Caratula)";
Query->ParamByName("Caratula")->LoadFromStream(msImagen, ftBlob);
Query->ParamByName("Tipo")->AsInteger     = TabControl1->TabIndex + 1;
Query->ParamByName("Registro")->AsInteger = nRegistro;
Query->ExecSQL();
Query->Transaction->Commit();
Cunado selecciono el fichero se muestra en el formulario pero he comprobado que luego no graba nada en la tabla. ¿Algún consejo? Porque me he vuelto loco buscando ejemplos, pero ninguno me ha funcionado.
Responder Con Cita
  #2  
Antiguo 12-02-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y algo así?
Código Delphi [-]
TBlobField(DataSet.FieldByName('caratula')).LoadFromFile(dlgAbrirFichero.FileName);
Responder Con Cita
  #3  
Antiguo 14-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Sí, esa alternativa la había evaluado pero lo que me mosquea es que exactamente el mismo código en otra aplicación funciona perfectamente.
Responder Con Cita
  #4  
Antiguo 14-02-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
... el mismo código en otra aplicación funciona perfectamente.
Entonces habrá alguna diferencia, revísalo con lupa.
Responder Con Cita
  #5  
Antiguo 14-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Eso hago. Me estoy volviendo loco. Gracias.
Responder Con Cita
  #6  
Antiguo 14-02-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Pues no sé que habré hecho pero ahora funciona bien con este código:
Código SQL [-]
Query->Close();
Query->SQL->Text = "INSERT INTO Imagen (Tipo, Registro, Posicion, Caratula) VALUES (:Tipo, :Registro, :Posicion, :Caratula)";
Query->ParamByName("Tipo")->AsString      = TabControl1->TabIndex + 1;
Query->ParamByName("Registro")->AsInteger = nRegistro;
Query->ParamByName("Posicion")->AsString  = Imagen->Name == "Caratula" ? "P" : "T";
if (Imagen->Picture != NULL)
{
     Imagen->Picture->SaveToFile(AnsiString(getenv("TEMP")) + "\\Temp.jpg");
     Query->ParamByName("Caratula")->LoadFromStream(::ImagenToStreamJPG(AnsiString(getenv("TEMP")) + "\\Temp.jpg"), ftBlob);
}
Query->ExecSQL();
Realmente es una mezcla del que puse yo y la sugerencia de Casimiro.
Responder Con Cita
  #7  
Antiguo 14-02-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Girar un Timage con respecto a otro Timage Tuvan Gráficos 1 05-11-2016 21:30:50
Como grabar el contenido de Timage a un archivo jpg Bertifox2008 Internet 4 13-11-2009 06:45:56
como Hacer que un TImage siga a un Timage? j_flores3000 OOP 8 27-03-2008 18:47:50
Copiar Bitmap de un TImage a otro TImage quinqui Gráficos 2 24-01-2008 15:22:30
como combinar 2 Timage en un tercer Timage JefeNet Gráficos 10 02-09-2004 16:51:35


La franja horaria es GMT +2. Ahora son las 08:59:39.


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
Copyright 1996-2007 Club Delphi