Social Icons

Conexión MySql

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.

El IDE lazarus de FPC, nos brinda varios componentes para  establecer conexión con las diferentes versiones de MySQL, los tales son: TMySQL40ConnectionTMySQL41Connection, 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.


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.

Luego de haber creado nuestro proyecto crearemos un módulo de datos donde manejaremos nuestra conexión a MySQL, lo guardamos en nuestra carpeta Data con el nombre DataConexion y agregamos los componentes ya descritos. Ver imagen.














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.

Al componente SQLTransaction1 las siguientes propiedades.

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.

Para hacer las operaciones descritas, necesitaremos cinco componentes, TSQLQuery (Paleta SQLdb) , TDataSource (Paleta Data Access), TDBNavigator, TDBEdit, TDBGrid estos tres últimos los encontramos en la paleta Data Controls, estos componentes los agregamos a nuestro formulario, el cual ya hemos creado al inicio, configuramos las propiedades DataSource, DataSet y DataField de cada objeto. Ver imagen.














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 DataField.

A los objetos TDBGrid y TDBNavigator, la propiedad DataSource.

Al bojeto TDataSource la propiedad DataSet.


Y al Objeto TSQLQuery la propiedad, DataBaseTransaction 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.



13 comentarios:

  1. 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
    saludos y gracias por compartir conocimiento

    ResponderEliminar
    Respuestas
    1. 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.

      los cuales permiten hacer todas las validaciones en campos de bases de datos, en todas las soportadas por LZ.

      Quedo atento.

      Saludos.

      Eliminar
  2. 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

    ResponderEliminar
    Respuestas
    1. Hola Julio, debes tener actuvo el data model para que esté al alcanse del SQLQuery.

      Eliminar
  3. Para 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.

    ResponderEliminar
  4. Muchas gracias Lewis, voy a seguir con los pasos siguientes.

    Saludos

    ResponderEliminar
  5. Que tal Lewis.
    Fijate 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

    ResponderEliminar
    Respuestas
    1. Hola Amigo, espero que hallas solucionado tu problema, disculpa no haber respondido a tu duda.

      Eliminar
  6. Muchas gracias Panchito por tu publicación, eres grande por enseñar al que no sabe.
    Dios te Bendiga querido amigo,

    ResponderEliminar
  7. Que personas tan inteligentes son mis hermanos hispanoamericanos, sigue así querido amigo y muchas gracias desde España.

    ResponderEliminar
  8. gracias por el articulo, muy bueno y muy importante para que la comunidad FPC hispano siga creciendo

    ResponderEliminar

 

Visitas


contador de visitas para blogger
 
Blogger Templates