Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Acces violation at address... al hacer un tmemorystream (https://www.clubdelphi.com/foros/showthread.php?t=47842)

gabirojas 08-09-2007 20:04:06

Acces violation at address... al hacer un tmemorystream
 
Hola a todos los amigos del Club Delphi. Tengo un error al tratar de guardar un stream en un campo memo en una tabla access. El codigo es el que sigue:

Código Delphi [-]
procedure TForm1.carga1Button1Click(Sender: TObject);
var  
  simagen:tmemorystream;  
  jpg:tjpegimage; 
begin   
  jpg:=tjpegimage.Create;   
  jpg.LoadFromFile(opendialog1.FileName);   
  simagen:=tmemorystream.Create;   
  jpg.SaveToStream(simagen);     
  simagen.Position:=0;   
  dm.ADOTable2.Append;   //al ejecutarse la siguiente linea da el error
  tmemorystream(dm.ADOTable2.FieldByName('imagen')).
  LoadFromStream(simagen);  
  dm.ADOTable2.Post;  
end;

La leyenda del error mencionado es lo que sigue: " Access violation at address 004755fa in module 'prueba.exe'. Read off address 0000A18D".

Donde dm es el DataModule, ADOTable es la tabla que estoy utilizando e Imagen es el campo de la tabla al cual quiero insertar la imagen, que es del tipo memo. Utilizo Delphi 7 y Access.

Muchas gracias anticipadas.

eduarcol 08-09-2007 21:10:59

ese error se debe a que aun no has creado el dm, debes crearlo antes de ejecutarlo

gabirojas 08-09-2007 21:18:58

crear dm
 
Hola eduarcol. Muchas gracias por tu respuesta. A que te refieres con crear el dm? Es una unidad datamodule, donde esta innsertado el adoconection y la adotable. Si eres tan amable, dime por favor como se crea. Gracias.

eduarcol 08-09-2007 21:50:40

Para crearlo
Código Delphi [-]
dm := TDataModule.Create(application);

pero antes asegurate que no lo hayas creado o no esta en los autocreateforms

seoane 08-09-2007 21:56:16

Yo lo que no entiendo es por que haces este typecast
Código Delphi [-]
  tmemorystream(dm.ADOTable2.FieldByName('imagen'))
¿FieldByName devuelve un TMemoryStream? ¿Devuelve siquiera un puntero? :confused:

gabirojas 08-09-2007 22:08:27

tmemorystream
 
Hola seoane. Gracias por tu respuesta. La idea del Tmemory stream es que me guarde en el campo 'imagen' el stream guardado en la variable simagen. Si conoces algun metodo mejor para guardar imagenes en ese campo, y como recuperlarlo despues, por favor házmelo saber. Muchas gracias.

gabirojas 08-09-2007 22:38:49

crear dm
 
eduarcol, si coloco en el codigo
Código Delphi [-]
dm:=tdatamodule.create(application);
salta el error "incompatible types tdm and tdatamodule".
Igual creo que esta entre los autocreateforms, porque desde otras instancias del programa puedo insertar y ver datos.

gabirojas 09-09-2007 02:07:56

Problema resuelto
 
A todos los que necesiten guardar y recuperar imagenes jpg con ado y access, visiten este link:
Código PHP:

http://www.latiumsoftware.com/es/pascal/0011.php 

Recomendado por: casachan(muchas gracias nuevamente).


La franja horaria es GMT +2. Ahora son las 03:37:36.

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