FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Recuperando una imagen de SQL Server da error
Disculpen si el tema es comun, pero he estado buscando en el foro y no logro resolver mi problema.
Estoy trabajando con imagenes en bases de datos y las inserciones las hace normalmente, pero al momento de recuperar una imagen es donde caigo en un problema: Código:
TMemoryStream *ima = new TMemoryStream; ADOQuery2->Active=false; ADOQuery2->Active=true; ADOQuery2->Open(); TGraphicField(ADOQuery2->FieldByName("imagen")).SaveToStream(ima); //<----no pasa de esta linea; /// /// /// ima->Free(); Código:
Access Violation at addres 004EF3F2 in module 'Proyect1.exe'. Read of address 00000000. |
#2
|
||||
|
||||
Hola ginkaku.
Una consulta, ¿ Que tipo de imágenes fueron guardadas en el campo "imagen" (BMP, JPG, ...) ? Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#4
|
||||
|
||||
Bueno nunca hay que darse por vencido, encontre el problema. Estaba obteniendo bien la imagen de la base de datos, pero tenia que pasarlo a una variable de tipo Bitmap, para recien pasarlo a un componente TImagen. Entonces la solución fue:
Código:
void __fastcall TForm1::Button2Click(TObject *Sender) { TStream *blod; Query2->Active=false; Query2->Active=true; Query2->First(); blod = Query2->CreateBlobStream(Query2->FieldByName("imagen"),bmRead); blod->Seek(0, soFromBeginning); Graphics::TBitmap *aaa = new Graphics::TBitmap;<-----khaaaaaaaaan aaa->LoadFromStream(blod); Image1->Picture->Assign(aaa); Query2->Close(); blod->Free(); } |
#5
|
||||
|
||||
Hola gingaku.
Te preguntaba el tipo por que TGraphic no puede saber el tipo de imagen almacenada (tanto en C++ como en Delphi). Por lo que si guardas mas de un tipo de imágen, habría que crear un campo adicional para indicarlo, poder evaluarlo y hacer la asignación correspondiente. Volviendo al BMP , también podes hacer: Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { TBlobField* bField = (TBlobField*)Query2->FieldByName("IMAGEN"); TBlobStream* bStream = new TBlobStream(bField, bmRead); Graphics::TBitmap* bm = new Graphics::TBitmap(); bStream->Seek(0, soFromBeginning); bm->LoadFromStream(bStream); Image1->Picture->Assign(bm); delete bm; delete bStream; }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 24-10-2013 a las 01:54:32. Razón: identación |
#6
|
||||
|
||||
Gracias por el codigo lo voy a revisar ahora. Disculpa ecfisa, todo funciona perfecto pero solo cuando trabajo con imagenes bmp. Bueno en realidad si logra insertar jpeg, pero es el codigo de recuperar el q me falla, obviamente por la variable Graphic::TBitmap que no acepta los jpeg, ¿que tipo de variable deberia colocar para recuperar un jpeg? Intente con TJpegImage pero no tiene LoadFromStream, la cual uso para asignar. Alguien en el foro me podria guiar?
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
recuperando rutas de directorios | danielmj | Varios | 7 | 05-06-2013 19:53:26 |
recuperando muchos registros con StoredProc | R0M3R0 | Varios | 3 | 15-01-2009 14:39:44 |
Recuperando mysql decimal con tipo single | Migmam2 | SQL | 3 | 27-08-2007 16:53:36 |
Recuperando imagenes desde Oracle | MarioATamborini | Oracle | 4 | 14-07-2005 21:52:14 |
Recuperando imagenes desde Oracle | vmladino | Gráficos | 1 | 11-11-2004 17:23:35 |
|