Es mostren els missatges amb l'etiqueta de comentaris firebird. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris firebird. Mostrar tots els missatges

divendres, 13 d’agost del 2010

Com accedir a PostgreSQL (o MySQL, o FireBird) amb Lazarus / 31 juliol 2010

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 postgres
i, 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).