Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Nick


Contraseña


Nuevo usuario


English

Lazarus: Desarrollar aplicación Lazarus con acceso a PostgreSQL x64 en Windows 8
Bases de Datos


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 x64

A 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:

http://www.lazarus.freepascal.org/index.php?page=downloads

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):

Instalar Free Pascal Lazarus en Windows 8

Si tenemos activado UAC (Control de cuentas de usuario) de Windows 8 nos mostrará un aviso para ejecutar el fichero, pulsaremos "Sí":

Instalar Free Pascal Lazarus en Windows 8

Seleccionaremos el idioma de instalación de Lazarus y pulsaremos "Aceptar":

Instalar Free Pascal Lazarus en Windows 8

Se iniciará el asistente para instalar Free Pascal Lazarus 1.0.8 en Windows 8, pulsaremos "Siguiente":

Instalar Free Pascal Lazarus en Windows 8

Indicaremos la unidad y carpeta de instalación de Lazarus y pulsaremos en "Siguiente":

Instalar Free Pascal Lazarus en Windows 8

A continuación marcaremos los componentes de Lazarus a instalar, seleccionaremos "Instalación Completa":

Instalar Free Pascal Lazarus en Windows 8

Indicaremos la carpeta del menú Inicio de Windows donde se añadirán los accesos directos para Lazarus, por ejemplo "Lazarus":

Instalar Free Pascal Lazarus en Windows 8

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":

Instalar Free Pascal Lazarus en Windows 8

El asistente para instalar Lazarus en W8 nos mostrará el resumen de las opciones seleccionadas, pulsaremos "Instalar":

Instalar Free Pascal Lazarus en Windows 8

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":

Instalar Free Pascal Lazarus en Windows 8

Pulsando el botón "Inicio" W8 nos mostrará el menú de Inicio metro, donde aparecerá el acceso directo para ejecutar "Lazarus", pulsaremos sobre él:

Instalar Free Pascal Lazarus en Windows 8

Ya podremos disponer de este entorno de desarrollo en Free Pascal para realizar aplicaciones para Windows con entorno gráfico de forma gratuita:

Instalar Free Pascal Lazarus en Windows 8

 

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

Si 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:

http://sourceforge.net/projects/zeoslib

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":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

Elegiremos la carpeta donde se extraerán los ficheros y pulsaremos "Extraer":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

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)":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

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":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

En la ventana de examinar paquete de Lazarus pulsaremos en "Usar >>" y en "Instalar":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

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":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

El asistente nos indicará que se deberá reconstruir Lazarus, pulsaremos "Sí":

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

Con el texto: El paquete "zcomponent 7.0" se marcó para instalar. Actualmente Lazarus solo soporta paquetes enlazados estáticamente. La instalación completa necesita reconstruir y reiniciar Lazarus ¿Desea reconstruir ahora Lazarus?

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:

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

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:

Instalar componentes gratuitos ZeosLib en Lazarus para acceso a SQLite, PostgreSQL, Oracle, MySQL, Firebird, SQL Server, Sybase, Interbase

 

Librerías DLL para acceso a PostgreSQL desde aplicación desarrollada con Lazarus y ZeosLib en Windows 8

ZeosLib 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":

http://www.enterprisedb.com/products-services-training/pgbindownload

Descomprimiendo dicho fichero, en la siguiente carpeta del fichero descomprimido encontraremos las DLL necesarias:

...postgresql-9.2.4-1-windows-x64-binariespgsqlbin

En principio son para aplicaciones de 64 bits son necesarios los ficheros DLL:

  • libpq.dll
  • libeay32.dll
  • ssleay32.dll
  • libintl-8.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":

http://www.enterprisedb.com/products-services-training/pgbindownload

Descomprimiremos el fichero postgresql-9.0.13-1-windows-binaries.zip y encontraremos las librerías DLL necesarias para x32 en:

.../postgresql-9.0.13-1-windows-binaries/pgsql/bin

Que suelen ser las mismas (mismos nombres y versiones diferentes) que para x64:

  • libpq.dll
  • libeay32.dll
  • ssleay32.dll
  • libintl-8.dll

Nota: si falta alguna librería para el caso de x32 la aplicación mostrará un error al intentar acceder a PostgreSQL (como el que indicamos aquí). Podremos encontrarlas instalando la herramienta pgAdmin que también incluye las librerías comerr32.dll, gssapi32.dll, k5sprt32.dll, krb5_32.dll, libiconv2.dll, libintl3.dll que en algunos casos son necesarias)

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:

[Window Title]
Error

[Content]
None of the dynamic libraries can be found or is not loadable: libpq.dll !
Use TZConnection.LibraryLocation if the location is invalid.

[Aceptar]

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 tanto el sistema operativo como la aplicación Lazarus es de 64 bits copiaremos las DLL para x64 de PostgreSQL a la carpeta %systemroot%/system32 de Windows.
  • Si el sistema operativo es de 64 bits y la aplicación Lazarus es de 32 bits copiaremos los ficheros DLL de 32 bits a la carpeta %systemroot%/SysWOW64 del sistema operativo.
  • Si el sistema operativo es de 32 bits la aplicación tendrá que ser obligatoriamente de 32 bits y las DLL también serán las de 32 bits y podremos copiarlas a %systemroot%/system32 de Windows.

Donde %systemroot% será la unidad y carpeta de instalación de Windows.

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 x64

Crear proyecto Lazarus

Una 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:

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

La primera vez que accedamos a Lazarus nos mostrará una ventana como la siguiente, pulsaremos "Arrancar IDE":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

Para crear un nuevo proyecto pulsaremos en el menú "Archivo" - "Nuevo":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

Seleccionaremos "Proyecto" - "Aplicación" y pulsaremos "Aceptar":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

 

Añadir componentes visuales y no visuales de acceso a datos en aplicación Lazarus

Añadiremos todos los componentes necesarios para nuestra aplicación:

  • TEdit para introducción de datos de conexión al servidor de base de datos.
  • TButton para conectar con el servidor y ejecutar consultas SQL.
  • TMemo para la introducción de consultas SQL.
  • TCheckBox para indicar si la consulta SQL es de modificación de datos (INSERT, UPDATE, DELETE, CREATE, DROP, ALTER) o bien es de selección (SELECT).

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:

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

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":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

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":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

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":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

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":

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

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):

  • ASA12
  • ASA7
  • ASA8
  • ASA9
  • firebird-1.0
  • firebird-1.5
  • firebird-2.0
  • firebird-2.1
  • firebird-2.5
  • firebirdd-1.5
  • firebirdd-2.0
  • firebirdd-2.1
  • firebirdd-2.5
  • FreeTDS_MsSQL<=6.5
  • FreeTDS_MsSQL<=200
  • FreeTDS_MsSQL-2000
  • FreeTDS_MsSQL-7.0
  • FreeTDS_Sybase<10
  • FreeTDS_MsSQL-10+
  • interbase-6
  • mssql
  • mysql
  • mysql-4.1
  • mysql-5
  • mysqld-4.1
  • mysqld-5
  • oracle
  • oracle-9i
  • pooled.*
  • postgresql
  • postgresql-7
  • postgresql-8
  • postgresql-9
  • sqlite
  • sqlite-3
  • sybase

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:

Desarrollar aplicación Lazarus de 64 bits con acceso a bases de datos PostgreSQL x64

 

Código fuente Lazarus de la aplicación para acceso a PostgreSQL o cualquier otro motor de base de datos con ZeosLib

Una 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":

Código fuente Lazarus de la aplicación para acceso a PostgreSQL o cualquier otro motor de base de datos con ZeosLib

Añadiremos el siguiente código:

Código fuente Lazarus de la aplicación para acceso a PostgreSQL o cualquier otro motor de base de datos con ZeosLib

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;     

Con el código anterior establecemos los parámetros de conexión al motor de base de datos elegidos por el usuario (servidor, usuario, contraseña, base de datos, puerto y protocolo).

Para el caso del botón Ejecutar, en su evento OnClick añadiremos el siguiente código:

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;

Con el código anterior ejecutaremos la consulta SQL introducida por el usuario, diferenciando si se trata de una consulta de modificación o de selección mediante el CheckBox "Modificación".

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:

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, db,
DBGrids, DbCtrls, ZConnection, ZDataset, inifiles, lclintf;

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":

Código fuente Lazarus de la aplicación para acceso a PostgreSQL o cualquier otro motor de base de datos con ZeosLib

Si todo es correcto se abrirá la aplicación en Windows 8:

Código fuente Lazarus de la aplicación para acceso a PostgreSQL o cualquier otro motor de base de datos con ZeosLib

 

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

La 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:

  • Servidor: nombre DNS o IP del servidor de base de datos al que nos conectaremos.
  • Usuario: nombre de usuario del motor de base de datos con el que iniciaremos sesión.
  • Contraseña: contraseña para el usuario anterior.
  • BD: nombre de la base de datos o catálogo.
  • Puerto: puerto de conexión.
  • Protocolo: elegiremos en el desplegable el motor de base de datos al que nos conectaremos (deberemos tener las librerías DLL correspondientes).

Una vez introducidos los datos de conexión pulsaremos en el botón "Conectar":

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

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":

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

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:

select * from facturas

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:

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

También podremos, por ejemplo, crear una tabla. Para ello escribiremos el código SQL correspondiente:

create table clientes (codigo int, fecha date, nombre varchar(100));

Puesto que es una consulta de modificación de datos marcaremos "Modificación" y pulsaremos en ejecutar:

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

Ahora podremos ejecutar la consulta de selección:

select * from clientes;

Y, puesto que disponemos de un TDBNavigator podremos añadir registros, modificar registros y eliminar registros directametne en el grid de datos:

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

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):

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

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:

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

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:

AjpdSoft Acceso PostgreSQL con Lazarus en Windows 8 en funcionamiento

Si la ejecutamos mostrará el error: xxxx.exe no es una aplicación Win32 válida.

 

 

Anexo

  • Solución al error no hay una línea en pg_hba.conf para «xxx», usuario «xxx», base de datos «xx», SSL inactivo: si al ejecutar nuestra aplicación Lazarus con acceso a PostgreSQL se produce el siguiente error:

    [Window Title]
    AjpdSoft Acceso PostgreSQL

    [Content]
    SQL Error: FATAL: no hay una línea en pg_hba.conf para «xxx», usuario «usuajpdsoft», base de datos «bdajpdsoft», SSL inactivo.

    Press OK to ignore and risk data corruption.
    Press Cancel to kill the program.

    [OK] [Cancel]

Es debido a que estamos intentando acceder al servidor PostgreSQL desde otro equipo de la red, para solucionar este problema y configurar PostgreSQL para permitir conexiones externas podéis seguir el siguiente tutorial:

(Aunque es para Linux, para sistemas operativos Windows el proceso es similar).

  • Solución al error: None of the dynamic libraries can be found or is not loadable: libpq.dll: este error suele producirse cuando falta alguna librería (DLL) de acceso al motor de base de datos elegido en Protocol o bien cuando las librerías no son las adecuadas. En este tutorial explicamos cómo solucionar este problema:

    [Window Title]
    Error

    [Content]
    None of the dynamic libraries can be found or is not loadable: libpq.dll !
    Use TZConnection.LibraryLocation if the location is invalid.

    [Aceptar]

En concreto en esta sección:

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éditos

Artículo realizado íntegramente por Alonsojpd, miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Lunes, 22 julio a las 01:18:40 por ajpdsoft
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+