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.

No hay comentarios.:

Publicar un comentario