Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-06-2006
Ericklsca Ericklsca is offline
Registrado
 
Registrado: may 2006
Posts: 4
Poder: 0
Ericklsca Va por buen camino
Cargar Imagenes En Una Tabla De Interbase

Bueno tengo el siguiente problema, estoy desarrollando una aplicación en Delphi 6 para una tienda de discos en la cual ademas de capturar los datos del disco en el modulo de compras tambien se pueda cargar una imagen(caratula) del cd comprado para posteriormente visualizarla en el catalogo de cd. Bueno el problema es que mi codigo para cargar la imagen me manda un error cuando quiere cargar la imagen los componentes que utilizo son: IBDatabase, IBTransaction, IBDataSet Y DataSource enlazo todo como de costumbre y el codigo en el boton de cargar la imagen es el siguiente:

procedure TForm1.Button1Click(Sender: TObject);
var
m, f: TStream;
s: string;
begin
if OpenPictureDialog1.Execute then
begin
IBDataSet1.Edit; //tendria que dar error sin esto
m:= IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('FOTO'), bmWrite);
f:= TFileStream.Create(OpenPictureDialog1.filename, fmOpenRead);
m.CopyFrom(f, f.Size);
s:= AnsiUpperCase(ExtractFileExt(OpenPictureDialog1.FileName)); //Siempre en mayusculas
if s='.JPEG' then s:= '.JPG'; //un caso especial
IBDataSet1.FieldByName('FORMATO_FOTO').AsString:= Copy(s,2,3); //elimino el punto
IBDataSet1.Post;
f.Free;
m.Free;
end
end;

Despues el codigo que puse en el evento OnDataChange del componente DataSource es este:

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
m, f: TStream;
begin
if IBDataSet1.FieldByName('FOTO').IsNull then
Image1.Picture:= nil
else
begin
if IBDataSet1.FieldByName('FORMATO_FOTO').AsString = 'BMP' then
Image1.Picture.Graphic:= TBitmap.Create
else
Exit;
m:= IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('FOTO'), bmRead);
Image1.Picture.Graphic.LoadFromStream(m);
m.Free;
end;
end;

La primera vez que ejecute la aplicacion al darle click al boton de cargar y escoger la imagen me mando el siguiente error:

Project Project1.exe raised exception class EDatabaseError with message 'IBDataSet1: Cannot modify a read-only dataset'. Process stopped. Use Step or Run to continue

Entonces en la propiedad Active del componente IBDataSet la cambie a false y despues ejecute nuevamente el programa y nuevamente al momento de querer cargar la imagen me mando el siguiente error:

Project Project1.exe raised exception class EDatabaseError with message 'IBDataSet1: Cannot perform this operation on a closed dataset'.Process stopped. Use Step or Run to continue

Soy principiante en Delphi asi que la verdad no he podido encontrar el error quisiera que alguno de los compañeros foristas pueda ayudarme con mi problema o si alguien sabe alguna otra manera de cargar una imagen en una tabla de Interbase y luego visualizarla en un DBImage me seria de gran ayuda, espero que alguien me pueda ayudar con este problema.
Responder Con Cita
  #2  
Antiguo 26-06-2006
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Hola:

Yo cargo fotos de igual maneray me funciona bien.

El mensaje es que el DataSet esta en modo solo de lectura y por eso no te deja modificar, por lo que al desactivarlo al diseñar no vas a lograr nada, porque lo tendrás que activar en algún momento al ejecutar.

Prueba a ver esto:

Botón dcho en el DataSet .. opción DatasetEditor (la 2º) ... pestaña SQL... vas picancdo las 4 opciones que hay: Modify, Insert, Delete, Refresh y quitas el código que tienes en ellas (¿o no tienes nada y por eso no funciona?).

Cuando están limpas de código vuelves a la pestaña Options
Click en el botón Select Primary Keys, y es probable que el campo clave se quede seleccionado (en azul) si no lo seleccionas tú manualmente.

Una vez seleccionado el KeyField, click en el botón Generate SQL y guardar.

Con esto se habrán llenado de código los cuatro apartados de la pestaña SQL , y pruebas a ver si funciona.

Un saludo.
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
Cargar Imagenes con el DBIMAGE desde un QUERY (VIH)Lestat Conexión con bases de datos 7 29-06-2005 17:03:44
Cargar imágenes desde un imagelist johncook Varios 1 06-12-2004 13:44:15
Cargar imagenes ramonibk Gráficos 7 26-07-2004 16:12:35
cargar datos a una tabla en Interbase saul saldaña Conexión con bases de datos 2 29-06-2004 14:13:09
cargar imagenes desde un fichero docarrillo Varios 2 12-07-2003 17:02:46


La franja horaria es GMT +2. Ahora son las 10:31:16.


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