|
Lazarus: Desarrollar aplicación Lazarus con acceso a PostgreSQL x64 en Windows 8
Cómo desarrollar una aplicación mediante Lazarus 1.0.8 con acceso a servidor de base de datos PostgreSQL 9 en sistema operativo Microsoft Windows 8. Para ello utilizaremos los componentes gratuitos ZeosLib. Explicamos paso a paso y con capturas de pantalla cómo instalar Lazarus, cómo instalar ZeosLib y cómo acceder a una base de datos PostgreSQL todo ello en 64 bits, incluida la aplicación desarrollada.
Instalar Free Pascal Lazarus x64 en Windows 8 x64A continuación mostramos cómo instalar Lazarus en un equipo con sistema operativo Microsoft Windows 8. Lazarus es una herramienta de desarrollo rápido de aplicaciones (RAD) basada en el lenguaje de programación Object Pascal, es similiar en su IDE a Delphi. La gran ventaja de Lazarus es que puede instalarse y generar aplicaciones para Windows, Linux y Mac OS X y es software libre. Para instalar Lazarus accederemos con un navegador web al sitio oficial de Lazarus para descargas:
Descargaremos el fichero de instalación de Lazarus que se ajuste a nuestras necesidades (arquitectura de procesador x32/x64 y sistema operativo Windows, Linux, Mac OS X). En nuestro caso descargaremos Lazarus para Windows x64. Una vez descargado el fichero (lazarus-1.0.8-fpc-2.6.2-win64.exe) lo ejecutaremos como administradores (pulsando con el botón derecho del ratón sobre el fichero y seleccionando "Ejecutar como administrador" en el menú emergente): Si tenemos activado UAC (Control de cuentas de usuario) de Windows 8 nos mostrará un aviso para ejecutar el fichero, pulsaremos "Sí": Seleccionaremos el idioma de instalación de Lazarus y pulsaremos "Aceptar": Se iniciará el asistente para instalar Free Pascal Lazarus 1.0.8 en Windows 8, pulsaremos "Siguiente": Indicaremos la unidad y carpeta de instalación de Lazarus y pulsaremos en "Siguiente": A continuación marcaremos los componentes de Lazarus a instalar, seleccionaremos "Instalación Completa": Indicaremos la carpeta del menú Inicio de Windows donde se añadirán los accesos directos para Lazarus, por ejemplo "Lazarus": Indicaremos si queremos crear un acceso directo en el escritorio marcando "Crear un icono en el escritorio". Puesto que es la primera vez que instalamos Lazarus en el equipo W8 no será necesario marcar la opción "Eliminar todos los archivos de configuración de usuario de instalaciones anteriores". Pulsaremos "Siguiente": El asistente para instalar Lazarus en W8 nos mostrará el resumen de las opciones seleccionadas, pulsaremos "Instalar": Una vez finalizada la instalación de Lazarus el asistente nos mostrará una ventana indicando que el proceso ha concluido de forma satisfactoria. Pulsaremos "Finalizar": Pulsando el botón "Inicio" W8 nos mostrará el menú de Inicio metro, donde aparecerá el acceso directo para ejecutar "Lazarus", pulsaremos sobre él: Ya podremos disponer de este entorno de desarrollo en Free Pascal para realizar aplicaciones para Windows con entorno gráfico de forma gratuita:
Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, InterbaseSi bien Lazarus incluye sus propios componentes para acceso a bases de datos (MySQL, Firebird, PostgreSQL, Sybase, Oracle, ODBC, SQLite) utilizaremos ZeosLib en su última versión ya que incorpora más opciones avanzadas y soporte para acceso a más motores de base de datos de forma nativa (SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase, ASA, FreeTDS). Para instalar los componentes ZeosLib en primer lugar los descargaremos de su web oficial:
En nuestro caso y a fecha de este tutorial el fichero ZEOSDBO-7.0.3-stable.zip, una vez descargado lo descomprimiremos pulsando con el botón derecho sobre él y seleccionando "Extraer": Elegiremos la carpeta donde se extraerán los ficheros y pulsaremos "Extraer": Una vez descargados ZeosLib y descomprimido el fichero, abriremos Lazarus, cerraremos cualquier proyecto abierto desde el menú "Archivo" - "Cerrar Todos" y accederemos al menú "Paquete" - "Abrir archivo de paquete (.lpk)": Accederemos a la carpeta donde hayamos extraído el fichero de instalación de ZeosLib y seleccionaremos el fichero "zcomponent.lpk" ubicado en .../ZEOSDBO-7.0.3-stable/packages/lazarus, pulsaremos "Abrir": En la ventana de examinar paquete de Lazarus pulsaremos en "Usar >>" y en "Instalar": El asistente para instalar un nuevo paquete en Lazarus nos indicará que se va a instalar el paquete zcomponent 7.0 (con los paquetes zdbc 7.0, zparsesql 7.0, zplain 7.0, zcore 7.0). Pulsaremos "Aceptar": El asistente nos indicará que se deberá reconstruir Lazarus, pulsaremos "Sí":
Se iniciará el proceso de reconstrucción de Lazarus, esperaremos unos segundos y en la ventana de Mensajes de Lazarus nos indicará el proceso realizado: Tras la reconstrucción se reiniciará Lazarus y ya tendremos disponibles los componentes ZeosLib en la pestaña "Zeos Access" de la barra de componentes de Lazarus: Librerías DLL para acceso a PostgreSQL desde aplicación desarrollada con Lazarus y ZeosLib en Windows 8ZeosLib no incorpora las librerías DLL necesarias para el acceso a los motores de base de datos que soporta. En parte es lógico pues ZeosLib usa las DLL estándar y oficiales que proporciona cada motor (con cada versión y para 32 y 64 bits), por lo tanto serían innumerables las librerías a aportar en la descarga de ZeosLib. Para acceder a PostgreSQL con ZeosLib o incluso con los componentes propios de Lazarus deben descargarse las librerías DLL cliente de acceso a PostgreSQL. ZeosLib admite bases de datos tanto de 32 como de 64 bits. Obviamente para desarrollar una aplicación x64 necesitaremos disponer de un sistema operativo de 64 bits, Lazarus de 64 bits y las librerías DLL del motor a acceder también de 64 bits. Una forma sencilla de obtener estas librerías necesarias para acceder a una base de datos PostgreSQL de 64 bits desde una aplicación de 64 bits es descargando el fichero postgresql-9.2.4-1-windows-x64-binaries.zip desde la siguiente URL oficial de PostgreSQL y seleccionando la descarga "Win x86-64":
Descomprimiendo dicho fichero, en la siguiente carpeta del fichero descomprimido encontraremos las DLL necesarias:
En principio son para aplicaciones de 64 bits son necesarios los ficheros DLL:
Puede que se requiera alguno más para determinados procedimientos. En las pruebas realizadas en nuestro laboratorio fueron suficientes los anteriores para la conexión con PostgreSQL x64 y la ejecución de consultas SQL. Para el caso de aplicaciones Lazarus desarrolladas en x32 (32 bits) obtendremos las librerías de la misma forma que la explicada anteriormente para x64, accederemos a la URL oficial de PostgreSQL y descargaremos, en este caso, "Win x86-32":
Descomprimiremos el fichero postgresql-9.0.13-1-windows-binaries.zip y encontraremos las librerías DLL necesarias para x32 en:
Que suelen ser las mismas (mismos nombres y versiones diferentes) que para x64:
Son necesarios todos los ficheros anteriores pues existe la creencia equivocada de que con el fichero libpq.dll es suficiente, pero con este fichero la aplicación daría este error al intentar conectar a PostgreSQL:
Aunque el error "incita a engaño" pues indica que no se ha encontrado la librería libpq.dll lo que quiere decir es que no se ha podido cargar porque requiere de otras DLL no presentes. Por lo tanto para el acceso a PostgreSQL se requieren los ficheros indicados anteriormente. Si queremos distribuir nuestra aplicación Lazarus en entornos, por ejemplo, de servidores Windows con servicio de terminales, para que las librerías DLL estén disponibles para todos los usuarios podremos copiarlas a:
Si no lo tenemos claro siempre podremos dejar las librerías DLL de PostgreSQL en la misma carpeta que el ejecutable de la aplicación, así también funcionará.
Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64Crear proyecto LazarusUna vez preparado el entorno como hemos explicado anteriormente (instalando Lazarus, los componentes ZeosLib y obteniendo las librerías DLL de acceso a PostgreSQL) ya podremos empezar a desarrollar nuestra aplicación Lazarus. Para ello lo abriremos desde el menú Inicio de Windows 8: La primera vez que accedamos a Lazarus nos mostrará una ventana como la siguiente, pulsaremos "Arrancar IDE": Para crear un nuevo proyecto pulsaremos en el menú "Archivo" - "Nuevo": Seleccionaremos "Proyecto" - "Aplicación" y pulsaremos "Aceptar":
Añadir componentes visuales y no visuales de acceso a datos en aplicación LazarusAñadiremos todos los componentes necesarios para nuestra aplicación:
Y los controles de acceso a base de datos que a continuación indicamos. Por un lado necesitaremos un TZConnection de la pestaña "Zeos Access", no será necesario indicar ninguna propiedad en tiempo de diseño pues las estableceremos en tiempo de ejecución: Un TZQuery que será el encargado de ejecutar la sentencia SQL en el servidor de base de datos y devolver el resultado, también de la pestaña "Zeos Access" de la paleta de componentes de Lazarus. Enlazaremos este componente TZQuery con el anterior TZConnection mediante la propiedad "Connection": Añadiremos también el componente no visual TDataSource de la pestaña "Data Access", dicho componente será el enlace entre el TZQuery y los componentes visuales TDBNavigator y TDBGrid que añadiremos más adelante. El componente TZDataSource irá enlazado con el TZQuery mediante la propiedad "DataSet": Añadiremos ahora los componentes visuales de acceso a datos, por un lado un TDBNavigator de la pestaña "Data Controls" que nos proporcionará varias acciones a realizar sobre el grid de datos (TDBGrid) sin tener que añadir código fuente (movernos adelante, atrás, primero y último, añadir registro, eliminar registro, validar cambios, refrescar). Dicho componente irá enlazado con el TDataSource mediante la propiedad "DataSource": Y por último añadiremos el TDBGrid de la pestaña "Data Controls" en el que se mostrarán los registros de la consulta SQL. Dicho componente irá enlazado con el TDataSource mediante la propiedad "DataSource": Incluyendo un TComboBox de la paleta de componentes "Standard" para que el usuario pueda elegir el protocolo (motor de base de datos) permitiremos que nuestra aplicación sea válida para acceso a SQLite, PostgreSQL, Oracle, Firebird, SQL Server, MySQL, Sybase de la aplicación Lazarus con acceso a bases de datos. En la propiedad "Items" del ComboBox añadiremos las siguientes líneas para que el usuario pueda elegir el protocolo admitido por ZeosLib (necesitará las librerías apropiadas para el motor elegido):
Esta es una de las grandes ventajas de usar ZeosLib y es que permite conexión nativa a los motores de base de datos listados anteriormente sin apenas realizar cambios en nuestra aplicación:
Código fuente Lazarus de la aplicación para acceso a PostgreSQL o cualquier otro motor de base de datos con ZeosLibUna vez creado el proyecto y añadidos los componentes visuales y no visuales, como hemos explicado anteriormente, procederemos a introducir el código fuente para cada componente o evento que lo necesite. Para el caso del botón Conectar, en su evento OnClick que podremos abrir pulsando sobre el TButton "Conectar", pulsando la tecla INTRO, nos mostrará la ventana de propiedades, en la pestaña "Eventos" haremos doble clic sobre "OnClick": Añadiremos el siguiente código: procedure TformPrincipal.btConectarClick(Sender: TObject); begin try bdConexion.Connected := false; bdConexion.HostName := txtServidor.Text; bdConexion.Password := txtContrasena.Text; bdConexion.Port := StrToInt(txtPuerto.Text); bdConexion.User := txtUsuario.Text; bdConexion.Database := txtBD.Text; bdConexion.Catalog := txtBD.Text; bdConexion.Protocol:= lsProtocolo.Text; bdConexion.Connected := true; MessageDlg ('Conexión realizada correctamente al ' + 'servidor de base de datos.', mtInformation, [mbOK], 0); txtSQL.SetFocus; except raise; end; end; Para el caso del botón Ejecutar, en su evento OnClick añadiremos el siguiente código: procedure TformPrincipal.btEjecutarClick(Sender: TObject); La aplicación también guardará los datos de conexión y última SQL ejecutada cuando se cierre la aplicación, para ello añadiremos el siguiente código en el evento OnClose del formulario de la aplicación: procedure TformPrincipal.FormClose(Sender: TObject; var CloseAction: TCloseAction); var fichero : string; begin with tinifile.create (changefileext(paramstr(0),'.ini')) do try writeBool ('SQL', 'Modificación', opModificacion.Checked); writeInteger ('Conexión Base Datos', 'Puerto', StrToInt(txtPuerto.Text)); writeString ('Conexión Base Datos', 'Servidor', txtServidor.Text); writeString ('Conexión Base Datos', 'Usuario', txtUsuario.Text); writeString ('Conexión Base Datos', 'Base datos', txtBD.Text); writeString ('Conexión Base Datos', 'Protocolo', lsProtocolo.Text); writeString ('Conexión Base Datos', 'Contraseña', txtContrasena.Text); finally free; end; fichero := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))) + 'ultimasqlejecutada.sql'; txtSQL.Lines.SaveToFile(fichero); end; Y este otro código para cargar los valores cuando la aplicación se inicia, en el evento OnCreate del formulario: procedure TformPrincipal.FormCreate(Sender: TObject); var fichero : string; begin with tinifile.create (changefileext(paramstr(0),'.ini')) do try opModificacion.Checked := ReadBool ('SQL', 'Modificación', false); txtPuerto.Text := IntToStr(ReadInteger ('Conexión Base Datos', 'Puerto', 5433)); txtServidor.Text := ReadString ('Conexión Base Datos', 'Servidor', 'localhost'); txtUsuario.Text := ReadString ('Conexión Base Datos', 'Usuario', ''); txtBD.Text := ReadString ('Conexión Base Datos', 'Base datos', ''); lsProtocolo.Text := ReadString ('Conexión Base Datos', 'Protocolo', 'postgresql-9'); txtContrasena.Text := ReadString ('Conexión Base Datos', 'Contraseña', ''); finally free; end; fichero := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))) + 'ultimasqlejecutada.sql'; if FileExists(fichero) then txtSQL.Lines.LoadFromFile(fichero); end; En el Uses del formulario añadiremos:
Con estos sencillos pasos ya podremos ejecutar y compilar nuestra aplicación de 64 bits en Lazarus para probarla en Windows 8 x64, para compilarla pulsaremos la tecla "F9" o bien desde el menú "Ejecutar" - "Compilar":
AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamientoLa aplicación AjpdSoft Acceso PostgreSQL con Lazarus es bastante sencilla, a continuación mostramos su funcionamiento. Tras abrirla con las librerías correspondientes al motor de base de datos al que queramos conectarnos (como hemos indicando en este tutorial) deberemos introducir los datos de acceso al motor de base de datos:
Una vez introducidos los datos de conexión pulsaremos en el botón "Conectar": Si los datos son correctos, disponemos de las DLL apropiadas y el servidor de base de datos permite la conexión la aplicación mostrará el mensaje "Conexión realizada correctamente al servidor de base de datos": A partir de ahora y dependiendo de los permisos del usuario con el que nos hayamos conectado, podremos realizar cualquier acción mediante SQL, por ejemplo mostrar los registros de un tabla existente "facturas" con la consulta SQL:
Puesto que es de selección desmarcaremos el check "Modificación" y la ejecutaremos pulsando en "Ejecutar". Si existe la tabla y tenemos permisos la aplicación nos mostrará todos los datos y registros en el grid: También podremos, por ejemplo, crear una tabla. Para ello escribiremos el código SQL correspondiente:
Puesto que es una consulta de modificación de datos marcaremos "Modificación" y pulsaremos en ejecutar: Ahora podremos ejecutar la consulta de selección:
Y, puesto que disponemos de un TDBNavigator podremos añadir registros, modificar registros y eliminar registros directametne en el grid de datos: Es conveniente realizar una prueba de ejecución de la aplicación en otro equipo diferente al que hayamos usado para desarrollarla con Lazarus. Así tendremos la certeza de que disponemos de todas las DLL necesarias, copiando el ejecutable de nuestra aplicación (de la carpeta del proyecto Lazarus) y las DLL necesarias lo ejecutaremos en otro equipo de la red (incluso con otro sistema operativo): En el ejemplo anterior hemos utilizado el ejecutable de nuestra aplicación y las librerías libpq.dll, libeay32.dll, ssleay32.dll y libintl-8.dll, lo hemos ejecutado en un equipo con Windows 7 x64 y ha funcionado perfectamente: Obviamente, para realizar la conexión a un motor de base de datos desde un equipo diferente al que lo contiene puede que tengamos que configurarlo para permitir conexiones externas. En el caso de PostgreSQL en el siguiente tutorial mostramos cómo prepararlo para conexiones externas: Nuestra aplicación, al ser de 64 bits, no funcionará en equipos de 32 bits:
Anexo
unit UnidadFormMenuPrincipal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, db, Forms, Controls, Graphics, Dialogs, StdCtrls, DBGrids, DbCtrls, ZConnection, ZDataset, inifiles, lclintf; type { TformPrincipal } TformPrincipal = class(TForm) btEjecutar: TButton; btConectar: TButton; Label7: TLabel; lsProtocolo: TComboBox; dbNavegador: TDBNavigator; dbTabla: TDatasource; Label5: TLabel; Label6: TLabel; opModificacion: TCheckBox; gridBD: TDBGrid; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; txtContrasena: TEdit; txtBD: TEdit; txtPuerto: TEdit; txtServidor: TEdit; txtSQL: TMemo; txtUsuario: TEdit; bdConexion: TZConnection; tConsultaSQL: TZQuery; procedure btConectarClick(Sender: TObject); procedure btEjecutarClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure Label7Click(Sender: TObject); private { private declarations } public { public declarations } end; var formPrincipal: TformPrincipal; implementation {$R *.lfm} { TformPrincipal } procedure TformPrincipal.btConectarClick(Sender: TObject); begin try bdConexion.Connected := false; bdConexion.HostName := txtServidor.Text; bdConexion.Password := txtContrasena.Text; bdConexion.Port := StrToInt(txtPuerto.Text); bdConexion.User := txtUsuario.Text; bdConexion.Database := txtBD.Text; bdConexion.Catalog := txtBD.Text; bdConexion.Protocol:= lsProtocolo.Text; bdConexion.Connected := true; MessageDlg ('Conexión realizada correctamente al ' + 'servidor de base de datos.', mtInformation, [mbOK], 0); txtSQL.SetFocus; except raise; end; end; procedure TformPrincipal.btEjecutarClick(Sender: TObject); begin tConsultaSQL.Close; tConsultaSQL.SQL.Clear; tConsultaSQL.SQL.Add(txtSQL.Text); try if opModificacion.Checked then tConsultaSQL.ExecSQL else tConsultaSQL.Open; except raise; end; end; procedure TformPrincipal.FormClose(Sender: TObject; var CloseAction: TCloseAction); var fichero : string; begin with tinifile.create (changefileext(paramstr(0),'.ini')) do try writeBool ('SQL', 'Modificación', opModificacion.Checked); writeInteger ('Conexión Base Datos', 'Puerto', StrToInt(txtPuerto.Text)); writeString ('Conexión Base Datos', 'Servidor', txtServidor.Text); writeString ('Conexión Base Datos', 'Usuario', txtUsuario.Text); writeString ('Conexión Base Datos', 'Base datos', txtBD.Text); writeString ('Conexión Base Datos', 'Protocolo', lsProtocolo.Text); writeString ('Conexión Base Datos', 'Contraseña', txtContrasena.Text); finally free; end; fichero := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))) + 'ultimasqlejecutada.sql'; txtSQL.Lines.SaveToFile(fichero); end; procedure TformPrincipal.FormCreate(Sender: TObject); var fichero : string; begin with tinifile.create (changefileext(paramstr(0),'.ini')) do try opModificacion.Checked := ReadBool ('SQL', 'Modificación', false); txtPuerto.Text := IntToStr(ReadInteger ('Conexión Base Datos', 'Puerto', 5433)); txtServidor.Text := ReadString ('Conexión Base Datos', 'Servidor', 'localhost'); txtUsuario.Text := ReadString ('Conexión Base Datos', 'Usuario', ''); txtBD.Text := ReadString ('Conexión Base Datos', 'Base datos', ''); lsProtocolo.Text := ReadString ('Conexión Base Datos', 'Protocolo', 'postgresql-9'); txtContrasena.Text := ReadString ('Conexión Base Datos', 'Contraseña', ''); finally free; end; fichero := IncludeTrailingPathDelimiter(ExtractFilePath(paramstr(0))) + 'ultimasqlejecutada.sql'; if FileExists(fichero) then txtSQL.Lines.LoadFromFile(fichero); end; procedure TformPrincipal.Label7Click(Sender: TObject); begin OpenURL('http://www.ajpdsoft.com'); end; end. Artículos relacionados
CréditosArtículo realizado íntegramente por Alonsojpd, miembro fundador del Proyecto AjpdSoft. Anuncios
Enviado el Lunes, 22 julio a las 01:18:40 por ajpdsoft
|
|