Class to manager MYSQL for Harbour/xHarbour
Custom Search

miércoles, 18 de diciembre de 2013

Cambio a GIT / move out to GIT

He cambiado el repositorio del SVN a GIT usando el portal de bitbucket.org


Pueden descargar los fuentes usando el programa GIT de su preferencia o descargar directamente de la seccion de descargas


----

I moved out from SVN to GIT, i'm using the site bitbucket.org


you can donwload using your own git program control or donwload directly from download section


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

viernes, 24 de diciembre de 2010

Feliz Navidad / Merry Christmas

Quiero agradecer a todos los seguidores inscritos (y los que no) la confianza brindada, espero que el proximo año les depare los mejores momentos

I want to thank all followers attached (and those who have not)  i hope the next year will send you the best moment

lunes, 13 de diciembre de 2010

Actuazalicion / Update

Agregado metodo GetServerInfo.
Retorna Una cadena de caracteres que representa el número de versión del servidor 
Agregado metodo GetClientInfo
Una cadena de caracteres que representa la versión de la biblioteca de cliente MySQL

Added  Method GetServerInfo() 
Returns a string that represents the server version number
Added Method GetClientInfo
Return a string that represents the MySQL client library version


sábado, 11 de diciembre de 2010

Dentro de GUI / Inside GUI

TDolphin ha ido subiendo escalones poco a poco, se ha aceptado en 2 GUIs diferentes, Fivewin y T-GTK
TDolphin steps has been rising gradually, has been accepted into 2 different GUIs, Fivewin and T-GTK 


Fivewinhttp://forums.fivetechsupport.com/viewtopic.php?f=16&t=19450&p=102455&hilit=tdolphin#p102455
* New: Support for TDolphin classes to manager Mysql, review samples/testdol.prg


T-GTK
Para quienes desarrollan bajo Windows, ya disponible nuevo instalador estilo suite que contiene: MinGW, Harbour 2.1, GTK+, Glade, gEdit, t-gtk y TDolphin!!!

Gracias por el apoyo / Thanks for support

lunes, 15 de noviembre de 2010

Construir LIB-Ejemplos / Build LIB - Samples

Saludos

He debido haber escrito este post desde hace un tiempo atras, existe una nueva forma de construir la LIB y los ejemplos
I should write this post long time ago, exist  new way to build LIB and samples

LIB
hay que configurar configurar las variables del entorno de trabajo
config the enviroment...


  • PRG_COMPILER=HARBOUR
  • PRG_COMP_PATH=\harbour
  • PRG_COMP_BIN_PATH=%PRG_COMP_PATH%\bin
  • PRG_COMP_LIB_PATH=%PRG_COMP_PATH%\lib\win\bcc
  • PRG_COMP_INC_PATH=%PRG_COMP_PATH%\include
  • C_COMPILER=BCC
  • C_COMP_PATH=c:\bcc582
  • C_COMP_BIN_PATH=%C_COMP_PATH%\bin
  • C_COMP_LIB_PATH=%C_COMP_PATH%\lib;%C_COMP_PATH%\lib\psdk
  • C_COMP_INC_PATH=%C_COMP_PATH%\include
  • DOLPHIN_INC=.\include


PRG_COMPILER
nombre del compilador PRG
PRG compiler name
Valores / Values

  • HARBOUR
  • XHARBOUR
PRG_COMP_PATH
Ruta principal de acceso al compilador PRG 
Root path PRG compiler

PRG_COMP_BIN_PATH
Ruta de harbour.exe
Path of harbour.exe

PRG_COMP_LIB_PATH
Ruta de las librerias del compilador PRG
Path of PRG compiler Libraries 

PRG_COMP_INC_PATH
Ruta de los archivos de cabecera del compilador PRG
Path of PRG compiler header files

C_COMPILER
nombre del compilador de C
C compiler name
Valores / Values
  • BCC for borland
  • MINGW32 for mingw
  • MSVC32 for Microsoft 32 bit
  • MSVC64 for Microsoft 64 bit

C_COMP_PATH
Ruta principal de acceso al compilador C 
Root path C compiler

C_COMP_BIN_PATH
Ruta de compiler_executable
Path of compiler_executable

C_COMP_LIB_PATH
Ruta de las librerias del compilador C
Path of C compiler Libraries 

C_COMP_INC_PATH
Ruta de los archivos de cabecera del compilador C
Path of C compiler header files


Existen varios script (.bat) para facilitar la configuracion del entorno
There are some batch file to make easy the enviroment config

  • setenvh.bat, Harbour/Borland
  • setenvhg.bat, Harbour/MiniGW
  • setenvhm.bat, Harbour/Microsoft 32
  • setenv64.bat, Harbour/Microsft 64
  • setenvx.bat, xHarbour/Borland
  • setenvxg.bat, xHarbour/MiniGW
  • setenvxm.bat, xHarbour/Microsoft 32

despues de configurar el entorno ejecutar win-make.exe
after config the enviroment run win-make.exe

remark:
los script ejecutan automaticamente win-make.exe
the bath file run automatically win-make.exe

SAMPLES
Dentro de la carpeta Samples existen 2 scrip principales para construir los ejemplos
Inside samples folder there are 2 batch file to build samples

bldcon.bat
Construye los ejemplos en modo consola
Build samples in console mode

Parametros / Parameters

bldcon prgfile [yes/[no]]
prgfile nombre del archivo prg sin la extencion PRG
[yes/[no]]  uso del modo embebido, por omision es no

prgfile  prg name without PRG ext
[yes/[no]]  activate embedded, default values is no


bldfw.bat

Construye los ejemplos en modo grafico usando Fivewin
Build samples in console mode with Fivewin

Parametros / Parameters 
bldfw prgfile [yes/[no]] 
prgfile nombre del archivo prg sin la extencion PRG
[yes/[no]]  uso del modo embebido, por omision es no
prgfile  prg name without PRG ext
[yes/[no]]  activate embedded, default values is no

jueves, 30 de septiembre de 2010

BLOB-TEXT

Un BLOB es un objeto binario que puede tratar una cantidad de datos variables. Los cuatro tipos BLOB sonTINYBLOB, BLOB, MEDIUMBLOB, y LONGBLOB. Difieren sólo en la longitud máxima de los valores que pueden tratar.

Los cuatro tipos TEXT son TINYTEXT, TEXT, MEDIUMTEXT, y LONGTEXT. Se corresponden a los cuatro tipos BLOB y tienen las mismas longitudes y requerimientos de almacenamiento, segun se muestra en la siguiente tabla

Tipo de columnaAlmacenamiento requerido
CHAR(M)M bytes, 0 <= M <= 255
VARCHAR(M)L+1 bytes, donde L <= M y 0 <= M <= 255
BINARY(M)M bytes, 0 <= M <= 255
VARBINARY(M)L+1 bytes, donde L <= M y 0 <= M <= 255
TINYBLOBTINYTEXTL+1 byte, donde L < 2^8
BLOBTEXTL+2 bytes, donde L < 2^16
MEDIUMBLOBMEDIUMTEXTL+3 bytes, donde L < 2^24
LONGBLOBLONGTEXTL+4 bytes, donde L < 2^32

Los tipos VARCHAR y BLOB y TEXT son de longitud variable. Para cada uno, los requerimientos de almacenamiento depende de la longitud de los valores de la (representados por L en la tabla precedente), en lugar que el tamaño máximo del tipo. Por ejemplo, una columna VARCHAR(10) puede tratar una cadena con una lengitud máxima de 10. El almacenamiento requerido real es la longitud de la cadena (L), más 1 byte para registrar la longitud de la cadena. Para la cadena 'abcd', L es 4 y el requerimiento de almacenamiento son 5 bytes.

Para los tipos CHAR, VARCHAR, y TEXT, los valores L y M en la tabla precedente debe interpretarse como números de caracteres en MySQL 5.0, y las longitudes para estos tipos en las especificaciones de la colmna indican el número de caracteres. Por ejemplo, para almacenar un valor TINYTEXT necesita L caracteres + 1 byte.

El motor NDBCLUSTER soporta sólo columnas de longitud fija. Esto significa que una columnaVARCHAR de una tabla en MySQL Cluster se comportará casi como si fuera de tipo CHAR (excepto que cada registro todavía tiene un byte extra). Por ejemplo, en una tabla Cluster, cada registro en una columna declarada como VARCHAR(100) necesitará 101 bytes para almacenamiento, sin tener en cuenta la longitud de la columna almacenada en cualquier registro.

Los tipos BLOB y TEXT requieren 1, 2, 3, o 4 bytes para almacenar la longitud de la columna, dependiendo de la longitud máxima posible del tipo.

Las columnas TEXT y BLOB se implementan de forma distinta en el motor de almacenamiento NDBCLUSTER , donde cada registro en una columna TEXT se compone de dos partes separadas. Una de estas es de longitud fija (256 bytes), y se almacena realmente en la tabla original. La otra consiste de cualquier dato de más de 256 bytes, que se almacena en una tabla oculta. Los registros en esta segunda tabla siempre tienen una longitud de 2,000 bytes . Esto significa que el tamaño de una columna TEXT es 256 si size <= 256 (donde size representa el tamaño del registro); de otro modo, el tamaño es 256 + size + (2000 - (size - 256) % 2000).

Las columnas BLOB se tratan como cadenas de caracteres binarias (de bytes). Las columnas TEXT se tratan como cadenas de caracteres no binarias (de carácateres). Las columnas BLOB no tienen conjunto de caracteres, y la ordenación y la comparación se basan en los valores numéricos de los bytes. Las columnas TEXT tienen un conjunto de caracteres y se ordenan y comparan en base de la colación del conjunto de caracteres asignada a la columna

No hay conversión de mayúsculas/minúsculas para columnas TEXT o BLOB durante el almacenamiento o la recuperación.

Si asiguna un valor a una columna BLOB o TEXT que exceda la longitud máxima del tipo de la columna, el valor se trunca. Si los caracteres truncados no son espacios, aparece una advertencia. Puede hacer que aparezca un error en lugar de una advertencia usando el modo SQL estricto.

En la mayoría de aspectos, puede tratar una columna BLOB como VARBINARY que puede ser tan grande como desee. Similarmente, puede tratar columnas TEXT como VARCHAR. BLOB y TEXT difieren de VARBINARY y VARCHARen los siguientes aspectos::

No se eliminan espacios al final para columnas BLOB y TEXT cuando los valores se almacenan o recuperan.

Tenga en cuenta que TEXT realiza comparación espacial extendida para coincidir con el objeto comparado, exactamente como CHAR y VARCHAR.

Para índices en columnas BLOB y TEXT, debe especificar una longitud de prefijo para el índice. Para CHAR yVARCHAR, la longitud de prefijo es opciona.

BLOB y TEXT no pueden tener valores DEFAULT .