Archive for the ‘Pascal’ Category

Como conectarse a MySQL usando Free Pascal

Tuesday, April 19th, 2005

Free Pascal es un excelente compilador Pascal compatible con Turbo Pascal y el más reciente Borland Delphi que se distribuye gratuitamente bajo licencia GPL.

Pascal es un excelente lenguaje que gracias a multitud de colaboradores que desarrollan "unidades", resulta valido para realizar infinidad de tareas, incluyendo la administración de bases de datos MySQL.

La versión actual de Free Pascal es distribuido con una gran variedad de Unidades, entre ellas "mysql", la cual nos permitirá conectarnos y administrar MySQL desde nuestros propios programas.

Antes de empezar a programar necesitas tener instalados Free Pascal y MySQL en tu sistema. Si trabajas en un entorno Windows, la instalación automática de Free Pascal configurará todo correctamente, simplemente tendrás que recordar que debes colocar la librería dinámica libmysql.dll en el mismo directorio que tus programas compilados. libmysql.dll viene con la versión Windows de MySQL y debería estar en el directorio "c:/mysql/lib" o equivalente. Si trabajas con Linux o Unix, tendrás que especificar la localización de las librerías de MySQL en el archivo mysql.pp previamente a compilar Free Pascal.

Suponiendo que lo tengas todo listo para empezar a programar es recomendable que leas la sección que explica el funcionamiento de la API C en el manual de MySQL. Al fin y al cabo, la unidad "mysql" de Pascal ha sido portada de la librería de C, por lo que su funcionamiento y las funciones disponibles son prácticamente idénticas.

A continuación un ejemplo de un programa que se conecta a la base de datos, imprime información de la conexión, selecciona una base de datos que hemos llamado "db_prueba" y muestra el número de registros existentes en la tabla "tb_prueba":

PROGRAM test;
USES mysql;
CONST
DataBase : Pchar = 'db_prueba';
Query : Pchar = 'select count(*) from tb_prueba';

VAR
sock : PMYSQL;
qmysql : TMYSQL;
recbuf : PMYSQL_RES;
rowbuf : TMYSQL_ROW;

BEGIN
{ ####- CONECTAR CON MYSQL ####- }
Write('Conectando con MySQL...');
sock := mysql_connect(PMysql(@qmysql),nil,nil,nil);
if sock=Nil then
begin
Writeln(stderr,'No es posible conectar con MySQL.');
Writeln(stderr,mysql_error(@qmysql));
halt(1);
end;
writeln('HECHO');

{ ####- MOSTRAR DATOS DE LA CONEXIÓN ####- }
writeln('Datos de la conexión:');
{$ifdef linux}
writeln ('Mysql_port : ',mysql_port);
writeln ('Mysql_unix_port : ',mysql_unix_port);
{$endif}
writeln ('Host info : ',mysql_get_host_info(sock));
writeln ('Server info : ',mysql_stat(sock));
writeln ('Client info : ',mysql_get_client_info);

{ ####- SELECCIONAR BASE DE DATOS ####- }
writeln('Seleccionando base de datos ',DataBase,'...');

if mysql_select_db(sock,DataBase) < 0 then
begin
writeln (stderr,'No es posible selecciona base de datos',Database);
writeln (stderr,mysql_error(sock));
halt (1);
end;

{ ####- EJECUTAR UN QUERY EN UNA TABLA ####- }
writeln('Ejecutando query: ',Query,'...');
if (mysql_query(sock,Query) < 0) then
begin
writeln(stderr,'Ejecución del query erronea.');
writeln(stderr,mysql_error(sock));
halt(1);
end;

{ ####- MOSTRAR NÚMERO DE REGISTROS ####- }
recbuf := mysql_store_result(sock);
if RecBuf=Nil then
begin
Writeln ('El query no ha devuelto nada.');
mysql_close(sock);
halt (1);
end;
rowbuf := mysql_fetch_row(recbuf);
writeln('La tabla contiene ',rowbuf[0],' registros.');
END.

Ahora que ya sabes todo lo que necesitas para poder crear un programa cliente que sirva para administrar una base de datos MySQL, podrías crear el "trastero" o "back office" de tu web con Pascal. Esto te permitiría administrar tu web cómodamente desde el escritorio de tu web… Aunque en realidad no parece que este sistema resulte más cómodo que una interfaz web… ;)

Introducción a la programación CGI en Pascal

Tuesday, April 19th, 2005

Seguro que no son muchos los que usan Pascal para crear aplicaciones CGI, pero este lenguaje es tan válido como cualquier otro. Bueno, aunque la realidad es que no resulta demasiado cómodo.

Free Pascal ofrece una gran variedad de "Unidades" que permiten la realización de multitud de tareas, desde conectarse a bases de datos hasta programación CGI.

Es verdad que Pascal no es el lenguaje más apropiado para crear aplicaciones CGI, existen otros lenguajes como PHP o ASP mucho más adecuados para programación web. En realidad, usar Pascal para programación web tiene un gran número de inconvenientes pero en ciertas situaciones la utilización de un lenguaje compilado como Pascal puede resultar muy beneficiosa.

Free Pascal dispone de una Unidad llamada "uncgi" que facilita la programación CGI de forma considerable. Esta unidad, entre otras cosas, permite acceder a las variables enviadas mediante los métodos GET y POST. De todas formas, nuestro primer programa no usará "uncgi", simplemente te mostrará como mostrar texto o html.

PROGRAM test;
BEGIN
{ IMPRIMER LA CABECERA QUE INDICA EL TIPO DE DOCUMENTO }
writeln('Content-type: text/html');
writeln;

{ ## TEXTO O CÓDIGO HTML DE NUESTRA PRIMERA PÁGINA ## }
writeln('<HTML>');
writeln('<HEAD>');
writeln('<TITLE>Mi primer programa...</TITLE>');
writeln('</HEAD>');
writeln('<BODY>');
writeln('Mi primer programa');
writeln('</BODY>');
writeln('</HTML>');
END.

Lo más importante del código mostrado y donde debemos prestar mayor atención es la cabecera. Esta consiste en una línea que indica al servidor el tipo de documento que queremos mostrar y un salto de línea, o simplemente una línea vacía. La inclusión de la cabecera es imprescindible, ya que de lo contrario el servidor HTTP (Apache) no sabría como actuar. El programa de nuestro ejemplo muestra una página de texto o HTML normal, por ello hemos indicado que el tipo de contenido es "text/html".

writeln('Content-type: text/html');
writeln;

Si nuestro programa mostrara como resultado una imagen JPEG, deberíamos indicar que el documento es de tipo "image/jpeg". Por lo tanto, la cabecera debería ser similar a el siguiente código:

writeln('Content-type: image/jpeg');
writeln;

La segunda parte del documento no es más que el contenido del mismo, código HTML en este caso.

Ahora que ya sabemos como mostrar una página HTML usando un programa en Pascal, pasemos a ver el siguiente ejemplo que mediante el uso de la unidad "uncgi" muestra información acerca del navegador cliente y algunas variables que le pasamos mediante el método GET:

PROGRAM miprograma;
USES uncgi;
BEGIN
{ ##- IMPRIME CABECERA STANDAR PARA TEXT/HTML ##- }
cgi_init;

{ ##- CONTENIDO DEL DOCUMENTO ##- }
Writeln ('Agente = ', http_useragent);
Writeln ('Página = ', http_referer);
Writeln ('Nombre = ', get_value('nombre'));
Writeln ('Apellido = ', get_value('apellido'));
END.

Una vez compilado el código, es imprescindible que le apliques los permisos apropiados para poder así ejecutarlo. Es preciso que Apache pueda ejecutar el fichero, por lo que en la mayoría de los servidores, será suficiente con aplicarle el permiso 755 mediante el comando chmod, es decir:
chmod 755 <fichero>

Esto lo puedes hacer usando prácticamente cualquier cliente FTP, aunque también lo puedes hacer mediante telnet o SSH.

Ahora debes llamar al fichero desde tu navegador, para ello no tienes más que teclear la dirección donde se ubica y pasarle los parámetros "nombre" y "apellido" de la siguiente forma:
http://tudominio.com/miprograma?nombre=TUNOMBRE&apellido=TUAPELLIDO

El programa mostrará la información sobre el "Agente" (el navegador…) que lo esta llamando, la página desde donde ha sido referido el agente, el valor de la variable "nombre" que le hemos pasado y el valor de la variable "apellido" que también se lo hemos pasado mediante el método GET.