Class to manager MYSQL for Harbour/xHarbour
Custom Search

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 .

jueves, 23 de septiembre de 2010

Obtener informacion de los indices de la tabla / Get index information from table

Para obtener la informacuion detallada de los indices de una tabla, puedes ejecutar el siguiente "query"
For detailed information indexes created on table, you can execute following  Query:

SHOW INDEX FROM table_name;
Descripcion de los campos ( Tomados del sitio oficial de MySql)
Description of fields (help taken from Mysql website):


se veria algo asi/Look some like that




Table
Nombre de la Tabla 
The name of the table.

Non_unique
0 si el índice no puede contener duplicados, 1 si puede. /
0 if the index cannot contain duplicates, 1 if it can.

Key_name
Nombre del Indice 
The name of the index.

Seq_in_index
Número de secuencia de columna en el índice, comenzando con 1. / 
The column sequence number in the index, starting with 1.

Column_name
Nombre de columna / 
The column name.

Collation
Cómo se ordena la columna en el índice. En MySQL, puede tener valores 'A' (Ascendente) o NULL (No ordenado). /
How the column is sorted in the index. In MySQL, this can have values “A” (Ascending) or NULL (Not sorted).

Cardinality
Número de valores únicos en el índice. Se actualiza ejecutando ANALYZE TABLE o myisamchk -a. Cardinalityse cuenta basándose en las estadísticas almacenadas como enteros, así que no es necesariamente precisa para tablas pequeñas. Mientras más grande sea, más grande es la probabilidad que MySQL use el índice al hacer joins.
An estimate of the number of unique values in the index. This is updated by running ANALYZE TABLE or myisamchk -a. Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables. The higher the cardinality, the greater the chance that MySQL uses the index when doing joins.
Sub_part
Número de caracteres indexados si la columna sólo está indexada parcialmente. NULL si la columna entera está indexada/
The number of indexed characters if the column is only partly indexed, NULL if the entire column is indexed.

Packed
Indica cómo está empaquetada la clave. NULL si no lo está.
Indicates how the key is packed. NULL if it is not.

Null
Contiene YES si la columna puede contener NULL. Si no, la columna contiene NO/
Contains YES if the column may contain NULL values and ” if not.

Index_type
Método de índice usado (BTREE, FULLTEXT, HASH, RTREE).
The index method used (BTREE, FULLTEXT, HASH, RTREE).

Comment.
Comentarios Varios
Various remarks.

Servidor incrustado / Embedded Server

Actualizado SVN para el uso de servidor incrustado
Updated SVN for embedded server

se agregaron a la carpeta sample los archivos necesarios
los nuevos script para ejecutar los ejemplos con el servidor incrustado son los terminados en "_e" ejemplo bldhm_e.bat, construye el ejemplo para el servidor inscrustado usando el compilador de microsoft
(por los momentos todos en modo consola)

added to samples folder the files necessaries to run embedded server
the new script to build embedded samples are all finished with "_e", ie. bldhm_e.bat, build the embedded server sample with microsoft compiler 
(for now all are in console mode)

download samples here

miércoles, 22 de septiembre de 2010

Harbour/xHarbour

Eliminada carpetas Harbour / xHarbour del SVN, ahora seran descargadas directamente del link suministrados en el blog
Deleted folders Harbour / xHarbour from SVN, now can download from blog

Actualizado/Updated Harbour 2.1 (Rev 15490)  (borland y msvc)
Actualizado/Updated xHarbour build 1.2.1 (simplex) (Rev 6733) (borland y msvc)

lunes, 20 de septiembre de 2010

Idioma / Language

> Willi: Hola Daniel,,, el metodo seek no ubica la letra Ñ
> Willi: Hello Daniel, the Method seek doesn't find "Ñ"

No ubica la Ñ ni otro caracter especial
Doesn't find Ñ or other especial char

Nueva funcion/New Function  Set_MyLang( cLocale )
cLocale contienen información sobre cómo interpretar y llevar a cabo ciertas entradas / salidas y las operaciones de transformación, teniendo en cuenta ubicación y el idioma ajustes específicos
cLocale contain information on how to interpret and perform certain input/output and transformation operations taking into consideration location and language specific settings

El  valor de cLocale dependeran por plataforma, para nuestro caso: Window
The value of cLocale will depend of plataform, for own case: Window

LanguageLANGUAGE option value
Chinese, Simplifiedchs
Chinese, Traditionalcht
Englishameng
Frenchfra
Germandeu
Italianita
Japanesejpn
Koreankor
Portuguese, Brazilianptb
Russianrus
Spanishesp

Con esta funcion se podran accesar los caracteres espciales Ñ, ñ, Á, á, É, é, ... el unico incoveniente es que son sencibles a mayusculas y minusculas
With this function we will can access the special char Ñ, ñ, Á, á, É, é, ..., the only problem is them are case sensitive 

Revisar/Check  testfw2.prg

FUNCTION Main() 

   LOCAL oWnd 
   LOCAL oMenu
   LOCAL oServer
   MENU oMenu 2007
      MENUITEM "testing" ACTION DataBrowse( oServer, oWnd )
   ENDMENU
   
   SET CENTURY ON
   SET DATE FORMAT "dd/mm/yyyy"   
      
   //Activated Case sensitive
   D_SetCaseSensitive( .T. )

   Set_MyLang( "esp" )
   
   IF ( oServer := ConnectTo() ) == NIL
      RETURN NIL
   ENDIF
   
   DEFINE WINDOW oWnd TITLE "Testing Dolphin - Fivewin" MENU oMenu
   
   ACTIVATE WINDOW oWnd 
   
   oServer:End()
   
RETURN NIL

Probar y exponer experiencias, Gracias
Test and post experiences, Thanks


domingo, 5 de septiembre de 2010

xcommand ( 2 part )

Explicare los commands referente al manejo de conexiones
I'll explain the command to handle connections

> CONNECT
> SELECTSERVER
> CLOSEMYSQL SERVER
> CLOSEMYSQL ALL
> SELECTDB cdb [srv: SERVER, MYSQL, OF oServer]

CONNECT [ srv: SERVER, MYSQL, OF ] oServer ;
                  HOST cHost ;
                  USER cUser ;
                  PASSWORD cPassword;
                  [ PORT nPort ];
                  [ FLAGS nFlags ];
                  [ DATABASE cDBName ];
                  [ ON ERROR uOnError ] ;
                  [ NAME cName ];

comando para hacer una conexion a un servidor, se necesitan como minimo 4 (cuatro) parametros.
command to make connection to host, is necessary (minimal) 4 parameter
1) Variable oServer (puede ser cualquier variable) contenedora del objeto TDolphinSrv
1) oServer variable (can be any variable name) owned TDolphinSrv object

2) HOST El valor de cHost puede ser un nombre de host o una dirección IP.
2) HOST The cHost value may be either a hostname or an IP address.

3) USER El valor cUser contiene el ID de usuario para la conexion del usuario a MySQL
3) USER The cUser value contains the user's MySQL login ID

4) PASSWORD El valor cPassword contiene la contraseña para cUser .
4) PASSWORD The cPassword value contains the password for cUser.

Los valores de los siguientes parametros seran determinados por defecto
The next paraneters values will be set by default
> PORT El valor nPort se utiliza como el número de puerto para la conexión TCP / IP, valor por defecto 3306
> PORT The nPort value is used as the port number for the TCP/IP connection. Default value 3306

> FLAGS El valor de nFlags suele ser 0, pero se puede establecer a una combinación de las siguientes opciones en circunstancias muy especiales:
> FLAGS The value of nFlags is usually 0, but can be set to a combination of the following flags in very special circumstances:




Flag NameFlag Description
CLIENT_COMPRESSUse compression protocol.
CLIENT_FOUND_ROWSReturn the number of found (matched) rows, not the number of affected rows.
CLIENT_IGNORE_SPACEAllow spaces after function names. Makes all functions names reserved words.
CLIENT_INTERACTIVEAllow interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client's sessionwait_timeout variable is set to the value of the session interactive_timeout variable.
CLIENT_LOCAL_FILESEnable LOAD DATA LOCAL handling.
CLIENT_MULTI_STATEMENTSTell the server that the client may send multiple statements in a single string (separated by ';'). If this flag is not set, multiple-statement execution is disabled. New in 4.1.
CLIENT_MULTI_RESULTSTell the server that the client can handle multiple result sets from multiple-statement executions or stored procedures. This is automatically set ifCLIENT_MULTI_STATEMENTS is set. New in 4.1.
CLIENT_NO_SCHEMADon't allow the db_name.tbl_name.col_name syntax. This is for ODBC. It causes the parser to generate an error if you use that syntax, which is useful for trapping bugs in some ODBC programs.
CLIENT_ODBCThe client is an ODBC client. This changes mysqld to be more ODBC-friendly.
CLIENT_SSLUse SSL (encrypted protocol). This option should not be set by application programs; it is set internally in the client library.

> DATABASE cDBName es el nombre de la base de datos
> DATABASE cDBName is the database name

> ON ERROR uOnError Codeblock que personaliza el manejo de errores
argumentos 
Self, Objeto TDolphinSrv
nError, Codigo del error generado
lInternal, variable logica que determina si es un error interno de programacion (.T.) o devuelto por MySql (.F.) 
cExtra, Cadena adicional de descripcion de determinados errores

> ON ERROR uOnError Codeblock to custom manager error message
Arguments 
Self, TDolphinSrv Object
nError, Error Code
lInternal, Logical variable to check if is a internal error by programmer (.T.) or is returned by MySql (.F.) 
cExtra, Aditional string to description some specifics errors 

> NAME cName nombre para identificar la conexion al servidor
> NAME cName name to identify host connection

ejemplo/sample

CONNECT oServer
 HOST "dolphintest.sitasoft.net";
 USER "dan_dolphin" ; 
 PASSWORD "123456 ; 
 DATABASE "dolphin_man" ;
 NAME "connect01";
 ON GETERROR onError( Self, nErrorSrv ) 

/samples/connto.prg
-------------------------------------------------------------
SELECTSERVER
Comando para seleccionar y activar por defecto una conexion a un servidor
Command to select and activate by default an host connection
uParam puede conetener los siguientes valores:
Objecto TDolphinQry, Objecto TDolphinSrv, cadena con el nombre de la conexion

uParam can be next values:
Object TDolphinQry, Object TDolphinSrv, name connection string

ejemplo / sample

SELECTSERVER oServer
SELECTSERVER "connect01"

-------------------------------------------------------------
CLOSEMYSQL SERVER 
Commando para cerrar una conexion a un servidoron puede conetener los siguientes valores:
Objecto TDolphinSrv, cadena con el nombre de la conexion


command to close host connectionon can be next values:
Object TDolphinSrv, name connection string


CLOSEMYSQL ALL
Comando para cerrar todas las conexiones activas


Command to close all active connections

ejemplo/sample

CLOSEMYSQL SERVER "connect01"
CLOSEMYSQL ALL

--------------------------------------------------------------

SELECTDB cdb [srv: SERVER, MYSQL, OF oServer]

Selecciona base de datos cdb en conexion actual o una conexion especifica, determinada por el objeto oServer

Select a database cdb in current connection or specific connection, defined by oServer