Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Cual es la mejor opción de conexión a Bases de Datos en Lazarus para ... ? (https://www.clubdelphi.com/foros/showthread.php?t=80285)

rolandoj 15-09-2012 04:49:01

Cual es la mejor opción de conexión a Bases de Datos en Lazarus para ... ?
 
Hola,

Después de muchísimo tiempo intento de nuevo probar Lazarus. En aquella ocasión me topé con un problema, para mi muy grave, que espero que ya esté resuelto.

La pregunta es cual de las opciones de conexión a Bases de Datos (SQLdb, Zeos u otras) disponibles en Lazarus me permite seleccionar a tiempo de ejecución el motor de Bases de Datos ?. O ninguna lo hace aún ?. Si hay más de una que lo hace, cual soporta mayor cantidad de motores ?

El caso es que he estado investigando en Internet; pero, toda la documentación que he encontrado parte del supuesto de que el motor de Base de Datos es conocido a tiempo de compilación, y termina siempre usando componentes que solo sirven para ese motor.

Mi caso es distinto, ya que necesito que el motor solo sea conocido cuando el programa está en ejecución; o sea, necesito que los componentes de conexión sean genéricos. Lo más cercano que he visto es un componente para conexión ODBC. Eso sirve; pero no es lo deseable porque descarta el uso de librerías cliente nativas.

En aquella ocasión la explicación que encontré fué que cuando se compilaba bajo Linux el ejecutable resultante no podía cargar dinámicamente librerías (o no lo hacía muy bien; no recuerdo con claridad ese detalle). Como Lazarus es portable, eso obligaba a que, para tener la habilidad de seleccionar dinámicamente el motor, se tuviera que compilar estáticamente todas las librerías de todos los motores a soportar; lo que es una penalidad alta y por ello nadie había trabajado en una tecnología que soportara esa selección dinámica. Se ha superado esa situación ?

Casimiro Notevi 15-09-2012 10:20:56

Que yo sepa (aunque yo sólo sé que no sé nada) ZeosLib, 'de toda la vida' permite conectar a distintas bases de datos. Por lo que supongo que tiene que dar igual si lo hace en tiempo de diseño o en ejecución.

rretamar 15-09-2012 13:18:03

ZeosLib permite seleccionar en tiempo de ejecución el motor de base de datos cambiando un par de propiedades, en ese caso a la hora de establecer la conexión usará las bibliotecas de acceso correspondientes.

rolandoj 15-09-2012 15:16:56

Gracias por la información
 
Hola a todos,

Gracias por la información. Voy a concentrarme entonces en Zeos. Haré pruebas y la semana entrante les comento como me fué.

Saludos

rretamar 15-09-2012 19:26:12

Si optas por Lazarus Codetyphon, ya trae los componentes ZeosLib preinstalados.

rolandoj 15-09-2012 21:39:48

Había empezado por ahí
 
Cita:

Empezado por rretamar (Mensaje 443218)
Si optas por Lazarus Codetyphon, ya trae los componentes ZeosLib preinstalados.

Hola,

Gracias por la observación. De hecho, ya había empezado por ahí. Hice la pregunta cuando ya había instalado CodeTyphon.

Adelanto que ya hice una prueba preliminar de conectarme a una Base de Datos a tiempo de ejecución y efectuar un Query. Fué muy satisfactoria y realmente la pude armar en minutos. El paso siguiente es hacer pruebas más a fondo y si todo sale bien migrar mis componentes de Base de Datos para que desciendan de los de Zeos.

Curiosamente, lo que más problema me ha dado hasta ahora no ha sido eso sino el editor. Tiene demasiada opciones y muchas con nombres poco intuitivos. Me llevó más de una hora configurarlo para que se pareciera lo suficiente a mi editor usual de Delphi para trabajar aceptablemente. Aún hay aspectos que me resultan incómodos; pero, la otra semana trabajaré en ajustarlo.

Saludos

rolandoj 18-09-2012 17:06:51

Hasta ahora bien; pero ...
 
Hola,

He hecho más pruebas y el objeto de este hilo "poder conectar a múltiples motores a tiempo de ejecución" lo está cumpliendo bien Zeos.

Sin embargo, cuando he empezado a mirar más a fondo, ya pensando en migrar a Zeos, me he topado con una falta de información preocupante, en especial por la ubicación de funciones que, si existen, no están donde uno las esperaría.

Por ejemplo, al tratar de recuperar la estructura de una tabla fué muy facil, e intuitivo, tanto recuperar la lista de nombres de tablas como la de campos de las mismas; pero, ya al mirar como recuperar la información de cada campo (tipos de datos, longitud, etc), no aparece ninguna función pública en el componente de conexión, que es donde uno lo esperaría.

Estuve buscando en Internet y nada que encuentro información amplia, todo se refieren a simples conexiones de componentes. Alguno podría indicarme un enlace que explique en mayor detalle características avanzadas, como el ejemplo dado, que, según lo que vi en el sitio de Zeos, parece que si las tiene ?.

rretamar 18-09-2012 20:35:21

Con respecto a recuperar información de las tablas, Zeos tiene un componente para recuperar los "metadatos" que es justamente eso.

Casimiro Notevi 18-09-2012 21:08:00

Cita:

Empezado por rolandoj (Mensaje 443414)
... ya pensando en migrar a Zeos, me he topado con una falta de información preocupante

je, je, je... lo preocupante es que sueltes una afirmación así a todo el mundo, cuando ni siquieras has mirado todos los componentes, ni ninguna documentación, etc. ;)

rolandoj 18-09-2012 21:49:52

Gracias por el dato. Comentarios
 
Hola a todos,

rretamar, Gracias por la información de los metadatos. Sin embargo, ese era solo un ejemplo. Lo que quise decir, es que no pude encontrar facilmente, ni desde Lazarus, ni desde el propio sitio de Zeos, ni buscando en internet, una documentación adecuada para uno revisar los componentes a un nivel detallado.

Respecto al comentario de Casimiro, quiero aclarar porque quizás me mal interpreta, y no se trata de una crítica destructiva, ni un comentario a la ligera.

Verán, yo tengo formación autodidacta, y al mismo tiempo de productividad. Para mi, es clave tener una documentación donde uno mismo, rápidamente, pueda abordar con profundidad un tema. Aprecio muchísimo la ayuda desinteresada de quién saca algo de su tiempo para contestar preguntas que te guien; pero, esa debe ser la excepción. Uno no debería depender usualmente de la colaboración de terceros porque eso genera demoras que significan falta de productividad.

Se que en los software de este estilo usualmente no se documenta bien por parte de los integrantes del propio proyecto y entiendo las razones; pero, también en general, cuando tienen una aceptación masiva uno puede esperar encontrar documentación de terceros, así sea fragmentaria. Para mi, el hecho de que después de intentar un rato en internet diversas busquedas y no encontrar mayor detalle me hace pensar que no hay mucho cubrimiento del producto.

Fué por lo anterior eso que usé la frase "falta de información preocupante"; ya que hay dos posibilidades : Uno, efectivamente la información casi no existe y tocaría investigar por uno mismo en el código, o con preguntas a terceros, acción que puede ser muy gratificante en lo académico; pero, de avance lento y por ello muy problemática para quienes necesitamos productividad. Dos, que la información si esté; pero, no sea facil de localizar en la Web.

Casimiro Notevi 18-09-2012 22:26:29

Aclarado queda :)
Desgraciadamente en proyectos libres es muy difícil encontrar buena documentación porque no hay alguien detrás que ponga dinero.
También, desgraciadamente, todos los que usan ese software no colaboran con el mismo, después nos quejamos (me incluyo) de que hay algo que no terminan de solucionar, o que tardan mucho en sacar una nueva versión, o que no tiene buena documentación o ayuda, etc.
Pero el problema está claro, por poner el ejemplo de Zeos, es una pesona sola, nadie más. Algunas veces ha puesto mensajes en su web buscando algún colaborador, pero no ha obtenido respuesta favorable.
¿Qué ocurre entonces?, si no encuentras colaboradores, si no recibes ninguna ayuda económica, necesitas comer todos los días, etc. y finalmente abandonas el proyecto.
Algunos tienen suerte y encuentran colaboración, ayuda económica, etc. pero son escasos. Me viene a la mente el caso de Wine, que tras muchos años en la versión cero (0.9.1 - 0.9.2 - 0.9.3 - etc...), un día llegó google y les soltó 10 millones de dólares (creo recordar) y al mes siguiente sacaron la versión 1.0
Otros como Firefox consiguen ayuda de google también, aunque ya para este año se la han eliminado, de todas formas no tienen demasiado problema porque son ya muy grandes, es muy usado y pueden obtener publicidad, colaboración y demás.
Firebird se subvenciona principalmente por el servicio de asistencia técnica, tengo entendido.
Lazarus es otro que lleva montones de años para llegar por fin a la versión 1, y creo que lo han conseguido porque han habido varios programadores que han estado trabajando en el proyecto.
Otro que lleva muchos años y tienen un buen producto es FPC (Free Pascal Compiler), el compilador que usa Lazarus, que incluso Embarcadero lo ha usado en Delphi XE2 para compilar los productos de Apple y ¡¡¡no le han dado ni las gracias!!!, por todo el morro, increible. Pero ellos bien que cobran XE2 y ahora XE3 (que creo que lo han eliminado para esta versión, aunque todavía no tienen un compilador propio).
Porque que levante la mano quien haya hecho alguna "donación" o algo a Firebird, Zeos, etc.

Y así están las cosas, zeos va avanzando a paso de tortuga (tortuga coja y reumática) porque hay una sola persona que le dedica los ratos libres.
No se le puede exigir documentación, avances, estar al día para todos los sistemas, etc. si el "pobre" lo hace "por amor al arte". Bastante hace.

daragor 19-09-2012 02:07:46

Se puede instalar Zeos en lazarus 1.0 ? yo no puede, sale un error a la hora de compilar...

Casimiro Notevi 19-09-2012 02:23:30

Se puede :)

Por cierto, si tienes alguna duda, ya sabes, abres un nuevo hilo, pones un título descriptivo, explicas claramente el problema y a esperar un poquito ;)

rolandoj 19-09-2012 04:50:44

Por supuesto, son las causas; pero, aceptarlas no elimina el problema
 
Hola Casimiro,

Por supuesto, tienes toda la razón al enumerar las causas. Y obviamente era a lo que me refería cuando dije antes que "entiendo las razones". Yo se todo eso; y es particularmente entendible la necesidad de comer. A mi me pasa lo mismo. Si por mi fuera preferiría estar desarrollando componentes y colaborando con ese tipo de proyectos; pero, la vida del pobre obliga a comer y por ello me toca trabajar en proyectos donde la paga es inmediata.

Sin embargo, el entender la situación no elimina el problema; por ello las cosas siguen siendo preocupantes. Dada tú amabilidad en contestar, quiero aclararte un poco mi situación, para que sirva de retroalimentación sobre un problema general

Yo soy usuario registrado de Delphi 2007 Enterprise, así que en teoría no debería preocuparme por un producto libre; pero, Delphi no ha mantenido una línea coherente con las necesidades de quién compra una versión Enterprise. Es que quién lo hace es básicamente porque necesita un fuerte soporte de acceso a Bases de Datos y en Delphi, a pesar de los años transcurridos, lo más básico que uno necesita en esa línea, evolucionar a poder compilar aplicativos servidores en Linux, lo ha venido postergando tanto que la situación, desde hace ya un tiempo se nos ha vuelto casi insostenible porque esa desventajas nos está haciendo perder un número importante de potenciales clientes.

Tenemos dos alternativas : Abandonar la enorme base de código que tenemos para la parte de servidor y usar un lenguaje no basado en Pascal, o pasarnos a Lazarus.

Obviamente, lo que intentamos es pasarnos a Lazarus porque es la opción menos crítica en tiempo; pero, aún así no tenemos recursos para dedicarle mucho tiempo a eso, por lo que cosas tales como la dificultad en conseguir información nos resultan, como dije, "preocupantes".

Por ahora, la idea es mirar si podemos migrar primero manteniendonos en Windows, ya que es nuestro ambiente familiar. Una vez que tengamos eso, debería ser más facil tener la versión bajo Linux. Si, ya sé que Lazarus es portable, etc, etc .. ; pero, la experiencia del intento anterior nos dice que, por lo menos para quienes nos movemos es en Windows, el saltar directamente a Linux resulta muy complicado. Esta vez decidimos que es mejor aseguranos que tenemos ya todo bien con el lenguaje para luego lidiar con el cambio de sistema operativo.

Casimiro Notevi 19-09-2012 10:59:07

También creo que Embarcadero se ha dormido en los laureles o, más bien, no ha seguido una buena campaña de promoción para atraer nuevos usuarios y tampoco pensando en el futuro. Han sido y siguen siendo muy "erráticos" en sus decisiones y eso añadido a que se han quedado muy encerrados en windows y ahora que está intentando expandirse algo tampoco lo han hecho demasiado bien, me refiero a usar FPC y luego quitarlo, en fin, cosas que no la podemos comprender desde fuera.
Parece que ahí falta una buena cabeza pensante que tome el timón del barco con mano firme y segura hacia un buen rumbo, si es que quieren llegar sanos y salvos a su "embarcadero" :)
En cuanto al acceso a bases de datos, ya sabes, se han enfocado más hacia dbexpres, pero claro, si se dedican a "caparlo" para según qué versiones, tampoco parece una buena idea de promoción.
Lazarus está muy bien, han llegado muy lejos y la posibilidad de compilar para distintos sistemas y cpus es algo que embarcadero no ha conseguido, porque no ha querido, seguramente.
Ahora bien, si quieres que tu programa windows funcione luego en linux, debes usar funciones que no hagan uso de "cosas" que únicamente existen en windows, tendrás que buscar y usar recursos/funciones/etc. que sean estandar y portables entre ambos sistemas.

rolandoj 19-09-2012 15:44:38

Si; lo de Embarcadero es incomprensible
 
Hola Casimiro,

Pués sí. lo de Embarcadero es incomprensible. Y bueno, no solo Embarcadero, el manejo errático empezó en los tiempos de Borland.

Como yo lo veo, el problema es que ellos nunca entendieron, o no quisieron entender, que antes de buscar nuevos usuarios, hay que conservar los que se tienen; entre otras cosas porque los nuevos usuarios a menudo se fijan en eso. Quién se pasaría a un proveedor que no "consiente" a sus viejos usuarios ?.

La visión que tuvieron fué de que al pasar a una nueva versión había que conservar las características de la anterior; pero, todas las facilidades nuevas las volcaban en nuevas tecnologías. No mejoraban la base que se tenía.

Aquí te doy un feedback desde mi punto de vista como usuario de una versión Enterprise. Si uno invierte aunque sea en una sola licencia Enterprise (unos US $3,000 de ese tiempo), y cuidado que mi primera versión Enterprise fué Delphi 4, debería ser obvio que uno planea desarrollos grandes.

En empresas pequeñas y medianas, la inmensa mayoría del desarrollo está orientada a necesidades internas; por ello, son desarrollos muy particulares de cada una que pueden funcionar practicamente sin mayores cambios por muchos años. Al mismo tiempo, como poco a poco se van cubriendo necesidades de la empresa, esos desarrollos se vuelven muy grandes, Cuando se tienen desarrollos grandes, un cambio drástico de tecnología suele ser tan costoso y los beneficios tan escasos que a la hora del balance costo-beneficio el cambio es desechado y solo se hace cuando ya no queda otra posibilidad.

Por lo anterior, lo que uno como cliente viejo necesita es poder agregar nuevas características reescribiendo lo menos posible el código existente. Eso fué lo que no entendió el equipo de Delphi porque en sus versiones, si bien conservaban la funcionalidad previa, el agregar nuevas características es muy traumático y, como dije, lo peor es que la capacidad de desarrollar servidores Linux, que es la más importante cuando trabajas en un ambiente empresarial de mediano para abajo, salvo un intento fallido con Kylix, aún no la han incorporado.

Por cierto, lo que dices de la portabilidad por supuesto que lo tenemos en cuenta. En todo caso, para nosotros no es problemático porque, aparte de la metodología que usamos, la idea es pasar, al menos por ahora, solo la parte de servidor; o sea, no tenemos que preocuparnos por controles visuales.

Casimiro Notevi 19-09-2012 17:07:20

¿A qué te refieres con aplicaciones servidor?

rolandoj 19-09-2012 19:56:05

Típicamente, Web Server applications
 
Hola Casimiro,

Mira, tienes razón en tú pregunta. Disculpa. A veces en el día a día uno acorta terminología porque dentro de nuestro entorno el significado del término se vuelve obvio; pero, se nos olvida que el significado literal puede ser más amplio y al expresar la idea frente a otros, que no usan la misma terminología, pueden entender otra cosa.

Es el caso de "aplicaciones servidor". Si, formalmente hablando el término abarca mucho; pero, yo lo usé en referencia a lo que para mi es el día a día, así que te explico.

Cuando hablo de aplicaciones servidor me refiero a aquellas que contienen solo la capa de acceso a Bases de Datos, y que, mediante algún tipo de protocolo devuelven a aplicaciones clientes solo datos que estos pidieron expresamente. Más concretamente, me refiero a Web Server Applications; o sea, aquellas que en Delphi usan el componente TWebModule para responder a los clientes típicamente vía http.

Para que quede muy clara la idea, aún más típicamente eso significa que las aplicaciones que se ejecutan del lado del equipo cliente no tienen ninguna relación con las que van en el lado del equipo usado como servidor, distinta al envío de datos vía http. Por lo anterior, el aplicativo del lado servidor puede estar escrito en un lenguaje distinto al de los aplicativos del lado del cliente, e incluso pueden estar ejecutandose sobre sistemas operativos distintos.

Ciertamente, podríamos entrar a discutir ventajas y desventajas de este modelo de trabajo frente a otros que amarran los lenguajes usados en cliente y servidor, o las metodologías que usamos y herramientas de apoyo para que eas forma de trabajo sea realtivamente facil; pero, no es tema de aquí.

Lo que si quiero resaltar es por qué, por lo menos en mi región, es muy importante para quienes usamos Delphi, poder compilar el aplicativo servidor en Linux. Dos razones :

1. La una es técnica, ya que es conocida la calidad de Linux como sistema operativo del servidor.

2. La otra es económica, debido a los costos de licensiamiento de Windows, que para empresas pequeñas y medianas representan un valor importante; y que ya nos han hecho perder negocios frente a otras opciones que si pueden emplear Linux como servidor

Casimiro Notevi 19-09-2012 20:11:01

Gracias por la aclaración :)

Chandra_ 23-09-2012 23:41:23

Hola. Yo estoy migrando una aplicación Windows mía de Delphi 2007 a Lazarus (corriendo sobre Linux). Para el tema de bases de datos, utilizo los componentes que trae Lazarus, y no he tenido ningún problema.

Utilizo el siguiente esquema para conectar a una tabla de una BD Firebird (todo componentes nativos Lazarus):

Pongo en el form:
  • TIBConnection
  • TSQLTransaction
  • TSQLQuery
  • TDatasource
  • TDBGrid
Y los "entrelazo" de la siguiente forma:

TIBConnection
  • DatabaseName=/una/ruta/cualquiera/basededatos.fdb
  • Password=masterkey
  • Username=sysdba
  • Transaction=SQLTransaction1
  • Connected = True
SQLTransaction1
  • Database=IBConnection1
  • Active =True;
TSQLQuery
  • Database:IBConnection1
  • SQL=select * from una_tabla;
  • Active = True;
TDatasource
  • DataSet=SQLQuery1
TDBGrid
  • DataSource = DataSource1
Luego, si quiero seguir enlazando con otras tablas de la base de datos, simplemente voy añadiendo al form más "parejas" de TSQLQuery con su TDatasource, enlazados a los anteriores.

Es muy fácil y funciona de maravilla.

Por cierto, estoy como un niño con un juguete nuevo con Lazarus 1.0. Me encanta, funciona como un reloj suizo, no hace cosas raras como antaño y, si todo va bien (toquemos madera), me va a permitir quedarme en Linux y salir a otras plataformas sólo para compilar :). Es un sueño hecho realidad (espero no despertarme).

Además, si hay suerte, se acabaron los sablazos de las actualizaciones de Delphi :rolleyes: (cada vez más caras y, últimamente, obligatorias si no quieres perder la oportunidad de pagar menos:mad:).


La franja horaria es GMT +2. Ahora son las 11:01:43.

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