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.