Com accedir a PostgreSQL (o MySQL, o FireBird) amb Lazarus
Tanco la serie de "com accedir a una base de dades del tipus xxxx amb Lazarus" amb el post d'avui, en el que desenvolupo una aplicació que accedeix a una taula d'una base de dades del tipus PostgreSQL.L'entorn és Ubuntu Lucid Lynx 10.04. Amb el Centre de Programari de l'Ubuntu m'he instal·lat PostgreSQL 8.4 i PgAdmin III. Que pel poc que he vist, és una molt bona eina d'administració i de consulta i força intuitiva.
El primer pas ha estat canviar el password de l'usuari postgres. Per això he fet des d'un terminal
sudo -u postgres psql postgresi, a continuació, dins de la consola de sql
\password postgres
La barra de l'inici és important. Li indico el nou password: per exemple, "masterkey". (consulteu l'ajuda al setup de PostgreSQl a Ubuntu).
Un cop fet això, amb pgAdmin ja podré registrar el servidor Localhost i crear-hi una nova base de dades que anomenaré 'proves'. A proves, dins l'esquema public, hi creo una taula taula1, amb les mateixes columnes que en posts anteriors: id (numèrica i PK), valor (text) i traducció (text).
Puc fer servir pgAdmin per a informar amb dades la taula.
I ara creo l'aplicació amb Lazarus. Idèntica a la del post accedir amb Lazarus a SQLite. Amb un parell de diferències. En aquesta ocasió, els components d'accés seran uns altres:
Poso un component de Connexió a Postgres del tipus TPQConnection (objecte PQConnection1)
Un objecte TSQLTransaction (SQLTranasaction1) i un TSQLQuery (SQLQuery1) i els connecto entre ells.
En particular:
PQConnection1. UserName: postgres
PQConnection1.password: masterkey
PQConnection1.hostname: localhost
PQConnection1.databasename: proves
PQConnection1.transaction: SQLTransaction1
SQLTransaction1. Database: PQConnection1
SQLQuery1.database: PQConnection1
SQLQuery1.transaction: SQLTransaction1
SQLQuery1.SQL: select id,valor,traduccio from taula
La resta és un camp memo i tres botons Carregar (Button1Click), Netejar (Button2Click) i Sortir (Button3Click).
El codi del form és:
unit unProvaPostgres01;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, pqconnection, sqldb, FileUtil, LResources, Forms, Controls,
Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
PQConnection1: TPQConnection;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
sId, sValor, sTraduccio, sLinea: String;
begin
(* obre connexions a la BD *)
PQConnection1.Open;
SQLQuery1.Open;
(* itera a través de la BD *)
SQLQuery1.First;
while not SQLQuery1.EOF do begin
sId := SQLQuery1.FieldByName('id').AsString;
sValor := SQLQuery1.FieldByName('valor').AsString;
sTraduccio := SQLQuery1.FieldByName('traduccio').AsString;
sLinea := sId + '; ' + sValor + '; ' + sTraduccio;
Memo1.Append(sLinea);
SQLQuery1.Next;
end;
// tanca la query
SQLQuery1.Close;
PQConnection1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.Terminate;
end;
initialization
{$I unprovapostgres01.lrs}
end.
EL codi anterior funciona exactament igual amb bases de dades del tipus FireBird / InterBase, o amb Bases de dades del tipus MySQL (si més no, fins a la 5.0), només que canviant el component TPQConnection per un TIBConnection per a les FireBird/InterBase, o per un TMySQL40Connection per a les MySQL4.0, TMySQL41Connection per a MySQL4.1 o TMySQL50Connection per a les MySQL50.
Amb les bases de dades del tipus MySQL 5.1 el control de connexió disponible amb Lazarus SqlDB funciona a mitges. No tanca bé. Suposo que es podria buscar algun control alternatiu, però cal trobar-lo. És una mala notícia perquè la versió de MySQL del repositori de programari d'Ubuntu per a Lucid és la 5.1
En tot cas, aquest és el HelloWorld de la connexió de Lazarus a Postgres (i a FireBird i fins a les MySQL 5.0).
Cap comentari:
Publica un comentari a l'entrada