Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Error al asignar un TQRImage (https://www.clubdelphi.com/foros/showthread.php?t=98097)

Angel.Matilla 26-10-2026 18:54:57

Error al asignar un TQRImage
 
Buenas tardes. Estoy usando BCB6 y QR 3.0.9. Tengo este query:
Código SQL [-]
SELECT TRIM(A.Titulo)||' ('||CAST(A.Anyo AS VARCHAR(5))||')' Titulo, A.Interpretes, A.Autor, A.Duracion, A.Idiomas, A.Subtitulos, B.Caratula
   FROM Titulos A 
   LEFT JOIN Imagen B ON A.Tipo = B.Tipo AND A.Registro = B.Registro AND B.Posicion = 'P' WHERE A.Tipo = 1 AND A.Disco = :Disco
   ORDER BY Orden
que devuelve, por ejemplo, esto:

y tengo este código para meter el resultado del query en el QR:
Cita:

TMemoryStream *msImagen = new TMemoryStream;
static_cast<TGraphicField *>(Query->FieldByName("Caratula"))->SaveToStream(msImagen);
if (msImagen->Size > 0)
{
tbmp->Assign(Query->FieldByName("Caratula"));
ImgInf->Picture->Assign(tbmp);
}
Como veis el query devuelve una imagen. Sin embargo, al leer el query, no sé si lo que viene es un BMP o un JPG, y no sé en cual de los dos casos me da este error:

¿Cómo puedo esquivarlo?

emailx45 26-10-2026 22:30:24

Prueba esto:

Código Delphi [-]
// Vcl.Imaging.jpeg / Vcl.Imaging.pngimage

TMemoryStream *msImagen = new TMemoryStream();
try
{
    TBlobField *blobField = dynamic_cast(Query->FieldByName("Caratula"));
    if (blobField && !blobField->IsNull)
    {
        blobField->SaveToStream(msImagen);
        msImagen->Position = 0;
        
        if (msImagen->Size > 0)
        {
            //La imagen se identifica automáticamente como Bitmap, JPEG o PNG.
            ImgInf->Picture->LoadFromStream(msImagen);
        }
    }
}
__finally
{
    delete msImagen;
}


La franja horaria es GMT +2. Ahora son las 01:12:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi