Ver Mensaje Individual
  #1  
Antiguo 26-06-2006
Ericklsca Ericklsca is offline
Registrado
 
Registrado: may 2006
Posts: 4
Reputación: 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