Ir al contenido


Foto

clase con soporte a imagen=?


  • Por favor identifícate para responder
7 respuestas en este tema

#1 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 noviembre 2011 - 11:37

hola estoy haciendo una aplicacion

y en ella tengo una tabla con los datos de la empresa y sus campos blob tipo binary
y todo bien.

pero quiero hacer una clase donde pueda tener los datos de la empresa y tambien las imagenes
del logo y la cedula de la empresa que estan en la base de datos.

como puedo tener los tipos de datos jpg como un miembro y luego aisginalo a a un timage?

estoy haciendo la clase.



  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 08 noviembre 2011 - 11:48

Buenas,

Puedes definir una propiedad de tipo TPicture



delphi
  1.     property Picture: TPicture read FPicture write SetPicture;



O si conoces de antemano el formato de la imagen, pues ya directamente de ese formato

Espero te sirva

Nos leemos

  • 0

#3 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 09 noviembre 2011 - 04:20

hola al final lo hice asi.

[pascal]
unit ClasEmpresaU;

interface

uses
  Forms, Windows, ActiveX, shlobj, ShellAPI, SysUtils, Registry, IniFiles,
  Dialogs, DBU, Classes, DB, MemDS, DBAccess, IBC,
  Graphics, jpeg, pngimage, ExtCtrls;

type
  TClasEmpresa = Class(TObject)
  private
    QEmpresa: TIBCQuery;
    Transaction: TIBCTransaction;
    constructor create; virtual;
    destructor destroy; override;
  public
    ID: integer;
    RFC: string;
    NOMBRE: string;
    PERSONALIDAD: string;
    ESQUEMAFACTURACION: string;
    CALLE: string;
    NUMEXT: string;
    NUMINT: string;
    COLONIA: string;
    CP: string;
    LOCALIDAD: string;
    ESTADO: string;
    MUNICIPIO: string;
    PAIS: string;
    imgLogo: TImage;
    imgCedula: TImage;
    procedure CargaInfoEmp(RFCEMP: string);
  published
  End;

implementation

constructor TClasEmpresa.create;
begin
  inherited create;
end;

destructor TClasEmpresa.destroy;
begin
  inherited destroy;
end;

procedure TClasEmpresa.CargaInfoEmp(RFCEMP: string);
var
  sql: string;
  I: integer;

  MemoryStreamLogo: TMemoryStream;
  JpgLogo: TJpegImage;
  fldCampoLogo: TField;
  StreamLogo: TStream;

  // variables para cedula
  MemoryStreamCedula: TMemoryStream;
  JpgCedula: TJpegImage;
  fldCampoCedula: TField;
  StreamCedula: TStream;
begin
  sql := 'SELECT ';
  sql := sql + ' ID, RFC, NOMBRE, PERSONALIDAD, ESQUEMAFACTURACION,  ';
  sql := sql + ' CALLE, NUMEXT, NUMINT, COLONIA, CP, LOCALIDAD, ESTADO, ';
  sql := sql + 'MUNICIPIO, PAIS, LOGO, CEDULA ';
  sql := sql + 'FROM EMPRESAS WHERE RFC = ';

  if RFCEMP <> '' then
  begin
    // creamos un componente query nuevo que se ocnecte a la db
    imgLogo := TImage.create(nil);
    QEmpresa := TIBCQuery.create(nil);

    Transaction := TIBCTransaction.create(nil);
    // Transaction.DefaultDataBase := Hilo_DataBase;
    Transaction.DefaultConnection := DBF.IBCConnection1;
    // Transaction.DefaultAction  := TARollback;
    Transaction.Params.Clear;
    Transaction.Params.Add('read_committed');
    Transaction.Params.Add('rec_version');
    Transaction.Params.Add('nowait');
    Transaction.StartTransaction;

    QEmpresa := TIBCQuery.create(nil);
    QEmpresa.Transaction := Transaction;

    QEmpresa.Close;
    QEmpresa.sql.Clear;
    QEmpresa.sql.Add(sql + '''' + RFCEMP + '''');
    QEmpresa.Execute;

    // si el rfc no esta vacio entonces cargamos toda la infor de la empresa seleccionada
    // trataremos de cargar los logos y cedula si es que existen
    for I := 0 to QEmpresa.RecordCount - 1 do
    begin
      // rellenamos los datos a los edits
      ID                  := QEmpresa.Fields[0].AsInteger;
      RFC                  := QEmpresa.Fields[1].AsString;
      NOMBRE              := QEmpresa.Fields[2].AsString;
      PERSONALIDAD        := QEmpresa.Fields[3].AsString;
      ESQUEMAFACTURACION  := QEmpresa.Fields[4].AsString;
      CALLE                := QEmpresa.Fields[5].AsString;
      NUMEXT              := QEmpresa.Fields[6].AsString;
      NUMINT              := QEmpresa.Fields[7].AsString;
      COLONIA              := QEmpresa.Fields[8].AsString;
      CP                  := QEmpresa.Fields[9].AsString;
      LOCALIDAD            := QEmpresa.Fields[10].AsString;
      ESTADO              := QEmpresa.Fields[11].AsString;
      MUNICIPIO            := QEmpresa.Fields[12].AsString;
      PAIS                := QEmpresa.Fields[13].AsString;
        //procesamos el campo para logos
      JpgLogo := nil;
      MemoryStreamLogo := nil;
      try
        MemoryStreamLogo := TMemoryStream.create;
        fldCampoLogo := QEmpresa.FieldByName('logo') as TBlobField;
        StreamLogo := QEmpresa.CreateBlobStream(fldCampoLogo, bmRead);

        MemoryStreamLogo.LoadFromStream(StreamLogo);

        JpgLogo := TJpegImage.create;
        JpgLogo.LoadFromStream(MemoryStreamLogo);
        imgLogo.Picture.Assign(JpgLogo);
      except
        imgLogo.Picture.Assign(nil);
        JpgLogo.Free;
      end;
      JpgLogo.Free;
      MemoryStreamLogo.Free;

        //procesamos el campo para la cedula
      JpgCedula := nil;
      MemoryStreamCedula := nil;
      try
        MemoryStreamCedula := TMemoryStream.create;
        fldCampoCedula := QEmpresa.FieldByName('CEDULA') as TBlobField;
        StreamCedula := QEmpresa.CreateBlobStream(fldCampoCedula, bmRead);

        MemoryStreamCedula.LoadFromStream(StreamCedula);

        JpgCedula := TJpegImage.create;
        JpgCedula.LoadFromStream(MemoryStreamCedula);
        imgCedula.Picture.Assign(JpgCedula);
      except
        imgCedula.Picture.Assign(nil);
        JpgCedula.Free;
      end;
      JpgCedula.Free;
      MemoryStreamCedula.Free;
      QEmpresa.Next;
    end;
  end
  else
  begin

  end;
  //

end;

end.

[/pascal]

y lo llamo asi.

[pascal]
var
    Empresa: TClasEmpresa;
  begin
    Empresa := TClasEmpresa.Create;
 
      Empresa.CargaInfoEmp('RFCEMPRESA');
 
  end
[/pascal]


pero algo hago mal.

por que quiero que la query se quede activa y que se cree al crearse la clase

en el constructorpongo esto
constructor TClasEmpresa.create;
begin
  inherited create;
    Transaction := TIBCTransaction.create(nil);
    // Transaction.DefaultDataBase := Hilo_DataBase;
    Transaction.DefaultConnection := DBF.IBCConnection1;
    // Transaction.DefaultAction  := TARollback;
    Transaction.Params.Clear;
    Transaction.Params.Add('read_committed');
    Transaction.Params.Add('rec_version');
    Transaction.Params.Add('nowait');
    Transaction.StartTransaction;

    QEmpresa := TIBCQuery.create(nil);
    QEmpresa.Transaction := Transaction;

end;

y en el metodo

[pascal]

procedure TClasEmpresa.CargaInfoEmp(RFCEMP: string);
var
  sql: string;
  I: integer;

  MemoryStreamLogo: TMemoryStream;
  JpgLogo: TJpegImage;
  fldCampoLogo: TField;
  StreamLogo: TStream;

  // variables para cedula
  MemoryStreamCedula: TMemoryStream;
  JpgCedula: TJpegImage;
  fldCampoCedula: TField;
  StreamCedula: TStream;
begin
  sql := 'SELECT ';
  sql := sql + ' ID, RFC, NOMBRE, PERSONALIDAD, ESQUEMAFACTURACION,  ';
  sql := sql + ' CALLE, NUMEXT, NUMINT, COLONIA, CP, LOCALIDAD, ESTADO, ';
  sql := sql + 'MUNICIPIO, PAIS, LOGO, CEDULA ';
  sql := sql + 'FROM EMPRESAS WHERE RFC = ';

  if RFCEMP <> '' then
  begin
    // creamos un componente query nuevo que se ocnecte a la db
    imgLogo := TImage.create(nil);



    QEmpresa.Close;// AQUI ME DA UN ERROR DE ACCESO DE MEMORIA O ALGO ASI.
    QEmpresa.sql.Clear;
    QEmpresa.sql.Add(sql + '''' + RFCEMP + '''');
    QEmpresa.Execute;

    // si el rfc no esta vacio entonces cargamos toda la infor de la empresa seleccionada
    // trataremos de cargar los logos y cedula si es que existen
    for I := 0 to QEmpresa.RecordCount - 1 do
    begin
      // rellenamos los datos a los edits
      ID                  := QEmpresa.Fields[0].AsInteger;
      RFC                  := QEmpresa.Fields[1].AsString;
      NOMBRE              := QEmpresa.Fields[2].AsString;
      PERSONALIDAD        := QEmpresa.Fields[3].AsString;
      ESQUEMAFACTURACION  := QEmpresa.Fields[4].AsString;
      CALLE                := QEmpresa.Fields[5].AsString;
      NUMEXT              := QEmpresa.Fields[6].AsString;
      NUMINT              := QEmpresa.Fields[7].AsString;
      COLONIA              := QEmpresa.Fields[8].AsString;
      CP                  := QEmpresa.Fields[9].AsString;
      LOCALIDAD            := QEmpresa.Fields[10].AsString;
      ESTADO              := QEmpresa.Fields[11].AsString;
      MUNICIPIO            := QEmpresa.Fields[12].AsString;
      PAIS                := QEmpresa.Fields[13].AsString;
        //procesamos el campo para logos
      JpgLogo := nil;
      MemoryStreamLogo := nil;
      try
        MemoryStreamLogo := TMemoryStream.create;
        fldCampoLogo := QEmpresa.FieldByName('logo') as TBlobField;
        StreamLogo := QEmpresa.CreateBlobStream(fldCampoLogo, bmRead);

        MemoryStreamLogo.LoadFromStream(StreamLogo);

        JpgLogo := TJpegImage.create;
        JpgLogo.LoadFromStream(MemoryStreamLogo);
        imgLogo.Picture.Assign(JpgLogo);
      except
        imgLogo.Picture.Assign(nil);
        JpgLogo.Free;
      end;
      JpgLogo.Free;
      MemoryStreamLogo.Free;

        //procesamos el campo para la cedula
      JpgCedula := nil;
      MemoryStreamCedula := nil;
      try
        MemoryStreamCedula := TMemoryStream.create;
        fldCampoCedula := QEmpresa.FieldByName('CEDULA') as TBlobField;
        StreamCedula := QEmpresa.CreateBlobStream(fldCampoCedula, bmRead);

        MemoryStreamCedula.LoadFromStream(StreamCedula);

        JpgCedula := TJpegImage.create;
        JpgCedula.LoadFromStream(MemoryStreamCedula);
        imgCedula.Picture.Assign(JpgCedula);
      except
        imgCedula.Picture.Assign(nil);
        JpgCedula.Free;
      end;
      JpgCedula.Free;
      MemoryStreamCedula.Free;
      QEmpresa.Next;
    end;
  end
  else
  begin

  end;
  //

end;
[/pascal]

No entiendo por que da error se supone que al crearlo en el
constructor, el componente para querys debe de estar activo de forma que lo pueda usar.
y reutilizar.  pues ya esta creado y es accesible a la clase.





  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 09 noviembre 2011 - 04:32

Qué error te da? Y en qué linea?
  • 0

#5 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 09 noviembre 2011 - 09:06

con eureka log
me da este error

Exception:
--------------------------------------------------------------------------------------------------------------
  2.1 Date          : Wed, 9 Nov 2011 21:00:47 -0600
  2.2 Address      : 00585B8E
  2.3 Module Name  : AdminEmp.exe
  2.4 Module Version:
  2.5 Type          : EAccessViolation
  2.6 Message      : Access violation at address 00585B8E in module 'AdminEmp.exe'. Read of address 00000000.
  2.7 ID            : 5C9D
  2.8 Count        : 1
  2.9 Status        : New
  2.10 Note        :

User:

la linea en el archivo es la linea 93
como que trato de acceder a una zona de memoria que ya se libero

aqui la unit



delphi
  1. unit ClasEmpresaU;
  2.  
  3. interface
  4.  
  5. uses
  6.   Forms, Windows, ActiveX, shlobj, ShellAPI, SysUtils, Registry, IniFiles,
  7.   Dialogs, DBU, Classes, DB, MemDS, DBAccess, IBC,
  8.   Graphics, jpeg, pngimage, ExtCtrls;
  9.  
  10. type
  11.   TClasEmpresa = Class(TObject)
  12.   private
  13.     QEmpresa: TIBCQuery;
  14.     Transaction: TIBCTransaction;
  15.     constructor create; virtual;
  16.     destructor destroy; override;
  17.   public
  18.     ID: integer;
  19.     RFC: string;
  20.     NOMBRE: string;
  21.     PERSONALIDAD: string;
  22.     ESQUEMAFACTURACION: string;
  23.     CALLE: string;
  24.     NUMEXT: string;
  25.     NUMINT: string;
  26.     COLONIA: string;
  27.     CP: string;
  28.     LOCALIDAD: string;
  29.     ESTADO: string;
  30.     MUNICIPIO: string;
  31.     PAIS: string;
  32.     imgLogo: TImage;
  33.     imgCedula: TImage;
  34.     procedure CargaInfoEmp(RFCEMP: string);
  35.   published
  36.   End;
  37.  
  38. implementation
  39.  
  40. constructor TClasEmpresa.create;
  41. begin
  42.   inherited create;
  43.  
  44.     QEmpresa := TIBCQuery.create(nil);
  45.  
  46.     Transaction := TIBCTransaction.create(nil);
  47.     Transaction.DefaultConnection := DBF.IBCConnection1;
  48.     Transaction.Params.Clear;
  49.     Transaction.Params.Add('read_committed');
  50.     Transaction.Params.Add('rec_version');
  51.     Transaction.Params.Add('nowait');
  52.     Transaction.StartTransaction;
  53.  
  54.     QEmpresa := TIBCQuery.create(nil);
  55.     QEmpresa.Transaction := Transaction;
  56. end;
  57.  
  58. destructor TClasEmpresa.destroy;
  59. begin
  60.   inherited destroy;
  61. end;
  62.  
  63. procedure TClasEmpresa.CargaInfoEmp(RFCEMP: string);
  64. var
  65.   sql: string;
  66.   I: integer;
  67.  
  68.   MemoryStreamLogo: TMemoryStream;
  69.   JpgLogo: TJpegImage;
  70.   fldCampoLogo: TField;
  71.   StreamLogo: TStream;
  72.  
  73.   // variables para cedula
  74.   MemoryStreamCedula: TMemoryStream;
  75.   JpgCedula: TJpegImage;
  76.   fldCampoCedula: TField;
  77.   StreamCedula: TStream;
  78. begin
  79.   sql := 'SELECT ';
  80.   sql := sql + ' ID, RFC, NOMBRE, PERSONALIDAD, ESQUEMAFACTURACION,  ';
  81.   sql := sql + ' CALLE, NUMEXT, NUMINT, COLONIA, CP, LOCALIDAD, ESTADO, ';
  82.   sql := sql + 'MUNICIPIO, PAIS, LOGO, CEDULA ';
  83.   sql := sql + 'FROM EMPRESAS WHERE RFC = ';
  84.  
  85.   if RFCEMP <> '' then
  86.   begin
  87.     // creamos un componente query nuevo que se ocnecte a la db
  88.     imgLogo := TImage.create(nil);
  89.     imgCedula := TImage.create(nil);
  90.  
  91.  
  92.  
  93.     QEmpresa.Close; [b]// aqui da error  linea 93[/b]
  94.     QEmpresa.sql.Clear;
  95.     QEmpresa.sql.Add(sql + '''' + RFCEMP + '''');
  96.     QEmpresa.Execute;
  97.  
  98.     // si el rfc no esta vacio entonces cargamos toda la infor de la empresa seleccionada
  99.     // trataremos de cargar los logos y cedula si es que existen
  100.     for I := 0 to QEmpresa.RecordCount - 1 do
  101.     begin
  102.       // rellenamos los datos a los edits
  103.       ID                  := QEmpresa.Fields[0].AsInteger;
  104.       RFC                  := QEmpresa.Fields[1].AsString;
  105.       NOMBRE              := QEmpresa.Fields[2].AsString;
  106.       PERSONALIDAD        := QEmpresa.Fields[3].AsString;
  107.       ESQUEMAFACTURACION  := QEmpresa.Fields[4].AsString;
  108.       CALLE                := QEmpresa.Fields[5].AsString;
  109.       NUMEXT              := QEmpresa.Fields[6].AsString;
  110.       NUMINT              := QEmpresa.Fields[7].AsString;
  111.       COLONIA              := QEmpresa.Fields[8].AsString;
  112.       CP                  := QEmpresa.Fields[9].AsString;
  113.       LOCALIDAD            := QEmpresa.Fields[10].AsString;
  114.       ESTADO              := QEmpresa.Fields[11].AsString;
  115.       MUNICIPIO            := QEmpresa.Fields[12].AsString;
  116.       PAIS                := QEmpresa.Fields[13].AsString;
  117.         //procesamos el campo para logos
  118.       JpgLogo := nil;
  119.       MemoryStreamLogo := nil;
  120.       try
  121.         MemoryStreamLogo := TMemoryStream.create;
  122.         fldCampoLogo    := QEmpresa.FieldByName('logo') as TBlobField;
  123.         StreamLogo      := QEmpresa.CreateBlobStream(fldCampoLogo, bmRead);
  124.  
  125.         MemoryStreamLogo.LoadFromStream(StreamLogo);
  126.  
  127.         JpgLogo := TJpegImage.create;
  128.         JpgLogo.LoadFromStream(MemoryStreamLogo);
  129.         imgLogo.Picture.Assign(JpgLogo);
  130.       except
  131.         imgLogo.Picture.Assign(nil);
  132.         JpgLogo.Free;
  133.       end;
  134.       JpgLogo.Free;
  135.       MemoryStreamLogo.Free;
  136.         //procesamos el campo para la cedula
  137.       JpgCedula := nil;
  138.       MemoryStreamCedula := nil;
  139.       try
  140.         MemoryStreamCedula  := TMemoryStream.create;
  141.         fldCampoCedula      := QEmpresa.FieldByName('cedula') as TBlobField;
  142.         StreamCedula        := QEmpresa.CreateBlobStream(fldCampoCedula, bmRead);
  143.  
  144.         MemoryStreamCedula.LoadFromStream(StreamCedula);
  145.  
  146.         JpgCedula := TJpegImage.create;
  147.         JpgCedula.LoadFromStream(MemoryStreamCedula);
  148.         imgCedula.Picture.Assign(JpgCedula);
  149.       except
  150.         imgCedula.Picture.Assign(nil);
  151.         JpgCedula.Free;
  152.       end;
  153.       JpgCedula.Free;
  154.       MemoryStreamCedula.Free;
  155.       QEmpresa.Next;
  156.     end;
  157.   end
  158.   else
  159.   begin
  160.  
  161.   end;
  162.   //
  163.  
  164. end;
  165.  
  166. end.



y adjunto la unit

gracias por tu apoyo..

  • 0

#6 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 10 noviembre 2011 - 02:47

Buenas,

Veo que creas 2 veces el Query en el constructor, mira que no sea por eso (aunque no creo). También te falta asignarle el Database.

También es buena costumbre de, en el destructor, destruir los objetos creados (en este caso el Query)

Nos leemos
  • 0

#7 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 10 noviembre 2011 - 07:06

arregle el destructor y el contructor



delphi
  1. constructor TClasEmpresa.create;
  2. begin
  3.   inherited create;
  4.     Transaction := TIBCTransaction.create(nil);
  5.     Transaction.DefaultConnection := DBF.IBCConnection1;//conexion en un datamodule
  6.     Transaction.Params.Clear;
  7.     Transaction.Params.Add('read_committed');
  8.     Transaction.Params.Add('rec_version');
  9.     Transaction.Params.Add('nowait');
  10.     Transaction.StartTransaction;
  11.  
  12.     QEmpresa := TIBCQuery.create(nil);
  13.     QEmpresa.Transaction := Transaction;
  14.     QEmpresa.Connection := DBF.IBCConnection1; //conexion en un datamodule
  15.     QEmpresa.AutoCommit := True;
  16.  
  17. end;
  18.  
  19. destructor TClasEmpresa.destroy;
  20. begin
  21.   inherited destroy;
  22.   Transaction.Free;
  23.   QEmpresa.Free;
  24. end;



pero sigue dando error cuando lo quiero usar


delphi
  1.     // creamos un componente query nuevo que se ocnecte a la db
  2.     imgLogo := TImage.create(nil);
  3.     imgCedula := TImage.create(nil);
  4.  
  5.     QEmpresa.Close;  //<---- Sige dando error aqui
  6.     QEmpresa.sql.Clear;
  7.     QEmpresa.sql.Add(sql + '''' + RFCEMP + '''');
  8.     QEmpresa.Execute;



la unit completa



delphi
  1. unit ClasEmpresaU;
  2.  
  3. interface
  4.  
  5. uses
  6.   Forms, Windows, ActiveX, shlobj, ShellAPI, SysUtils, Registry, IniFiles,
  7.   Dialogs, DBU, Classes, DB, MemDS, DBAccess, IBC,
  8.   Graphics, jpeg, pngimage, ExtCtrls;
  9.  
  10. type
  11.   TClasEmpresa = Class(TObject)
  12.   private
  13.     QEmpresa: TIBCQuery; //<--- los declaro aqui por que segun deben de estar accesibles a esta unidad solamente
  14.     Transaction: TIBCTransaction; //<--- los declaro aqui por que segun deben de estar accesibles a esta unidad solamente
  15.     constructor create; virtual;
  16.     destructor destroy; override;
  17.   public
  18.     ID: integer;
  19.     RFC: string;
  20.     CONTRA:string;
  21.     NOMBRE: string;
  22.     PERSONALIDAD: string;
  23.     ESQUEMAFACTURACION: string;
  24.     CALLE: string;
  25.     NUMEXT: string;
  26.     NUMINT: string;
  27.     COLONIA: string;
  28.     CP: string;
  29.     LOCALIDAD: string;
  30.     ESTADO: string;
  31.     MUNICIPIO: string;
  32.     PAIS: string;
  33.     imgLogo: TImage;
  34.     imgCedula: TImage;
  35.     procedure CargaInfoEmp(RFCEMP: string);
  36.   published
  37.   End;
  38.  
  39. implementation
  40.  
  41. constructor TClasEmpresa.create;
  42. begin
  43.   inherited create;
  44.     Transaction := TIBCTransaction.create(nil);
  45.     Transaction.DefaultConnection := DBF.IBCConnection1;//conexion en un datamodule
  46.     Transaction.Params.Clear;
  47.     Transaction.Params.Add('read_committed');
  48.     Transaction.Params.Add('rec_version');
  49.     Transaction.Params.Add('nowait');
  50.     Transaction.StartTransaction;
  51.  
  52.     QEmpresa := TIBCQuery.create(nil);
  53.     QEmpresa.Transaction := Transaction;
  54.     QEmpresa.Connection := DBF.IBCConnection1; //conexion en un datamodule
  55.     QEmpresa.AutoCommit := True;
  56.  
  57. end;
  58.  
  59. destructor TClasEmpresa.destroy;
  60. begin
  61.   inherited destroy;
  62.   Transaction.Free;
  63.   QEmpresa.Free;
  64. end;
  65.  
  66. procedure TClasEmpresa.CargaInfoEmp(RFCEMP: string);
  67. var
  68.   sql: string;
  69.   I: integer;
  70.  
  71.   MemoryStreamLogo: TMemoryStream;
  72.   JpgLogo: TJpegImage;
  73.   fldCampoLogo: TField;
  74.   StreamLogo: TStream;
  75.  
  76.   // variables para cedula
  77.   MemoryStreamCedula: TMemoryStream;
  78.   JpgCedula: TJpegImage;
  79.   fldCampoCedula: TField;
  80.   StreamCedula: TStream;
  81. begin
  82.   sql := 'SELECT ';
  83.   sql := sql + ' ID, RFC, CONTRA, NOMBRE, PERSONALIDAD, ESQUEMAFACTURACION,  ';
  84.   sql := sql + ' CALLE, NUMEXT, NUMINT, COLONIA, CP, LOCALIDAD, ESTADO, ';
  85.   sql := sql + 'MUNICIPIO, PAIS, LOGO, CEDULA ';
  86.   sql := sql + 'FROM EMPRESAS WHERE RFC = ';
  87.  
  88.   if RFCEMP <> '' then
  89.   begin
  90.     // creamos un componente query nuevo que se ocnecte a la db
  91.     imgLogo := TImage.create(nil);
  92.     imgCedula := TImage.create(nil);
  93.  
  94.     QEmpresa.Close;  //<---- Sige dando error aqui
  95.     QEmpresa.sql.Clear;
  96.     QEmpresa.sql.Add(sql + '''' + RFCEMP + '''');
  97.     QEmpresa.Execute;
  98.  
  99.     // si el rfc no esta vacio entonces cargamos toda la infor de la empresa seleccionada
  100.     // trataremos de cargar los logos y cedula si es que existen
  101.     for I := 0 to QEmpresa.RecordCount - 1 do
  102.     begin
  103.       // rellenamos los datos a los edits
  104.       ID                  := QEmpresa.Fields[0].AsInteger;
  105.       RFC                  := QEmpresa.Fields[1].AsString;
  106.       CONTRA              := QEmpresa.Fields[2].AsString;
  107.       NOMBRE              := QEmpresa.Fields[3].AsString;
  108.       PERSONALIDAD        := QEmpresa.Fields[4].AsString;
  109.       ESQUEMAFACTURACION  := QEmpresa.Fields[5].AsString;
  110.       CALLE                := QEmpresa.Fields[6].AsString;
  111.       NUMEXT              := QEmpresa.Fields[7].AsString;
  112.       NUMINT              := QEmpresa.Fields[8].AsString;
  113.       COLONIA              := QEmpresa.Fields[9].AsString;
  114.       CP                  := QEmpresa.Fields[10].AsString;
  115.       LOCALIDAD            := QEmpresa.Fields[11].AsString;
  116.       ESTADO              := QEmpresa.Fields[12].AsString;
  117.       MUNICIPIO            := QEmpresa.Fields[13].AsString;
  118.       PAIS                := QEmpresa.Fields[14].AsString;
  119.         //procesamos el campo para logos
  120.       JpgLogo := nil;
  121.       MemoryStreamLogo := nil;
  122.       try
  123.         MemoryStreamLogo := TMemoryStream.create;
  124.         fldCampoLogo    := QEmpresa.FieldByName('logo') as TBlobField;
  125.         StreamLogo      := QEmpresa.CreateBlobStream(fldCampoLogo, bmRead);
  126.  
  127.         MemoryStreamLogo.LoadFromStream(StreamLogo);
  128.  
  129.         JpgLogo := TJpegImage.create;
  130.         JpgLogo.LoadFromStream(MemoryStreamLogo);
  131.         imgLogo.Picture.Assign(JpgLogo);
  132.       except
  133.         imgLogo.Picture.Assign(nil);
  134.         JpgLogo.Free;
  135.       end;
  136.       JpgLogo.Free;
  137.       MemoryStreamLogo.Free;
  138.         //procesamos el campo para la cedula
  139.       JpgCedula := nil;
  140.       MemoryStreamCedula := nil;
  141.       try
  142.         MemoryStreamCedula  := TMemoryStream.create;
  143.         fldCampoCedula      := QEmpresa.FieldByName('cedula') as TBlobField;
  144.         StreamCedula        := QEmpresa.CreateBlobStream(fldCampoCedula, bmRead);
  145.  
  146.         MemoryStreamCedula.LoadFromStream(StreamCedula);
  147.  
  148.         JpgCedula := TJpegImage.create;
  149.         JpgCedula.LoadFromStream(MemoryStreamCedula);
  150.         imgCedula.Picture.Assign(JpgCedula);
  151.       except
  152.         imgCedula.Picture.Assign(nil);
  153.         JpgCedula.Free;
  154.       end;
  155.       JpgCedula.Free;
  156.       MemoryStreamCedula.Free;
  157.       QEmpresa.Next;
  158.     end;
  159.   end
  160.   else
  161.   begin
  162.  
  163.   end;
  164.   //
  165.  
  166. end;
  167.  
  168. end.



sera un error de los componentes

uso los ibdac de devart.

no se si sea eso. todo parece bien. :SS :huh:
  • 0

#8 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 12 noviembre 2011 - 02:07

Antes de la linea que te da el error mira de poner esto



delphi
  1. if not Assigned(QEmpresa) then
  2. begin
  3.   ShowMessage('Query no creado');
  4.   Exit;
  5. end;



Si es problema del QEmpresa, esto evitará el AV

Nos leemos

  • 0




IP.Board spam blocked by CleanTalk.