Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Question Error en Emulación de BDE usando dbExpress

Hola,

Para migrar aplicaciones BDE en Delphi 4 a dbExpress con Delphi 2007 he estado desarrollando una librería que emule los componentes BDE usando como capa interna dbExpress. Mi estrategia ha sido crear componentes con los mismos nombres de los del BDE, que desciendan de sus homólogos dbExpress. Esto me permitiría migrar transparentemente sin necesidad de re-escribir código.

Las cosas estaban saliendo bien, la unidad era pequeña (menos de 6k) y el paquete había registrado los componentes TDatabase, TQuery, etc; pero en un momento dado me encontré con una funcionalidad que cambió la forma de almacenarse en los dfm y para corregirla necesito corregir la propia unidad SqlExpr de CodeGear. Para ello pensé que lo mejor era mezclarlo todo en mi unidad, generando una versión grande de la misma; pero al hacerlo, y tratar de instalar de nuevo el paquete, me marca un error diciendo que no puede registrarlos porque otro paquete (el dclBDE100.Bpl, del cual no aparece el fuente) ya ha registrado esos nombres.

Lo raro es que siempre que uso la versión pequeña de mi unidad, los componentes se registran bien; es decir, Delphi me permite registrar componentes que tengan el mismo nombre. Yo supongo que lo hace porque están en paquetes distintos y se registran en páginas distintas.

Ahora bien, la pregunta es por qué falla al usar la versión grande ?. Yo supongo que de alguna forma, al incorporar directamente a ella referencias a una serie de unidades de la unidad original SqlExpr se está involucrando una referencia a una unidad que requiera del registro de TDatabase y compañía. Busqué en los fuentes Codegear y el único punto de registro de TDataBase y demás es la unidad BDEReg; pero se supone que el paquete dbExpress no debe contener referencias a BDE, luego, qué pasa ?. Alguién tiene una idea.

Última edición por rolandoj fecha: 10-09-2007 a las 17:28:32. Razón: Nombre de unidad mal escrito
Responder Con Cita
  #2  
Antiguo 12-09-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Question Cual GUID ?

Hola,

Aunque no he encontrado una explicación para este problema, investigando los fuentes de Delphi 2007, encontré un posible camino de solución, aunque no tengo claridad en los detalles para implementarla :

Aparentemente, los componentes que nos ocupan son registrados en Windows mediante la rutina GlobalRegisterComponentsProc de la unidad PDPackageLoader. Dado que este es un registro de clases, está asociado a un GUID y por tanto pienso que puede funcionar una técnica para resolver conflictos de nombres cuando se importan librerías de terceros; pero no estoy del todo seguro.

La técnica consiste en editar con el block de notas el archivo tlibimp.sym y agregar una sección para mapear los nombres que tengan conflictos. He aquí un ejemplo parcial tomado de ese archivo para el caso MS-Word:

;;==============================================;;
;; Map WinWord CoClasses to better names ;;
;;==============================================;;
[{00020905-0000-0000-C000-000000000046}:TypeNames]
Application=WordApplication
Document=WordDocument

El problema que tengo es : cuál GUID debo usar ?. Sin olvidar que sigue siendo válida la pregunta original : Por qué el registro de nombres duplicados funciona bien con la versión pequeña de la unidad y no con la grande ?. Eso me sigue generando dudas respecto a la posible solución encontrada.

Agradezco de antemano cualquier ayuda
Responder Con Cita
Respuesta



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
conectar postgresql usando dbexpress barrauda Conexión con bases de datos 4 16-07-2007 13:45:04
manejo de errores de base de datos usando dbexpress e interbase ramirezjas Conexión con bases de datos 1 07-07-2007 21:15:13
Error usando wininet Metalmind API de Windows 2 13-05-2006 12:03:52
Error usando TMemoryStream Abaddon Varios 2 04-03-2005 10:59:40


La franja horaria es GMT +2. Ahora son las 07:02:20.


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