Class to manager MYSQL for Harbour/xHarbour
Custom Search

lunes, 2 de mayo de 2011

Procedimientos Almacenados / stored Procedures

Creamos el procedimiento almacenado desde el cliente mysql de nuestra preferencia


DELIMITER $
DROP PROCEDURE IF EXISTS born_in_year;
CREATE PROCEDURE born_in_year( year_of_birth INT )
BEGIN
SELECT first_name, last_name, birth, death from president where year( birth ) = year_of_birth;
END $
DELIMITER ;

para ejecutarlo simplemento lo hacenmos pro medio de un query


   cText = "CALL born_in_year( 1908 )"
   oQry := oServer:Query( cText )

el siguiente llamdo es importante para "terminar" el proceso
   oServer:NextResult()

veammos el ejemplo completo


#include "tdolphin.ch"

#define CRLF Chr( 13 ) + Chr( 10 )

PROCEDURE Main()
 
   LOCAL cText := ""
   LOCAL oQry, oServer
 
   SET CENTURY ON
   SET DATE FORMAT "dd/mm/yyyy"
 
   D_SetCaseSensitive( .T. )
 
   IF ( oServer := ConnectTo() ) == NIL
      RETURN NIL
   ENDIF
   cls
 
   cText = "CALL born_in_year( 1908 )"

   oQry := oServer:Query( cText )
 
   DolphinBrw( oQry, "Test" )
 
   oServer:NextResult()
 
   oQry:End()

   cText = "CALL born_in_year( 1913 )"

   oQry := oServer:Query( cText )
 
   DolphinBrw( oQry, "Test" )
 
   oServer:NextResult()
 
   oQry:End()

   cText = "call count_born_in_year( 1913, @count )"

   oQry := oServer:Execute( cText )
 
   oServer:NextResult()
 
   oQry := oServer:Query( "select @count as count" )
   
   ? "count is:"
   ?? oQry:count
 
   oQry:End()
 
 
 
RETURN







esto verifica que no exista otro query con resultado (por motivos de posibles multiples sentencias en los precedimeintos) y cierra el ciclo de existir otro query con resultado deberiamos hacer lo siguiente

   oQry:LoadNextQuery( )

asi cargamnos automaticamente el proximo resultado de un query para multi sentencias

ejemplo de multiples sentencias


#include "tdolphin.ch"


FUNCTION Main()

   LOCAL oServer, oQry

   D_SetCaseSensitive( .T. )
   Set_MyLang( "esp" )
 
   IF ( oServer := ConnectTo() ) == NIL
      RETURN NIL
   ENDIF
 
   oQry = oServer:Query( "select * from president; select * from student" )

   DolphinBrw( oQry, "President" )
 
   oQry:LoadNextQuery( )
 
   DolphinBrw( oQry, "Student" )
       
   oQry = NIL
 
   oServer:End()
 
RETURN NIL


#include "connto.prg"
#include "brw.prg"





Integracion

Dolphin se ha integrado al proyecto GTXBase, Herraminetas Libres para Gente Libre
Con la iniciativa de Rafa Carmona (thefull), Riztan Gutierrez y Daniel Garcia-Gil (yo), el fuerte del proyecto es T-GTK, excelente GUI multiplataforma basado en GTK


podran ver el codigo fuente enteramente en http://www.gtxbase.org/devel/

Dolphin tiene su espacio en el foro donde podran hacer sus preguntas y sugerencias


//

Dolphin was integrated to GTXBase project, FREE Tools to FREE Peoples.
With the initial idea from Rafa Carmona (thefull), Riztan Gutierrez and Daniel Garcia-Gil (me), the "hard" point in the project is T-GTK, excelent Multiplataform GUI based in GTK libraries



all source code is available in  http://www.gtxbase.org/devel/ 

miércoles, 16 de marzo de 2011

Aprendamos MYSQL

No les hablare de historia o antecedentes sobre la evolucion  de MySQL, ire directo al grano al asunto que nos importa... Aprender MySQL

En el mundo de bases de datos, MySQL se califica como un sistema de gestión de bases de datos relacional (SGBDR), adentrando un poco más en estas siglas tenemos que MySQL es el sofware que nos perimte utilizar los datos de la Base, insertado, modificando, recuperando y eliminando, haciendolo de forma relacional, es decir, encontrando coincidencias de información almacenada en una tabla en otras, por medio de elementos comunes en cada una de ellas. La potencia de lo relacional, radica en su capacidad de extraer datos de estas tablas de forma apropiada y unir la información de las tablas relacionadas para producir respuestas a preguntas que no podrían responderse mediante una tabla individual.

Para comunicarnos con MySQL utilizamos un lenguaje llamado SQL ( lenguaje estructurado de consulta, en ingles Structured Query Language ), el cual intentaré explicar sus sentencias en futuros post en el blog.

Al usar MySQL estamos usando en realidad dos programas, qye que MySQL opera utilizando un arquitectura de tipo cliente/servidor:

  • El programa servidor, se ejecuta en la computadora donse se almacenan las bases de datos, está a la espera de las peticiones de los clientes a través ed la red para acceder al contenido de las tablas.
  • El programa cliente, se conecta con el servidor de la base de datos y genera consultas (Query) para generar la acción requerida


Para continuar deberemos tener instalado:

domingo, 6 de febrero de 2011

Seguridad en MySql / Security in MySql

Existen 2 tipos de riesgos que debemos tener en consideracion en Mysql
1- Riesgos procedentes de otros usuarios con cuenta de acceso al host del servidor y llamaremos seguridad interna

2- Riesgos procedentes de clientes que conectan al servidor a travez de la red y llamaremos seguridad externa.

SEGURIDAD INTERNA:
Independientemente del sistema operativo en que este instalado el servidor donde montemos el host MySql, los archivos copiados despues de la instalacion deberan estar protegidos.
No debemos permitir acceso a las carpetas locales creadas por la instalacion de MySql y algunas de estas deberan estar bien protegidas, por ejemplo los archivos binarios y mas aun los archivos de registro, ya que contienen el texto de las sentencias que envian los clientes al servidor, esto tiene relacion con cualquiera que tenga acceso a los archivos de registro podra monitorizar los cambios en el contenido de la base de datos. Un aspecto mas especifico relacionado con los archivos de registro es las sentencias tales como GRANT y SET PASSWORD, tambien quedan registradas

SEGURIDAD EXTERNA:
El sistema de seguridad de MySql es bastante flexible. Nos permite configurar los privilegios de acceso de los usuarios de varias formas diferentes. Normalmente lo haremos utilizando las sentencias GRANT y REVOKE, las cuales modifican las tablas de autorizaciones que controlan el acceso de los clientes.
Las sentencias GRANT y REVOKE proporcionan un metodo adecuado para configurar cuentas de usuario en MySql y asociarles privilegios, pero son solo un ainterfaz. Todas las acciones reales tienen lugar en las tablas de autorizaciones de Mysql.
Para mas detalle sobre las tablas de autorizacion pueden consultar http://dev.mysql.com/doc/refman/5.0/en/grant-table-structure.html