 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Javi6 Cdt

Registrado: 05 Ene 2003Mensajes: 17
|
Publicado: Mie 11 Ago, 2004 7:33 am Asunto: Imagenes y bases de datos |
|
|
Hola foro,
antes de nada decir que he leido los mensajes sobre este tema publicados aqui y no me han sacado de muchas dudas.
Yo necesito lo siguiente:
Por un lado tengo una base de datos MsAcess 2000 con un campo de tipo OLE.
Por otro, mi aplicación en C++ Builder 5.
Tengo que insertar una imagen BMP o JPG en la tabla access. Y no tengo nada claro como hacerlo. Creo que si es JPG cambian algunas cosas, hasta ahora he probado a insertar BMP pero me da el siguiente error:
INVALID BLOB LENGTH.
Yo en access no defino el tamaño máximo del campo, asi que ni idea.
Si alguien tiene una idea, o un ejemplo que me pueda servir, muchas gracias.
un saludo,
Javier _________________ Javi |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Vie 20 Ago, 2004 4:52 pm Asunto: |
|
|
Saludos...
Yo ya he hecho esto, pero con SQL Server, aunque no creo que cambie mucho... Aqui te pongo un codigo de como lo hice, esta en Delphi pero no creo que te cueste mucho pasarlo a C++Builder, si tienes problemas me dices y en lo qe te pueda ayudar adelante...
| Código: |
procedure TfrmCatalogoAfiliados.InsertarAfiliado(qryIMAfiliado:TQuery);
var
msFoto:TMemoryStream;
begin
with qryIMAfiliado do
begin
ParamByName('pNoAfiliacion').AsString:=ledtNoAfiliacion.Text;
ParamByName('pFechaNacimiento').AsDateTime:=dedtFechaNacimiento.Date;
ParamByName('pIdGenero').AsInteger:=IdSexo;
ParamByName('pNombre').AsString:=ledtNombre.Text;
ParamByName('pApellidoPaterno').AsString:=ledtAPaterno.Text;
ParamByName('pApellidoMaterno').AsString:=ledtAMaterno.Text;
//Cargar Foto
msFoto:=BitmapAStream(imgFoto.Picture.Bitmap);
ParamByName('pFoto').LoadFromStream(msFoto,ftBlob);
msFoto.Free();
ExecSQL();
end;
end;
|
La funcion BitmapAStream es esta:
| Código: |
function BitmapAStream(bmpImagen:TBitmap):TMemoryStream;
var
msImagen:TMemoryStream;
jpgImagen:TJPEGImage;
begin
msImagen:=TMemoryStream.Create();
jpgImagen:=TJPEGImage.Create();
jpgImagen.Assign(bmpImagen);
jpgImagen.SaveToStream(msImagen);
msImagen.Seek(0,soFromBeginning);
jpgImagen.Free();
result:=msImagen;
end;
|
Esta función la hice para convertir el bitmap a JPG y que asi me ocupe menos espacio en la BD, tu puedes poner todo en el primer modulo, pero asi lo tenemos mas moduladito...
Eso es en cuanto a guardar la imagen desde un Bitmap a la BD, para mostrarla desde la BD a un bitmap es asi:
| Código: |
function CargarFotoCampo(Campo:TField;bmpImagen:TBitmap):boolean;
var
msFoto:TMemoryStream;
jpgFoto:TJPEGImage;
begin
result:=false;
if (( not Campo.IsNull) and (Campo.IsBlob)) then
begin
jpgFoto:=TJPEGImage.Create();
msFoto:=TMemoryStream.Create();
(Campo AS TBlobField).SaveToStream(msFoto);
msFoto.Seek(0,soFromBeginning);
jpgFoto.LoadFromStream(msFoto);
try
bmpImagen.Assign(jpgFoto);
result:=true;
except
end;
msFoto.Free();
jpgFoto.Free();
end;
end;
|
Y mandarias llamar a la función asi:
| Código: |
//En Delphi
CargarFotoCampo(Query.FieldByName('Foto'),Image.Picture.Bitmap);
//En C++Builder
CargarFotoCampo(Query->FieldByName('Foto'),Image->Picture->Bitmap);
|
_________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
Javi6 Cdt

Registrado: 05 Ene 2003Mensajes: 17
|
Publicado: Vie 03 Sep, 2004 1:23 pm Asunto: Ayuda por favor |
|
|
Llevo varios dias leyendo los mensajes del foro sobre insercccion en B.D, pero nada de nada. Solo he conseguido insertar BMP.
Tengo una base de datos Access 2k con un campo Foto tipo OLE.
Por otro lado tengo una foto jpq.
uso Builder 6.0. Me gustaria insertar la imagen usando BDE (Table, Query, etc), pero no lo consigo.
Alguna ayuda, si alguien tuviera un ejemplo me vendría genial, pero un ejemplo para llegar y compilar, porque llevo varios dias compiando ejemplos del foro y no consigo que me funcionen.
Sería positivo que alguien colgará un ejemplo en la seccion de Dowloads, proque veo que este es un tema recurrente,
gracias,
javi _________________ Javi |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|