Cordial saludo, gracias por visitar mi artículo
donde mostraré la forma de conexión a bases de datos MySQL.
Unos de los temas cruciales al iniciar en FPC, fue lograr establecer la conexión con la base de datos MySQL, lo cual me tomó días de trasnocho, estudio y pruebas y errores, hasta que gracias a Dios logré encontrar el camino correcto.
Unos de los temas cruciales al iniciar en FPC, fue lograr establecer la conexión con la base de datos MySQL, lo cual me tomó días de trasnocho, estudio y pruebas y errores, hasta que gracias a Dios logré encontrar el camino correcto.
El IDE lazarus de FPC, nos brinda varios componentes para establecer conexión con las diferentes versiones de MySQL, los tales son: TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TMySQL51Connection, TMySQL55Connection, TMySQL56Connection, estos los encontramos en la paleta de controles SQLdb. Ver imagen.
Pero
no usaremos estos componentes, ya que al usarlos podremos tener inconvenientes
futuros, pues si por ejemplo, usamos TMySQL50Connection para conectarnos a la
V. 5 de MySQL, y luego queremos migrar a una versión superior, tendríamos que
cambiar nuestro componente por el adecuado para la versión, o colocar todos los
6 componentes para evitarnos esto a futuro, en vista de este posible problema,
cambiaremos estos componentes por TSQLConector , este también está en la paleta
SQLdb, el cual nos brinda conexión a las diferentes versiones de MySQL, y también
a todas la bases de datos soportadas por FPC en Lazarus, esto es una maravilla,
pues los sistemas quedan multi bases de datos sin muchos cambios, si usas SQL estándar.
Ya tenemos nuestro componente para la conexión a la base de datos, pero necesitamos otro componente que nos permita controlar las Transacciones realizadas al Servidor, para tal efecto usaremos TSQLTransaction, este componente también está en la paleta SQLdb.
Ya identificados nuestros dos componentes, nos vamos a Lazarus y creamos un nuevo proyecto, en mi caso le he colocado ejemploMYSQL. Ver imagen.
Ya tenemos nuestro componente para la conexión a la base de datos, pero necesitamos otro componente que nos permita controlar las Transacciones realizadas al Servidor, para tal efecto usaremos TSQLTransaction, este componente también está en la paleta SQLdb.
Ya identificados nuestros dos componentes, nos vamos a Lazarus y creamos un nuevo proyecto, en mi caso le he colocado ejemploMYSQL. Ver imagen.
En la carpeta o directorio de nuestro ejemplo vemos
varias subcarpetas, a continuación las explicamos:
1. Data. Es para guardar nuestros módulos de datos.
2. frm. Para guardar nuestros formularios.
3. img. Para guardar nuestras imágenes.
4. prg. Donde guardaremos nuestras rutinas, programas
o funciones.
5 .rt. Donde guardaremos
nuestros reportes.Ahora procederemos a configurar nuestros componentes.
Al componente SQLConnector1 las siguientes propiedades.
CharSet = uft8
Connectortype = MySql 5.1 // coloque según la versión que use.
Database = Nombre su base de datos
Hostname = LocalHost. o una dirección IP.
Pasword= Su contraseña de acceso a la base de datos.
UserName= Nombre de usuario del Servidor.
Transaction = Nombre del componente para las transacciones.
Connected = True, al establecer esta propiedad, habiendo configurado todo lo demás, debe establecerse la conexión exitosamente.
Action = caCommint, Cada vez que se haga un ApplyUpdates se guardan los cambios en el servidor.
Active = True, Para que se activen las transacciones.
DataBase= Nombre del conector a la base de datos.
Habiendo configurado nuestros componentes y probado nuestra conexión de forma exitosa, surgen varias preguntas, todo esto lo hemos hecho de forma manual, pero para una apelación real no nos sirve, pues tendríamos que compilar nuestro sistema para cada base de datos, como lo hacemos mediante código?
Para
que nuestro sistema se compile una sola vez y luego solo se cambien mediante
configuración el acceso a las base de datos, tenemos varias opciones, usar un
archivo XML, una tabla .DBF, un archivo plano o un archivo .INI, en este
ejemplo, usaremos este último, donde guardaremos la variables que contendrán el
nombre de la base datos, el usuario, el Host y nombre de usuario al Servidor.
En este artículo no explicaré como crear los archivos .INI desde FPC.
Nos vamos a nuestro DataConexion y damos doble click para que nos cree el método create el cual se activa, como su nombre lo indica, al momento de crearse el objeto. Ver imagen.
Ahora procederemos a escribir nuestra porción de código. Para que nuestro ejemplo funcione al compilar, debemos declarar (escribir) en la clausula Uses, las unidades, Dialogs, IniFiles. Ver imagen.
Luego escribimos nuestro código.
procedure TDataConexion.DataModuleCreate(Sender: TObject);
var
ini : TIniFile ;
lcDataBase, lcServer, lcPasword, lcUser : String;
begin
if(FileExists(GetCurrentDirUTF8+'\DATABASE.ini'))then
begin
ini := TIniFile.Create(GetCurrentDirUTF8+'\DATABASE.ini');
try
lcDataBase := ini.ReadString('DATACONECT','DataBase','');
lcServer := ini.ReadString('DATACONECT', 'DataServer','');
lcPasword := ini.ReadString('DATACONECT', 'DataPasword','');
lcUser := ini.ReadString('DATACONECT', 'DataUser','');
finally
ini.Free;
end;
with SQLConnector1 do
begin
if Connected then
begin
Connected:= False;
end;
DatabaseName := lcDataBase;
HostName := lcServer;
Password := lcPasword;
UserName := lcUser;
end;
end
else
ShowMessage('No existe el archivo de configuraciones');
end;
Si ejecutamos nuestro proyecto debe correr sin problemas.
Hasta esta parte la conexión ya la tenemos
cubierta, pero aún falta como acceder a los datos, como hacer un SELECT, INSERT Y UPDATE usando nuestro modelo de datos.
Hasta el
momento solo hemos agregado nuestros componentes a nuestro formulario, ahora
configuremos las propiedades de cada objeto.
A los
objetos TDBEdit, la Sgte.
DataSource y DataField.
A los
objetos TDBGrid y TDBNavigator, la propiedad DataSource.
Al bojeto
TDataSource la propiedad DataSet.
Y al Objeto TSQLQuery la propiedad, DataBase, Transaction y SQL,
en esta última es donde colocaremos nuestra consulta a la base de datos. Ver imagen.
Habiendo realizado todos los pasos anteriores,
enlazado cada objeto en su propiedad con el componente respectivo, solo nos
falta activar la propiedad Active del TSQLQuery
y si todo está bien debe quedar como la imagen siguiente, sin datos pues aún no
se ha insertado ningún dato.
Todo esto que hemos hecho solo nos
funciona en tiempo diseño, ahora procederemos a realizar los pasos para que nos
permita conexión en tiempo de ejecución.
1. Nos situamos en la Cláusula Uses de
nuestro form y declaramos (escribir) nuestra unidad donde tenemos nuestros dos
componentes para nuestra conexión.
Luego nos ubicamos en nuestro formulario y en el inspector de objetos ubicamos la pestaña eventos y luego en evento OnShow y damos doble click sobre el y nos abre la ventana de código donde escribiremos nuestro código, el siguiente.
procedure TfrmMysql.FormShow(Sender: TObject);
begin
if DataConexion = Nil then
DataConexion := TDataConexion.Create(Application);
with DataConexion do begin
SQLConnector1.Connected:= True;
SQLTransaction1.Action:= True;
end;
with SQLQuery1 do begin
SQL.Clear;
SQL.Text :='Select * from clientes';
Active :=True;
end;
end;
Ejecutamos nuestro proyecto, y todo debe funcionar correctamente, como se muestra en nuestra imagen.
Hasta este punto tenemos nuestro ejemplo casi listo, si casi listo, pues si agregamos información aparentemente se guarda pero si revisamos en el servidor, los datos no han sido enviados aun, esto sucede porque para enviar los datos al servidor, nuestro conjunto de datos necesita que se lo indiquemos usando en comando ApplyUpdates a nuestro componente TSQLQuery.
Esto lo hacemos en el método AfterPos del componente TSQLQuery, con esto le estamos diciendo que luego de hacer la actualización local envíe los datos al Servidor. Veamos el código.
procedure TfrmMysql.SQLQuery1AfterPost(DataSet: TDataSet);
begin
SQLQuery1.ApplyUpdates;
end;
Ahora ejecutamos de nuevo e ingresamos nuestros datos y ahora si se reflejan en el servidor.
Esto
es todo en nuestro primer ejemplo de conexión a bases de datos con FPC usando
Lazarus, espero se de ayuda a los que recién se inician en FPC.
Les dejo los fuentes.
Base de datos ejemplo.
La paz del Señor Jesús sea con usted.
Saludos.
PD. Cualquier sugerencia u comentario es bienvenido, he omitido algunos pasos para no hacer tan extenso el artículo. Puedes consultar dejando un mensaje en la parte inferior.
un gran aporte.. pero quisiera me orientaras de que manera puedo ingresar los valores atravez de cajas de texto y luego que se incorporen al grid. por que para los usuarios es poco amigable estarse desplazando por el grid y sobre todo cuando son tablas con muchos campos, ademas la validacion de los campos en mas fàcil desde cajas de texto. y si se puede hacer con la barra de dsplazamiento seria mucho mejor para aprovechar el mismo componente
ResponderEliminarsaludos y gracias por compartir conocimiento
Hola Erick, disculpa responder hasta ahora, pero he estado ocupado, bueno lo que comentes hay que usar los componentes que trae lazarus para el manejo de bases de datos, estos se encuentra en la paleta componenetes Data controls.
Eliminarlos cuales permiten hacer todas las validaciones en campos de bases de datos, en todas las soportadas por LZ.
Quedo atento.
Saludos.
Hola Lewis , he seguido los pasos del manual , todo va bien hasta la la lectura del archivo Ini, ahora al crear el nuevo formulario agrego el componentes sqlquery cuando quiero configurar las propiedades database y transacción no me permite adjuntar el datamodel creado. Que puedo estar obviando para he repasado varias veces el manual y no logro dar con esto. Saludos y gracias de antemano
ResponderEliminarHola Julio, debes tener actuvo el data model para que esté al alcanse del SQLQuery.
EliminarPara activarlo te vas a la barrita de herramientas que está en la parte izquierda del IDE LZ y das click donde dice ver formularios, y luego das click en el Datamodel, y luego vas al form y ya debes poder enlazar el SQLQuery en la propiedad Database.
ResponderEliminarMuchas gracias Lewis, voy a seguir con los pasos siguientes.
ResponderEliminarSaludos
Con gusto Julio, quedo atento.
EliminarQue tal Lewis.
ResponderEliminarFijate que tu ejemplo lo estoy aplicando para conexion a Oracle, realice el cambio a ORacleConnection, y efectue los cambios necesarios. El programa corre, solo que en el grid no me aparecen los datos de la tabla con lo que estoy probando. Y al momento de agregar un registro, se me llena el grid,completamente, con los datos que capturo en los TBEdit. Que otra cosa podrá ser lo que me este haciendo falta para el caso de ORACLE? Agradezco tu apoyo
Hola Amigo, espero que hallas solucionado tu problema, disculpa no haber respondido a tu duda.
EliminarMuchas gracias Panchito por tu publicación, eres grande por enseñar al que no sabe.
ResponderEliminarDios te Bendiga querido amigo,
Que bueno que pudo ayudarte, saludos desde Colombia
EliminarQue personas tan inteligentes son mis hermanos hispanoamericanos, sigue así querido amigo y muchas gracias desde España.
ResponderEliminargracias por el articulo, muy bueno y muy importante para que la comunidad FPC hispano siga creciendo
ResponderEliminar