Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Constructing instance of 'TStream' containig astract method.......ba que es? (https://www.clubdelphi.com/foros/showthread.php?t=66700)

alonso.esparza 08-03-2010 19:02:54

Constructing instance of 'TStream' containig astract method.......ba que es?
 
Saludos, ya hacia mucho tiempo que no escribia jeje, bueno, espero me puedan ayudar:

Tengo una aplicacion que guarda imagenes jpg a una base de datos de SQL server 2005 con este codigo:

Código Delphi [-]
 
  contenedordeimagen:=TImage.Create(F_Enviar);
  fimagen:=TMemoryStream.Create;
  contenedordeimagen.Picture.LoadFromFile('C:\Oficialia\Tmp\Temp.jpg');
  contenedordeimagen.Picture.Graphic.SaveToStream(fimagen);
  With Q_Enviar do
    begin
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO Ima (IdMov,Documento,Paginas,imagen)');
    SQL.Add('VALUES (:idMov,:Doc,:Pag,:Ima)');
    Parameters.ParamByName('IdMov').Value := Q_Util.Fields.Fields[0].Value;
    Parameters.ParamByName('Doc').Value := LB_Rutas.Items.Strings[con];
    Parameters.ParamByName('Pag').Value := IntToStr(con+1)+'-'+IntToStr(LB_Rutas.Items.Count);
    Parameters.ParamByName('Ima').LoadFromStream(fimagen ,ftBlob); // Aqui se guarda ala bd
    ExecSQL;
    end;

La cuestion es que siempre que compilo me sale el sig. mensaje:

[Warning] Unit1.pas(179): Constructing instance of 'TStream' containing abstract method 'TStream.Read'
[Warning] Unit1.pas(179): Constructing instance of 'TStream' containing abstract method 'TStream.Write'
[Warning] Unit1.pas(209): Constructing instance of 'TStream' containing abstract method 'TStream.Read'
[Warning] Unit1.pas(209): Constructing instance of 'TStream' containing abstract method 'TStream.Write

Todo funciona de hecho, guarda perfectamente, pero cuando cierran la aplicacion, se queda en el administrador de tareas, como si estubiera co
rriendo todavia.

a que se debe?
que tendria que cambiar para evitar los Warnings?

espero me ayuden, gracias?

roman 08-03-2010 19:14:44

El error sucede cuando construyes objetos de clases que tienen métodos abstractos. Lo raro es que TMemoryStream no tiene métodos abstractos. El mensaje de error indica la clase TStream pero en el código que pones no se ve ninguna referencia directa a TStream. Es más, el error marca dos líneas pero sólo en una tienes una construcción de un stream. ¿No estarás olvidando poner algo? ¿Los números 179 y 209 corresponden a líneas de ese código?

// Saludos

alonso.esparza 09-03-2010 01:47:18

Jaja Es cierto, perdon, me distraje, este codigo lo uso para cargar las imagenes y a un 'Image' , que era donde me marcaba los errores, perdon, ahi va:

Código Delphi [-]
 
procedure TF_Principal.DBG_RecEnvCellClick(Column: TColumn);
var tmp: TStream;
begin
Try
With Q_Util do
  begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM Ima WHERE idMov=:idmov ORDER BY Id');
  Parameters.ParamByName('idmov').Value:=Q_RecEnv.FieldValues['Id'];
  Open;
  end;
  if (Q_Util.RecordCount = 0) then
    begin
    L_foja1.Caption:='ERR';
    L_Fojas1.caption:='OR';
    SB_Atras.Enabled:=False;
    SB_Adelante.Enabled:=False;
    //SB_Extraer.Visible:=False;
    end
  else
    if (Q_Util.RecordCount = 1) then
      begin
        L_foja1.Caption:='1';
        L_Fojas1.caption:='1';
        Im_Seerd.Picture.Graphic:=TJPEGImage.Create;
        tmp:=TStream.Create;
        tmp:=Q_Util.createblobstream(Q_Util.FieldByName('Imagen'),bmRead );
        Im_Seerd.Picture.Graphic.LoadFromStream (tmp);
        tmp.Free;

      end
    else
      begin
      L_foja1.Caption:='1';
      L_Fojas1.caption:=IntToStr(Q_Util.RecordCount);
      Im_Seerd.Picture.Graphic:=TJPEGImage.Create;
      tmp:=TStream.Create;
      tmp:=Q_Util.createblobstream(Q_Util.FieldByName('Imagen'),bmRead );
      Im_Seerd.Picture.Graphic.LoadFromStream (tmp);
      tmp.Free;
       end;
except ShowMessage('NO HA SELECCIONADO NINGUN REGISTRO') end;

end;

Una disculpa ,gracias

alonso.esparza 09-03-2010 01:49:27

en los
Código Delphi [-]
tmp:=TStream.Create;

es donde me marca el error

roman 09-03-2010 02:02:43

Pues es lo que te comento. No puedes crear objetos de TStream, tienes que usar algún descendiente. Pero fíjate que en tu código realmente ni siquiera lo necesitas pues CreateBlobStream ya te devuelve un objeto creado.

// Saludos

alonso.esparza 11-03-2010 19:41:59

Cita:

Empezado por roman (Mensaje 356116)
Pues es lo que te comento. No puedes crear objetos de TStream, tienes que usar algún descendiente. Pero fíjate que en tu código realmente ni siquiera lo necesitas pues CreateBlobStream ya te devuelve un objeto creado.

// Saludos



Jaja, tenias razon, ya se lo quite y funciona perfecto, pero, me quedo la duda, de que cuando ejecuto el programa y ya lo cierro, se queda "abierto", o sea sigue en la lista de procesos de windows, Crees que tenga que hacer el hilo en el lugar adecuado, ya busque en el foro, pero solo econtre algo para cerrar ejecutables, pero la idea que funcione normalmente, no crees?, digo..


La franja horaria es GMT +2. Ahora son las 04:51:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi