Ir al contenido


Foto

Error: "Invalid class typecast"


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

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 19 octubre 2009 - 12:54

Comuneros tengo un problema, anteriormente usábamos BDE, actualmente estamos cambiando a Zeos.

Tengo una clase que realiza la seguridad, en esta tenemos un procedure que lee de la BD un campo blob y con BDE funciona bien, el problema que ahorita que estoy cambiando a zeos esta linea


delphi
  1. keytmp := TBlobStream.Create(TBlobField(Datos.FieldByName(CampoKeyEncr)),bmRead);



Me manda este error "Invalid class typecast", alguien que conozca los zeos y me pueda apoyar o aconsejar.

De antemano, gracias por su apoyo.

  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 octubre 2009 - 01:14

mmm, a ver, ¿Qué tipo de variable es Keytmp? ¿CampoKeyEncr es otra variable o nombre de campo?, prueba con esto:



delphi
  1. keytmp := TZStreamBlob.Create(TBlobField(Datos.FieldByName(CampoKeyEncr)),bmRead);



Saludos.

PD. ese error normalmente se debe a que los tipos de datos no son iguales.
  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 19 octubre 2009 - 02:21

Que tal amigo, si mira



delphi
  1. KeyTmp := TBlobStream;
  2. CampoKeyEncr := 'CampoBlob'  {Nombre del campo tipo Blob en MySQL}



Fijate que ya probe con esa función y me marca un error, de hecho ahi te falta un parametro de tipo IZBlob

La que yo use es la siguientes:


delphi
  1. {Asi esta el create del zeos}
  2. TZBlobStream.Create(Field: TBlobField; Blob: IZBlob; Mode: TBlobStreamMode);
  3. //donde
  4.   IZBlob = interface(IZInterface)
  5.     ['{47D209F1-D065-49DD-A156-EFD1E523F6BF}']



pero no le doy, mmm, creo que estoy bloqueado ahorita.
  • 0

#4 Al González

Al González

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 99 mensajes

Escrito 20 octubre 2009 - 03:23

Hola Razadi, te recomiendo que no especifiques la clase de flujo (stream) que deseas.

Opta por el método CreateBlobStream que viene en todo data set desde hace ya varias versiones de Delphi.  Así el objeto flujo creado será compatible con el tipo de conjunto de datos que uses.

Saludos.

Al González. :)
  • 0

#5 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 20 octubre 2009 - 03:43

Hola Razadi, te recomiendo que no especifiques la clase de flujo (stream) que deseas.

Opta por el método CreateBlobStream que viene en todo data set desde hace ya varias versiones de Delphi.  Así el objeto flujo creado será compatible con el tipo de conjunto de datos que uses.

Saludos.

Al González. :)


Ya quedó AL, gracias por tu consejo, saludos
  • 0

#6 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 22 octubre 2009 - 04:52

Nuevamente yo comuneros.
AL me quedo como comentaste, el problema que ahora tengo es como leer un blob desde la base de datos de MySQL, y estoy accesando desde ZEOS 6.6.3

Cuando lo hacia desde BDE a Firebird esta era la instrucción que usaba


delphi
  1. keytmp := TBlobStream.Create(TBlobField(DataSet.FieldByName('CampoKeyEncr')),bmRead);


el valor del campo CampoKeyEncr es tipo blob, pero ahora con MySQL y ZEOS me manda error

Con el CreateBlobStream  no tengo problema pero no me lee el contenido del campo blob desde la base de datos.

Alguna sugerencia???


  • 0

#7 Al González

Al González

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 99 mensajes

Escrito 22 octubre 2009 - 07:27

Alguna sugerencia???

Dos preguntas:

¿Cuál es el código que pusiste con CreateBlobStream?

¿Cómo tratas de leer su contenido?  Es decir, cuando dices "no me lee", ¿a qué te refieres? :)

Saludos.

Al González.
  • 0

#8 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 23 octubre 2009 - 07:40

Si AL, mira  este es código que utilicé, y ya no me marca error, pero no me genera el resultado esperado.

El resultado esperado es que con esta información que se tiene en la BD se genera un archivo que se envía vía ftp a un servidor para que se procese, por consiguiente cuando el otro sistema lo quiere guarda en su BD no puede dice que está dañado el archivo.



delphi
  1. var
  2.   keytmp: TStream;
  3. begin
  4.   if Datos.FindField(CampoKeyDecr)<> nil then begin
  5.     keytmp := Datos.CreateBlobStream(Datos.FieldByName(CampoKeyDecr),bmRead);
  6.     KeyEncrip.LoadFromStream(keytmp);
  7.   end;
  8. end;



donde
KeyEncrip: TMemoryStream;
Datos: TZQuery;
CampoKeyDecr: string = 'nombre del campo tipo blob en MySQL'


cuando usaba BDE se tenia lo siguiente:



delphi
  1. var
  2.   keytmp: TBlobStream;
  3. begin
  4.   if Datos.FindField(CampoKeyDecr)<> nil then begin
  5.     keytmp := TBlobStream.Create(TBlobField(Datos.FieldByName(CampoKeyEncr)),bmRead);
  6.     KeyEnCrip.LoadFromStream(keytmp);
  7.   end;
  8. end;



con este código, si esta funcionando bien, pero ahorita lo que se esta haciendo es quitar la capa del BDE y sustituirla por Zeos

gracias de antemano.
  • 0




IP.Board spam blocked by CleanTalk.