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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-07-2017
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
No graba imagen en Firebird

Tenog un formulario con un TImage en el que puedo seleccionar el fichero de imagen a asignar para luego grabarlo en una tabla Firebird. Supongamos que el TImage está así:

Un vez cargado dicho TImage para grabarlo en la tabal hago esto:
Código:
for (nItem = 0; nItem < this->ComponentCount; nItem ++)
{
     Source = this->Components[nItem];
     [...]
     fPersona->Query->Close();
     if (Source->ClassNameIs("TImage"))
     {
          TImage *Imagen          = static_cast<TImage*>(Source);
          TMemoryStream *msImagen = new TMemoryStream;

          (Imagen->Picture->Bitmap)->SaveToStream(msImagen);
          msImagen->Seek(0, soFromBeginning);
          if (!lPrueba && msImagen->Size == 0)
               continue;

          if (msImagen == 0)
               fPersona->Query->SQL->Text = "DELETE FROM Instalacion WHERE Etiqueta = :Campo";
          else
          {
               if (lPrueba)
                    fPersona->Query->SQL->Text = "UPDATE Instalacion SET Imagen = :Imagen WHERE Etiqueta = :Campo";
               else
                    fPersona->Query->SQL->Text = "INSERT INTO Instalacion (Etiqueta, Imagen) VALUES (:Campo, :Imagen)";
                    fPersona->Query->ParamByName("Imagen")->LoadFromStream(msImagen, ftBlob);
          }
          fPersona->Query->ParamByName("Campo")->AsString = Source->Name;
     }
     [...]

     try
     {
          fPersona->Query->ExecSQL();
          fPersona->Query->Transaction->Commit();
     }
     catch(...)
     {
          Screen->Cursor = crArrow;
          fPersona->Query->Transaction->Rollback();
          Mensaje(-1, "Se ha producido un error en la actualización de los datos.¦" + ExtractFileName(AnsiString(__FILE__)) + FormatFloat("' - '0", __LINE__), "Volver");
          LisSitSelectItem(NULL, NULL, false);
          return;
     }
}
El problema es que ni me da error ni nada; simplemente, no graba nada.
Responder Con Cita
  #2  
Antiguo 07-07-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Usando Firebird y estando el campo 'IMAGE' definido así,
Código SQL [-]
...
  IMAGE  BLOB SUB_TYPE 0 SEGMENT SIZE 1024
...

de este modo guarda correctamente el contenido del TImage :
Código PHP:
#include <jpeg.hpp>

// cargar archivo imagen en TImage
void __fastcall TForm1::btnLoadImageClick(TObject *Sender)
{
  if (
OpenPictureDialog1->Execute()) {
    
Image1->Picture NULL;
    
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
  }
}

// guardar TImage en campo blob
void __fastcall TForm1::btnSaveImageClick(TObject *Sender)
{
  
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
  
TStream *Stream = new TMemoryStream;
  try {
    
Bitmap->Width  Image1->Picture->Width;
    
Bitmap->Height Image1->Picture->Height;
    
Bitmap->Canvas->Draw(00Image1->Picture->Graphic);
    
Bitmap->SaveToStream(Stream);

    
IBQuery1->SQL->Clear();
    
IBQuery1->SQL->Add("UPDATE TB_BLOB SET IMAGE = :IMAGE WHERE ID = :ID");
    
IBQuery1->ParamByName("ID")->AsInteger CSpinEdit1->Value;
    
IBQuery1->ParamByName("IMAGE")->LoadFromStream(StreamftBlob);
    
IBQuery1->ExecSQL();
  }
  
__finally {
    
delete Stream;
    
delete Bitmap;
  }

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 07-07-2017
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
¡Perfecto! Muchas gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
A pesar de la excepción, el registro se graba Angel.Matilla Firebird e Interbase 4 17-11-2015 21:21:43
BDEAdmin no graba el idapi32.cfg en Windows 7 Matorral Conexión con bases de datos 6 07-12-2010 12:04:32
Por que no graba en Win.ini alquimista API de Windows 11 23-04-2008 01:20:01
query no Graba , se cierra juanmaster Tablas planas 9 13-12-2006 00:52:21
lookup + dbgrid: no graba jonmendi Conexión con bases de datos 4 12-01-2006 09:21:53


La franja horaria es GMT +2. Ahora son las 16:05:47.


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