Jump to content


Photo

Error: "Invalid class typecast"


  • Please log in to reply
7 replies to this topic

#1 razadi

razadi

    Advanced Member

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

Posted 19 October 2009 - 12:54 PM

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
  • 7419 posts
  • LocationRepública Dominicana

Posted 19 October 2009 - 01:14 PM

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 posts
  • LocationMéxico D.F.

Posted 19 October 2009 - 02:21 PM

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 posts

Posted 20 October 2009 - 03:23 AM

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 posts
  • LocationMéxico D.F.

Posted 20 October 2009 - 03:43 PM

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 posts
  • LocationMéxico D.F.

Posted 22 October 2009 - 04:52 PM

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 posts

Posted 22 October 2009 - 07:27 PM

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 posts
  • LocationMéxico D.F.

Posted 23 October 2009 - 07:40 AM

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.