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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
Usando AnyDAC con Delphi Tokyo

Hola amigos,

Bajé la versión de Delphi Tokyo Community Edition, pero quiero conectarme con bases de datos remota. Desde ya no puedo usar FireDAC, porque para esta versión está restringida a bases de datos locales, y además mi código es bastante viejo ya, y tengo una licencia de AnyDAC antes que los comprara Embarcadero.

El asunto es que hice compilar mi aplicación, y también pude compilar AnyDAC; pero como algunos ya sabrán, Data.DB cambió mucho desde el tiempo de Delphi XE hasta ahora, y en resumen, AnyDAC no me trae valores desde la base de datos.

¿Alguien sabe qué es lo que cambió en Data.DB que hace que las librerías viejas de conexión a bases de datos no funcionen? Ví algo con UniDAC en otro hilo y también hice la pregunta, pero pregunto por acá para ver si alguien comparte su sapiencia.

Saludos desde Chile
Responder Con Cita
  #2  
Antiguo 21-09-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.220
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Estaría bien saber a qué base de datos te estás conectando, para valorar otras alternativas.
Una opción es que mires de actualizar la versión de UniDAC (si puedes).
La otra (si la anterior no es viable) es que utilices otros componentes de conexión, como pueden ser ZeosLib. Pero para "afinar" esto último habría que saber a qué te estás conectando.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 21-09-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
No uso UniDAC, sino AnyDAC (que ahora es FireDAC).

Cambiar estos componentes no es viable, es un proyecto viejo con harto código que usa funcionalidades específicas de AnyDAC.

Lo que me interesa saber es qué cambió entre XE y XE3 en esta área. Recuerdo que en un momento FireDAC sólo soportó las versiones desde XE3 hacia adelante, lo que me hace sospechar que hubo cambios importantes en Data.DB en esa versión.

Depurando ví que AnyDAC lo único que hace en un momento es un "fetch" a una estructura interna llamada FRow, pero haciendo muchos malabares con buffers internos. Luego Data.DB trata de acceder a su propio buffer interno pero AnyDAC nunca lo asignó, por lo tanto convierte el buffer sin inicializar a 0. Y ahí estoy aún, AnyDAC parece tener tentáculos por todos lados.
Responder Con Cita
  #4  
Antiguo 22-09-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.011
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por leus Ver Mensaje
El punto es que ahora (dado que esto es un hobby) estoy usando Delphi Tokyo Community Edition, y le instalé los componentes (tuve que hacer un par de cambios en el código). ¡Pero no funcionan! Algo cambió en la unit DB.pas (ahora Data.DB.pas) que hace que todo me devuelva vacío.
En fin, a seguir peleando. La Community Edition es espectacular, es de esperar que no sea demasiado tarde.
Si es un hobby, entonces puedes dedicarle tiempo en adaptarlo. Lo malo sería que tuvieses a un montón de empresas esperando.
Responder Con Cita
  #5  
Antiguo 22-09-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
Bueh, es un poco complicado - tuve una empresa, vendí un software, pero ahora la empresa está, hm, "inactiva" (y yo estoy trabajando en otra parte). Pero los clientes siguen usando el software y yo, que tiendo a valorar mi nombre, les sigo dando soporte como un gil.

Mi filosofía respecto del soporte es intentar evitar dar soporte - para eso, sigo manteniendo el software. A veces me paso días desarrollando cosas que me evitarán una hora de soporte :-)

En eso estoy ahora. Estoy intentando actualizar mi software porque quiero compilarlo en Tokyo. No quiero tener que usar máquinas virtuales para tener Delphi XE en un lado y Tokyo en otro... prefiero usar un solo IDE.

En fin, sigo investigando, y veo que hubo cambios en XE3 en la manera que los TField obtienen sus datos. Pero no tengo el diff - alguien puede ser tan amable de hacer una comparación entre DB.pas de Delphi XE y Data.DB.pas de Delphi Tokyo?
Responder Con Cita
  #6  
Antiguo 22-09-2018
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Suena razonable lo que comentas, leus (dejé algo acá).

Bien, hay dos maneras de resolverlo: Aprovecho que estoy desempleado para analizar esto con detalle, me das acceso por TeamViewer (no tengo esos componentes) y, divirtiéndome mucho, intento diagnosticar por qué ya no te funciona igual el componente proponiendo alguna solución que compartamos con todos. Tal vez un par de semanas basten.

La otra opción es invertir en tu nombre.

Saludos. :-)
Responder Con Cita
  #7  
Antiguo 22-09-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
Al, eso sería genial. A ver si nos podemos coordinar por mensaje interno.

Sí, si me entra un dinero extra probablemente compre una licencia Enterprise. (¡Pero es equivalente a un mes de sueldo!)
Responder Con Cita
  #8  
Antiguo 23-09-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
Ah, creo que encontré el problema, y de momento parece que todo funciona ok.

Las declaraciones de algunos overrides de AnyDAC no eran correctas, por lo que se estaba llamando a las funciones base de TDataset (que no hacen nada). Estos son los cambios necesarios, en caso de que alguien se encuentre con este problema:

Código:
 Source/uADCompDataSet.pas | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Source/uADCompDataSet.pas b/Source/uADCompDataSet.pas
index b324bc9..af9cf96 100644
--- a/Source/uADCompDataSet.pas
+++ b/Source/uADCompDataSet.pas
@@ -758,8 +758,8 @@ type
     procedure GetDetailLinkFields(AMasterFields, ADetailFields: TList); {$IFNDEF AnyDAC_FPC} override; {$ENDIF}
     function GetColumnField(AColumn: TADDatSColumn): TField;
     function GetFieldColumn(AField: TField): TADDatSColumn; overload;
-    function GetFieldData(AFieldNo: Integer; ABuffer: Pointer): Boolean; overload; {$IFNDEF AnyDAC_FPC} override; {$ENDIF}
-    function GetFieldData(AField: TField; ABuffer: Pointer): Boolean; overload; override;
+    function GetFieldData(AFieldNo: Integer; var ABuffer: TValueBuffer): Boolean; override;
+    function GetFieldData(AField: TField; var ABuffer: TValueBuffer): Boolean; override;
 {$IFNDEF AnyDAC_FPC}
     function GetStateFieldValue(AState: TDataSetState; AField: TField): Variant; override;
 {$ENDIF}
@@ -3843,7 +3843,7 @@ begin
 end;
 
 {-------------------------------------------------------------------------------}
-function TADDataSet.GetFieldData(AFieldNo: Integer; ABuffer: Pointer): Boolean;
+function TADDataSet.GetFieldData(AFieldNo: Integer; var ABuffer: TValueBuffer): Boolean;
 var
   pRecBuf: PADBuffer;
   oColumn: TADDatSColumn;
@@ -3983,7 +3983,7 @@ begin
 end;
 
 {-------------------------------------------------------------------------------}
-function TADDataSet.GetFieldData(AField: TField; ABuffer: Pointer): Boolean;
+function TADDataSet.GetFieldData(AField: TField; var ABuffer: TValueBuffer): Boolean;
 var
   pRecBuf: PADBuffer;
 begin
@@ -4004,7 +4004,7 @@ begin
         if AField.DataType = ftBCD then
           CurrToBCD(PCurrency(pRecBuf + 1)^, PADBcd(ABuffer)^)
         else
-          ADMove(pRecBuf[1], ABuffer^, AField.DataSize);
+          ADMove(pRecBuf[1], PADBuffer(ABuffer)^, AField.DataSize);
     end;
   end;
 end;
Responder Con Cita
  #9  
Antiguo 23-09-2018
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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
Excelente. Qué bueno que pudiste resolverlo ajustando las directivas condicionales.
Responder Con Cita
  #10  
Antiguo 27-09-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por leus Ver Mensaje
Bueh, es un poco complicado - tuve una empresa, vendí un software, pero ahora la empresa está, hm, "inactiva" (y yo estoy trabajando en otra parte). Pero los clientes siguen usando el software y yo, que tiendo a valorar mi nombre, les sigo dando soporte como un gil.

Mi filosofía respecto del soporte es intentar evitar dar soporte - para eso, sigo manteniendo el software. A veces me paso días desarrollando cosas que me evitarán una hora de soporte :-)

En eso estoy ahora. Estoy intentando actualizar mi software porque quiero compilarlo en Tokyo. No quiero tener que usar máquinas virtuales para tener Delphi XE en un lado y Tokyo en otro... prefiero usar un solo IDE.
Me parece estar escuchando la historia de mi vida
Responder Con Cita
  #11  
Antiguo 27-09-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por leus Ver Mensaje
Al, eso sería genial. A ver si nos podemos coordinar por mensaje interno.

Sí, si me entra un dinero extra probablemente compre una licencia Enterprise. (¡Pero es equivalente a un mes de sueldo!)
Tienes suerte, yo necesito ahorrar durante unos 2 años evitando los lujos (carne, pan, leche, huevos...) para poder comprar una licencia...
Responder Con Cita
  #12  
Antiguo 28-09-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
Cita:
Empezado por gatosoft Ver Mensaje
Tienes suerte, yo necesito ahorrar durante unos 2 años evitando los lujos (carne, pan, leche, huevos...) para poder comprar una licencia...
El equivalente a UN MES DE SUELDO, no ahorrar por un mes :-) - no se tú, pero a mí el sueldo me alcanza apenas
Responder Con Cita
  #13  
Antiguo 28-09-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Mes y medio
Responder Con Cita
  #14  
Antiguo 28-09-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.011
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿De qué habláis?
Responder Con Cita
  #15  
Antiguo 20-11-2018
leus leus is offline
Registrado
NULL
 
Registrado: sep 2018
Posts: 9
Poder: 0
leus Va por buen camino
En caso de que alguien a futuro se encuentre con este problema, he seguido parchando AnyDAC para que funcione con las versiones recientes de Delphi (faltaban otros overrides por ahí). Obviamente no puedo publicar los fuentes, pero sí podría pasar los cambios necesarios por interno.

¡Saludos!
Responder Con Cita
Respuesta


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
IDE en Delphi Tokyo 10.2.3 hugobenitez Varios 6 27-06-2018 19:13:54
QuotedStr Delphi Tokyo 10.2 rmendoza83 Varios 1 28-11-2017 03:53:41
Disponible Delphi 10.2 Tokyo AgustinOrtu Noticias 54 05-07-2017 18:31:37
Delphi 10.2 Tokyo vs DevExpress lgarcia OOP 2 05-06-2017 16:00:13
Compra de Delphi Tokyo o Berlin pruz Varios 20 08-04-2017 18:02:46


La franja horaria es GMT +2. Ahora son las 09:42:05.


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