martes, 25 de agosto de 2020

Instalación y configuración básica del servidor MariaDB en Debian 10


Para instalar el servidor de base de datos MariaDB en Debian 10 en modo consola, hay que ejecutar:

sudo apt-get install mariadb-server

Con este comando queda instalado el servidor, sin embargo, hay que hacer algunas pequeñas modificaciones:

Primeramente nos conectamos al servidor de manera local como administrador para hacer los cambios necesarios:

sudo mysql

Una vez conectados, usaremos la base de datos mysql, que es donde vamos a configurar:

use mysql;

Vamos a deshabilitar el plugin de inicio de sesión de MariaDB para que nos permita iniciar por medio de contraseña:

update user set plugin='"' where user='root';

A continuación, asignaremos una contraseña para root(hay que remplazar las X por la contraseña):

alter user root@localhost identified by 'XXXXXXXX';

Opcional, si quieres que el acceso a la base de datos, por medio de root, se pueda realizar de manera remota:

update user set host='%' where user='root';

Actualizamos los privilegios:

flush privileges;

Y salimos:

exit;

En el caso de que hayas optado por el acceso remoto, hay que modificar el fichero de configuración de MariaDB para que permita "escuchar" el remoto:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Ubicamos la línea que dice "bind-address" y la modificamos para que quede así:

bind-address = 0.0.0.0

Y es todo, podemos conectarnos de manera remota para realizar las funciones de administración que necesitemos.

Un saludo!

jueves, 20 de agosto de 2020

Tutorial de programación Free Pascal + MySQL/MariaDB segunda parte

Bienvenidos de vuelta!


Para esta segunda parte vamos a jugar un poco con las consultas básicas de MySQL/MariaDB


Preeliminares

En nuestra base de datos del primer ejemplo (a la cual nombramos "tutorial"), requerimos una tabla llamada "datos" que contenga los campos:

id del tipo smallint

nombre del tipo varchar

edad del tipo smallint

correo del tipo varchar

Para este ejemplo he insertado valores a los campos:

1, xbitcarry, 42, xbitcarry@gmail.com

Comencemos...

En la parte anterior de este tutorial dejamos lista la conexión a la base de datos, ahora, vamos a hacer una consulta, si requieres información detallada de las consultas a MySQL/MariaDB, te recomiendo revises los recursos de W3Schools.

Vamos a colocar el texto de la consulta en una variable de tipo string a la que llamaremos "texto_consulta":

texto_consulta := 'select * from datos'+ #0;

Para enviar la consulta a MySQL/MariaDB necesitamos una variable especial para ello:

consulta del tipo PChar

Esta variable debe apuntar al texto de la variable texto_consulta y lo hacemos con la instrucción:

consulta := @texto_consulta[1];

Ahora viene lo interesante... Ejecutar la consulta...

mysql_query(socket,consulta);

Listo! 

Pero espera... Aún falta revisar la respuesta de la consulta... 

Necesitamos una variable usada por MySQL/MariaDB para almacenar los resultados obtenidos de la consulta:

bufer_respuesta del tipo PMYSQL_RES

Para lograr esto escribimos:

bufer_respuesta:= mysql_store_result(socket);

Para acceder a los resultados de la consulta usamos una variable de MySQL/MariaDB:

fila_bufer del tipo MYSQL_ROW

Para lo cual usamos:

fila_bufer := mysql_fetch_row(bufer_respuesta);

De esta manera fila_bufer es contiene los resultados de consulta a los cuales podemos acceder con el índice de cada campo, en nuestro ejemplo:

+-------------------------------------------------+

|  ID  | 0 |    1      |  2 |          3          |

+-------------------------------------------------+

| Dato | 1 | xbitcarry | 42 | xbitcarry@gmail.com |

+-------------------------------------------------+

Y podemos imprimirlos en pantalla con:

Writeln('ID: ', fila_bufer[0],' - Nombre: ', fila_bufer[1], ' - Edad: ', fila_bufer[2],' - Correo: ',fila_bufer[3]);

Es importante recalcar que al usar la función, debemos liberar, al terminar de usarla, la memoria con el comando:

mysql_free_result(bufer_respuesta);

Y terminamos! Si continúas hasta aquí sin errores, te felicito, eres muy cuidadoso y te dejo en suspenso para la siguiente parte del tutorial...

Te dejo el código completo de este segundo tutorial:

Program tutorial;

{$codepage UTF8}

{$mode objfpc}{$H+}


Uses

Crt, MySQL4;


Var

servidor, usuario, contrasena, basededatos : String;

alloc,socket : PMYSQL;

qmysql : TMYSQL;

texto_consulta : String;

consulta : PChar;

bufer_respuesta : PMYSQL_RES;

fila_bufer : MYSQL_ROW;

Begin

ClrScr;

Write('Servidor: ');

Readln(servidor);

Write('Usuario: ');

Readln(usuario);

Write('Contraseña: ');

Readln(contrasena);

Write('Base de Datos: ');

Readln(basededatos);

alloc := mysql_init(PMYSQL(@qmysql));

socket := mysql_real_connect(alloc, PChar(servidor), PChar(usuario), PChar(contrasena), PChar(basededatos), 0, nil, 0);

If socket=Nil then

begin

Writeln (stderr,'Couldn''t connect to MySQL.');

Writeln (stderr, 'Error was: ', mysql_error(@qmysql));

halt(1);

end;

Writeln;

texto_consulta := 'SELECT * from datos' +#0;

consulta := @texto_consulta[1];

mysql_query(socket,consulta);

bufer_respuesta := mysql_store_result(socket);

fila_bufer := mysql_fetch_row(bufer_respuesta);

Writeln('ID: ', fila_bufer[0],' - Nombre: ', fila_bufer[1], ' - Edad: ', fila_bufer[2],' - Correo: ',fila_bufer[3]);

mysql_free_result(bufer_respuesta);

End.

lunes, 10 de agosto de 2020

Tutorial de programación Free Pascal y MariaDB - Primera parte

                             

Tutoriales de programación de Free Pascal hay muchos, las funcionalidades básicas está muy explicadas, sin embargo, a la hora de especializarse es cuando se encuentran los detalles, así fue como me dediqué a realizar este tutorial.

Si quieres lo básico de Free Pascal, te recomiendo la siguiente página.

Preliminares

Antes de comenzar, necesitas tener instalado Free Pascal y MariaDB

En MariaDB necesitamos crear la base de datos "tutorial".

Comenzamos!

Por lo general, comienzo con el esqueleto de la programación de Pascal:

Program tutorial;  
Uses
   Crt;
Begin
End.


A partir de este esqueleto le voy agregando lo que vaya requiriendo. Lo hago así porque, si compilo este esqueleto, funciona, no marca error.

Solo he usado la librería de MySQL4 que viene por defecto en Free Pascal, me ha servido, y es el que quiero mostrar, se añade en la parte Uses:

Program tutorial;
{$codepage UTF8}
{$mode objfpc}{$H+}
Uses
   Crt, MySQL4;
Begin
End.

Añado las directivas al compilador:

{$codepage UTF8}
{$mode objfpc}{$H+}

La primera la uso para poder imprimir letras con acentos y la segunda para las funcionalidades de MariaDB.

Hasta aquí, el programa realmente no hace nada, excepto mostrar error si algo te hace falta.

Para mejor entendimiento, usaré programación estructurada de la manera más simple posible.

En el cuerpo principal del programa limpiaré la pantalla para tener mayor área de trabajo.

En seguida, solicitaré los datos de conexión para la base de datos de MariaDB, para esto usaré las variables:

servidor, usuario, contrasena, basededatos

Todas de tipo string

Para esto imprimo la cadena informativa de la información que solicito e inmediatamente después leo la respuesta del usuario y la almaceno en la variable correspondiente:

Program tutorial;
Uses
   Crt, MySQL4;
Var
   servidor, usuario, contrasena, basededatos : String;
Begin
   ClrScr;
   Write('Servidor: ');
   Readln(servidor);
   Write('Usuario: ');
   Readln(usuario);
   Write('Contraseña: ');
   Readln(contrasena);
   Write('Base de Datos: ');
   Readln(basededatos); 
End.

Aquí viene la parte más práctica: la conexión a MariaDB.
Para la conexión se requieren las variables:
alloc (de allocate, asignación) y socket del tipo PMYSQL
qmysql del tipo TMYSQL

Primeramente realizamos la asignación para inicializar la conexión a MariaDB, para esto usamos:

alloc := mysql_init(PMYSQL(@qmysql));

Después de esto formateamos los datos de conexión para poder usarlos con el conector MySQL para conectar a MariaDB así:

socket := mysql_real_connect(alloc, PChar(servidor), PChar(usuario), PChar(contrasena), PChar(basededatos), 0, Nil, 0);

Solo nos resta verificar la conexión y en caso de error, mostrar la información correspondiente con:

If socket=Nil then
Begin
   Writeln(stderr,'No se pudo conectar a MariaDB');
   Writeln(stderr, 'El error fue: ', mysql_error(@qmysql));
   halt(1);
End;

Por lo que nuestro código quedaría así:

Program tutorial;
{$codepage UTF8}
{$mode objfpc}{$H+}

Uses
   Crt, MySQL4;

Var
   servidor, usuario, contrasena, basededatos : String;
   alloc,socket : PMYSQL;
   qmysql : TMYSQL;
Begin
   ClrScr;
   Write('Servidor: ');
   Readln(servidor);
   Write('Usuario: ');
   Readln(usuario);
   Write('Contraseña: ');
   Readln(contrasena);
   Write('Base de Datos: ');
   Readln(basededatos);
   alloc := mysql_init(PMYSQL(@qmysql));
   socket := mysql_real_connect(alloc, PChar(servidor), PChar(usuario), PChar(contrasena), PChar(basededatos), 0, nil, 0);
   If socket=Nil Then
   Begin
      Writeln (stderr,'Couldn''t connect to MySQL.');
      Writeln (stderr, 'Error was: ', mysql_error(@qmysql));
      halt(1);
   end;
End.

Si al llegar aquí puedes compilar sin error, estás listo para la segunda parte de este tutorial; en caso contrario, habrá que revisar tu código para encontrar el error, porque, de que funciona, funciona...

Saludos y hasta la próxima!
Segunda parte del tutorial aquí