En el mundo del desarrollo de software, es común que una aplicación necesite interactuar con información que no reside en su propio sistema de almacenamiento nativo. Aquí es donde entra el concepto de bases de datos externas. A diferencia de los datos internos que gestiona la propia aplicación, una base de datos externa se refiere a un sistema de gestión de bases de datos (SGBD) separado con el que nuestra aplicación se comunica para leer, escribir o modificar información.

Esta interacción se logra mediante un conjunto de herramientas y comandos que permiten a la aplicación 'hablar' el lenguaje de la base de datos externa de forma nativa. La capacidad de conectar con bases de datos externas es crucial para la integración de sistemas, el aprovechamiento de datos preexistentes y la flexibilidad en la arquitectura de software.
- ¿Por Qué Conectar a Bases de Datos Externas?
- Mecanismos de Conexión: Drivers y Plugins
- Operaciones Clave con Bases de Datos Externas
- Soporte Específico de Drivers y Consideraciones
- Datos Externos vs. Bases de Datos Externas
- Preguntas Frecuentes sobre Bases de Datos Externas
- ¿Cuál es la diferencia entre un driver y un plugin?
- ¿Qué bases de datos externas están mejor soportadas?
- ¿Necesito instalar drivers o vienen con la plataforma de desarrollo?
- ¿Puedo conectar a varias bases de datos externas al mismo tiempo?
- ¿Cómo sé si la conexión a la base de datos externa fue exitosa?
- ¿Puedo ejecutar múltiples sentencias SQL dentro del subproceso generado por BD: SQL?
- Conclusión
¿Por Qué Conectar a Bases de Datos Externas?
Conectar con bases de datos externas ofrece numerosas ventajas. Permite a las aplicaciones:
- Acceder a grandes volúmenes de datos ya almacenados en otros sistemas empresariales (ERPs, CRMs, etc.).
- Integrarse con soluciones de terceros que exponen su información a través de SGBD estándar.
- Aprovechar las características específicas de SGBD potentes y optimizados para ciertas tareas (analíticas, transaccionales, etc.).
- Facilitar migraciones de datos o convivencias entre sistemas antiguos y nuevos.
Mecanismos de Conexión: Drivers y Plugins
La comunicación con una base de datos externa requiere de dos componentes principales: el driver y el plugin. El driver es una librería de bajo nivel específica para un SGBD particular (por ejemplo, un driver para PostgreSQL, otro para SQL Server). Es proporcionado generalmente por el fabricante del SGBD o por terceros y se instala en el sistema operativo donde se ejecuta la aplicación.
El plugin, en el contexto de una plataforma de desarrollo como la mencionada en la información proporcionada, es un componente que actúa como intermediario entre la plataforma de desarrollo y el driver del SGBD. La plataforma detecta y utiliza estos plugins para ofrecer una interfaz de programación unificada, permitiendo al desarrollador interactuar con diferentes tipos de bases de datos externas usando comandos similares.
La plataforma Velneo, por ejemplo, utiliza librerías de QT para su desarrollo, y sus plugins de acceso a bases de datos externas se construyen sobre esta base. Esto significa que la disponibilidad y el soporte dependen de los drivers compatibles con QT y las implementaciones específicas de los plugins de la plataforma.
Drivers Soportados por Plataforma
La disponibilidad de drivers puede variar según el sistema operativo:
- Windows: Comúnmente soporta ODBC, SQLite v3, PostgreSQL. Para PostgreSQL puede requerir una versión específica del cliente nativo (ej. versión 18).
- macOS: Soporta SQLite (v3), PostgreSQL. Para ODBC, a menudo se especifica la ruta del driver.
- Linux: Soporta ODBC, PostgreSQL, SQLite. Para ODBC, es común usar DSN (Data Source Name).
Para utilizar otros SGBD, es posible que se necesiten instalar componentes de terceros. La plataforma puede permitir compilar plugins personalizados para optimizar el acceso, los cuales serían detectados automáticamente.
Operaciones Clave con Bases de Datos Externas
Interactuar con una base de datos externa desde una aplicación requiere una secuencia de pasos lógicos, típicamente gestionados mediante comandos o instrucciones específicas dentro del entorno de desarrollo. Los comandos básicos proporcionados en la información de origen ilustran este proceso:
Declarar y Conectar: Crear un Manejador y Conectar
Antes de cualquier operación, es necesario declarar la base de datos externa con la que se va a trabajar. Esto se hace mediante un comando que crea un manejador. Este manejador es una referencia interna que usaremos para todas las operaciones posteriores con esa base de datos específica.
- BD: crear manejador: Este comando declara la base de datos externa, asignándole una etiqueta alfanumérica (el manejador), especifica el driver a usar (ODBC, PostgreSQL, SQLite, etc.) y proporciona los detalles de conexión como el DSN, cadena de conexión, nombre de la base de datos, opciones, servidor y puerto. Es posible declarar múltiples bases de datos externas en un mismo proceso.
Una vez declarado el manejador, se procede a establecer la conexión:
- BD: conectar: Este comando inicia la conexión real con la base de datos externa referenciada por el manejador. Permite especificar usuario, contraseña y, opcionalmente, variables para capturar el resultado (éxito/fracaso) y un mensaje de retorno. Un aspecto importante es que este comando genera un subproceso. Todas las operaciones que dependen de esta conexión deben ejecutarse *dentro* de este subproceso. Si la conexión falla, el subproceso no se ejecuta.
Es vital recordar que la creación del manejador, la conexión y todas las operaciones dependientes deben ocurrir en el mismo hilo de ejecución dentro del proceso de la aplicación. La desconexión se realiza automáticamente al finalizar el subproceso de conexión.
Ejecutar Consultas SQL: El Comando BD: SQL
El corazón de la interacción con bases de datos relacionales externas es la ejecución de comandos SQL. La plataforma proporciona un comando específico para esto:
- BD: SQL: Este comando permite ejecutar cualquier sentencia SQL (SELECT, INSERT, UPDATE, DELETE, etc.) sobre la base de datos asociada a un manejador específico. Se le pasa la sentencia SQL como parámetro y, opcionalmente, una variable para almacenar el número de filas afectadas. Al igual que el comando `BD: conectar`, `BD: SQL` también genera un subproceso. Si la sentencia ejecutada es una consulta (SELECT), los resultados de esta consulta estarán disponibles para ser procesados *dentro* de este subproceso. No se deben ejecutar otras sentencias SQL dentro del subproceso generado por `BD: SQL`; solo se deben procesar los resultados de la consulta inicial.
Procesar los Resultados: Recorrer y Obtener Datos
Cuando se ejecuta una consulta SQL que devuelve filas, es necesario recorrer estos resultados para acceder a la información. Los comandos proporcionados permiten iterar sobre las filas y obtener el valor de cada columna:
- BD: recorrer lista: Este comando se usa *dentro* del subproceso generado por `BD: SQL` (si este ejecutó una consulta). Actúa como un bucle que itera sobre cada fila devuelta por la consulta. Por cada fila, genera otro subproceso donde se puede acceder a los datos de esa fila específica.
- BD: get dato de columna por número: Usado *dentro* del subproceso de `BD: recorrer lista`, permite obtener el valor de una columna específica de la fila actual, identificándola por su índice numérico (hay que tener en cuenta si la base de datos usa índices base 0 o base 1).
- BD: get dato de columna por nombre: Similar al anterior, pero identifica la columna por su nombre alfabético.
- BD: finalizar recorrer lista sin procesar más filas: Permite salir prematuramente del bucle `BD: recorrer lista`.
Obtener Metadatos de la Consulta
Además de los datos, a menudo es útil conocer la estructura del resultado de una consulta:
- BD: get número de columnas: Usado *dentro* del subproceso de `BD: SQL`, obtiene la cantidad de columnas que tiene el conjunto de resultados de la consulta.
- BD: get nombre de columna por número: Usado *dentro* del subproceso de `BD: recorrer lista` o `BD: SQL` (si el cursor lo permite), permite obtener el nombre alfabético de una columna dado su índice numérico.
Soporte Específico de Drivers y Consideraciones
El nivel de soporte y las características disponibles varían significativamente entre los diferentes tipos de bases de datos y los drivers utilizados. La información proporcionada detalla aspectos específicos para varios SGBD comunes:
| Driver Qt | Bases de Datos Soportadas | Notas Clave |
|---|---|---|
| QODBC / QODBC3 | ODBC (SQL Server, etc.) | Interfaz genérica. Requiere gestor de drivers ODBC instalado. Consideraciones sobre versiones 2.x/3.x, cursores (forward-only), procedimientos almacenados (retornos limitados), Unicode. |
| QSQLITE / QSQLITE2 | SQLite v3 (QSQLITE) / v2 (QSQLITE2) | Base de datos embebida en un fichero. `:memory:` para temporales. Restricciones en multi-usuario/transacción. Tipos de datos flexibles por columna. Compatibilidad de formatos entre versiones. QSQLITE (v3) es preferible. |
| QPSQL / QPSQL7 | PostgreSQL v7.3+ (QPSQL) / v6/7 (QPSQL7) | Soporta Unicode (UTF-8). Soporta BLOB (tipo BYTEA en v7.1+). Requiere librerías cliente recientes. |
| QMYSQL / QMYSQL3 | MySQL 5.X (QMYSQL) / 3.X (QMYSQL3) | Soporte de procedimientos almacenados limitado a comandos SQL. Opción de usar MySQL embebido (enlazar a `libmysqld`). |
| QOCI | Oracle 9i y superiores | Oracle Call Interface. Permite conexión sin `tnsnames.ora` (especificando SID y host). Soporta autenticación externa (OCI_CRED_EXT). BLOB/LOBs pueden requerir modo forward-only. |
| QDB2 | IBM DB2 v7.1 y superiores | Soporta consultas preparadas, Unicode, BLOBs. Procedimientos almacenados pueden requerir forward-only. Requiere librerías cliente de desarrollo. |
| QIBASE | Borland InterBase / Firebird | Funciona con archivo local o servidor. Requiere ruta completa del archivo. Codificación `UNICODE_FSS` por defecto, configurable con `ISC_DPB_LC_CTYPE`. Procedimientos almacenados retornan valores como conjunto de resultados (no se enlazan IN). |
Es fundamental consultar la documentación específica del driver y del SGBD para entender completamente sus capacidades y limitaciones, así como las opciones de conexión disponibles (como `SQL_ATTR_ACCESS_MODE`, `CLIENT_COMPRESS`, `QSQLITE_BUSY_TIMEOUT`, `ISC_DPB_LC_CTYPE`, etc.).
Datos Externos vs. Bases de Datos Externas
Es importante distinguir el concepto técnico de "bases de datos externas" (otros SGBD con los que una aplicación se conecta) del concepto empresarial de "datos externos".

Los "datos externos" en un contexto de negocio se refieren a información obtenida por una empresa de fuentes ajenas a ella misma. Esto incluye información sobre mercados, clientes potenciales, competidores, tendencias económicas, etc., proveniente de estudios de mercado, organismos públicos, entidades financieras, empresas de marketing, internet, o datos compartidos entre empresas aliadas o del mismo grupo. Estos datos son cruciales para complementar la información interna, obtener una visión más completa del entorno y fundamentar la toma de decisiones estratégicas.
Estos datos externos pueden presentarse en diversos formatos y ser adquiridos de diferentes maneras (pagados, abiertos/gratuitos, compartidos, de internet). Aunque a menudo se almacenan o procesan en bases de datos (que podrían ser consideradas "bases de datos externas" desde una perspectiva técnica si se accede a ellas), el término "datos externos" se enfoca en el *origen* y la *naturaleza* de la información para el negocio, más que en el *sistema* técnico que la almacena.
Preguntas Frecuentes sobre Bases de Datos Externas
¿Cuál es la diferencia entre un driver y un plugin?
El driver es el software específico del sistema operativo que permite la comunicación de bajo nivel con un SGBD particular. El plugin es el componente de la plataforma de desarrollo que utiliza el driver para ofrecer una interfaz unificada para interactuar con diferentes SGBD.
¿Qué bases de datos externas están mejor soportadas?
Según la información proporcionada, SQLite tiene el mejor soporte y cobertura en pruebas en todas las plataformas. Oracle (vía OCI), PostgreSQL y MySQL (vía ODBC o driver nativo) están bastante soportados en Windows y Linux. El soporte para otros depende de la calidad de los drivers disponibles en cada sistema operativo.
¿Necesito instalar drivers o vienen con la plataforma de desarrollo?
Generalmente, la plataforma de desarrollo (como Velneo en el ejemplo) suministra los plugins para conectarse, pero no los drivers específicos de cada SGBD. Usted debe instalar los drivers adecuados para los SGBD con los que desea conectar en el sistema operativo donde se ejecutará la aplicación.
¿Puedo conectar a varias bases de datos externas al mismo tiempo?
Sí, es posible instanciar y gestionar conexiones a diferentes bases de datos externas en un mismo proceso, siempre utilizando un manejador distinto para cada una.
¿Cómo sé si la conexión a la base de datos externa fue exitosa?
El comando `BD: conectar` permite especificar una variable booleana de retorno. Esta variable se debe comprobar *fuera* del subproceso que genera `BD: conectar`, ya que el subproceso solo se ejecuta si la conexión se establece.
¿Puedo ejecutar múltiples sentencias SQL dentro del subproceso generado por BD: SQL?
No, el subproceso generado por `BD: SQL` está diseñado para procesar los resultados de la sentencia SQL ejecutada (si es una consulta). Cualquier otra operación, incluida la ejecución de nuevas sentencias SQL, debe realizarse fuera de este subproceso.
Conclusión
La capacidad de interactuar con bases de datos externas es una funcionalidad esencial para muchas aplicaciones modernas, permitiendo la integración con sistemas existentes y el acceso a una vasta cantidad de información. Entender el papel de los plugins y drivers, así como los comandos clave para establecer conexiones, ejecutar consultas y procesar resultados, es fundamental para desarrollar aplicaciones robustas y bien conectadas al ecosistema de datos empresarial.
Si quieres conocer otros artículos parecidos a Acceso a Bases de Datos Externas puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL