Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 21-11-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Muy buen día a todos!

Hola Hades2600. De antemano te recomiendo que cuando aparezca una excepción en pantalla presiones Ctrl+C para copiar el mensaje al portapapeles y así poder mostrarlo completo.

Cita:
…raised exception class EInvalidCast with message 'Invalid class typecast'…
La excepción EInvalidCast corresponde a un molde de tipo inválido hecho con el operador As. Hice una prueba similar que me dio el mismo error, pero a simple vista no encontré nada en el código fuente, así que marqué la opción Project-Options-Compiler-Use Debug DCUs para que el depurador se metiera hasta la cocina.

De esta forma encontré que la excepción se origina en el método TParameters.GetCommand.

Código Delphi [-]
function TParameters.GetCommand: TADOCommand;
begin
  Result := GetOwner as TADOCommand;
end;

GetOwner es un método de toda colección que devuelve el dueño de la misma, es decir, el primer parámetro que es dado cuando se instancia una colección. Como se ve en el código, se asume que el dueño de la colección es un objeto TADOCommand, pero en tu componente usas el propio componente consulta como dueño:

Código Delphi [-]
constructor TNewADOQuery.Create(aOwner: TComponent); override;
begin
  inherited Create(aOwner);
  FcpyParams := TParameters.Create(Self, TParameter);   { <-- Self es la instancia TNewADOQuery }
end;

He ahí la causa de la excepción: TParameters.GetCommand trata de moldear un TNewADOQuery como si fuese un TADOCommand. Cabe mencionar que este uso del operador As es necesario porque el método GetOwner está ascendentemente declarado como una función que devuelve un TPersistent. No obstante se espera que el dueño de la colección sea un TADOCommand.

Revisando un poco más el código fuente de ADODB.pas, encontré que el dueño de la propiedad Parameters de un TADOQuery no es el propio componente consulta, sino un subcomponente (componente interno) que la clase declara como propiedad protegida "Command".

Así pues, la solución a tu caso es que uses tal objeto como primer parámetro en la instanciación del objeto TParameters:

Código Delphi [-]
  FcpyParams := TParameters.Create(Command, TParameter);

No olvides redefinir el destructor Destroy para liberar el objeto FcpyParams, y no dejes de contarnos sobre tus avances.

Al González.

P.D. Concuerdo con Lepe en que deberías plantearnos el propósito de todo esto.

Última edición por Al González fecha: 21-11-2007 a las 17:36:28.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Parameters y ProcedureName de TAdoStoreProc Cabanyaler Conexión con bases de datos 6 20-06-2012 14:14:10
Copia de tablas como copia de seguridad Mathom Varios 4 04-01-2006 09:19:57
No parameters Expected(ApplyUpdate) david duarte Varios 11 31-10-2005 23:16:27
Copia de seguridad y restablecer copia en paradox Sayuri Conexión con bases de datos 4 30-08-2005 17:08:37
Adoquery1.parameters Socorro!!!! taita SQL 2 27-09-2003 12:00:20


La franja horaria es GMT +2. Ahora son las 14:58:47.


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
Copyright 1996-2007 Club Delphi