MariaDB - Campos tipo TEXT (MEMO), BLOB

MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Cgallegoa » Tue Feb 17, 2015 4:20 am

Hola amigos,

Tengo instalada la versión 5.5.32 de MariaDB.

El asunto es que al hacer un recordset a tablas con campos tipo TEXT o BLOB genera error : Error adodb.recordset/6 DISP_E_UNKNOWNNAME: EOF.

El mismo ejercicio en MySQL funciona perfecto.

Script de la tabla :
Code: Select all  Expand view
DROP TABLE IF EXISTS `prueba_text`;
CREATE TABLE `prueba_text` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `observac` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of prueba_text
-- ----------------------------
INSERT INTO `prueba_text` VALUES ('1', 'En MySQL funciona perfecto pero falla en MariaDB.... !!!!');
INSERT INTO `prueba_text` VALUES ('2', 'Otro texto en el campo Text');
 

Prg de prueba :
Code: Select all  Expand view
#include "FiveWin.ch"
#include "Ado.ch"

Function Inicio()
LOCAL oMiConexion, oRecordSet, cQuery, cStrCnn
LOCAL cMtrMySql    := "Driver={MySQL ODBC 5.3 ANSI Driver} ; Server=localhost ; Database=Base01 ; User=root ; Password=12345 ; Port=3306 ; Option=3"
LOCAL cMtrMariaDB  := "Driver={MariaDB ODBC 1.0 Driver} ; Server=localhost ; Database=Base01 ; User=root ; Password=12345 ; Port=3307 ; Option=3"
LOCAL lMariaDB := .T.

cStrCnn := iif(lMariaDB , cMtrMariaDB , cMtrMySql )

oMiConexion := TOleAuto():New("adodb.connection")
oMiConexion:Open(cStrCnn)
oRecordSet := TOleAuto():New("adodb.recordset")
oRecordSet:CursorLocation := adUseClient       // : 3
oRecordSet:LockType       := adLockOptimistic  // : 3
oRecordSet:CursorType     := adOpenDynamic // adOpenKeySet // : 2
oRecordSet:ActiveConnection(oMiConexion)
cQuery := "SELECT * FROM prueba_text"
oRecordSet:Open(cQuery)  // <<<===>>> Aquí truena con MariaDB
if !oRecordSet:EOF()
   oRecordSet:MoveFirst()
end
xBrowse(oRecordSet, iif(lMariaDB , "Conectado a MariaDB" , "Conectado a MySql" ))
Return(NIL)


Qué estoy haciendo mal ? Alguien ha tenido este mismo problema con las campos TEXT en MariaDB ? Cómo lo soluciono ?

Muchas gracias por su ayuda y abrazos para todos,
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Adolfo » Tue Feb 17, 2015 11:40 am

Carlos...

Solo un comentario, porque no va a ser de mucha ayuda.
Yo me cambie de Mysql a MariaDB sin ningun problema, ningun cambio en la programacion, fue super transparecte, hasta con imagenes grabadas en campos Blob, las observaciones en campos text, y todo lo demas sin problemas.

PERO..... yo utilizo tDolphin, pareciera que el problema viene por el lado de ADO, aunque no parecen haber problemas registrados en la web.
Yo le daria un vistazo por ese lado.

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Cgallegoa » Tue Feb 17, 2015 5:34 pm

Hola Adolfo, gracias por tu respuesta.

Si, parece que el asunto viene por el lado del conector ODBC de MariaDB y ADO. Busqué a fondo por internet pero en ninguna parte hay referencia a ese problema.

Voy a probar con TDolphin. Alguna restricción con xHarbour ? Algún manual para novatos ? :D

Hago el cambio a MariaDB por el tema de la licencia. Hay un verdadero barullo en la interpretación de la Licencia GPL de MySql. Según lo encontrado en la web, algunos dicen que si tu programa (código cerrado) sólo se conecta a MySql (no instala el motor ni librerias de MySQL) no debes pagar nada, Otros, que por el sólo hecho de conectarse tienes que pasar por caja de Oracle o distribuir tu aplicación como GPL con código abierto. Entre esos dos extremos hay todos los colores de opiniones que te puedas imaginar. Entonces, para ir a lo seguro, lo mejor es no usar MySql, pues aunque las normas GPL son más o menos claras, Oracle las acomoda para su beneficio.

Qué opinas ?

Un abrazo,
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby sysctrl2 » Tue Feb 17, 2015 6:40 pm

Como dice el amigo ADOlfo,
el problema puede ser de ADO,
yo uso dolphin sin problemas, con mysql o mariaDB,

Code: Select all  Expand view

#include "fivewin.ch"
#include <tdolphin.ch>

* ----------------------------------------- *
* ejemplo para probar la conexion con mysql *
* crea el contenedor y agrega una tabla     *
* by SysCtrl 17-feb-2015                    *
* ----------------------------------------- *

static oCon //contenedor

Function Main()
   LOCAL cDbName := "mibase_de_pruebas"

    D_SetCaseSensitive( .t. )

   * ----------------------------------- *
   * conectamos con el servidor          *
   * ----------------------------------- *
   IF ( oCon := Connection() ) == NIL
      msgstop('No se pudo realizar una conexion con el servidor', ::cUser )
      RETURN NIL
   ENDIF  

   *** evita un poco suspension del mysql,
   oCon:Execute( "SET SESSION wait_timeout = 86400;" )


   * ----------------------------------- *
   * creamos el contenedor               *
   * la base que contiene las tablas     *
   * ----------------------------------- *      
   
   if ! CreaDb( oCon, cDbName )
      msgstop('No se pudo crear o conectar con la base de datos principal ... ', ::cUser )
      RETURN nil
   endif      

   **********************************************
   * creo mi primera tabla                      *
   **********************************************
   CreaLineas( oCon )

   ? "si este mensaje se presenta",
     "el sistema ha creado el contenedor y una tabla .."

 RETURN NIL

 FUNCTION Connect( )
   LOCAL oServer  
   LOCAL oErr
   TRY
      CONNECT oServer HOST "127.0.0.1" ; // o IP del servidor donde tienes la base de datos
                      USER "root" ;
                      PASSWORD "1234";
                      PORT 3306 ;
                      FLAGS 0

                      // DATABASE "MiDataBase"
                               
   CATCH oErr
     RETURN NIL
   END

RETURN oServer

Function CreaLineas( oCon )
    local cQry
    * crea la tabla lineas.sql si no existe
   cQry := "CREATE TABLE IF NOT EXISTS lineas ( "
   cQry += "id INT UNSIGNED NOT NULL AUTO_INCREMENT,"
   cQry += "codigo      decimal(6,0) default 0, "
   cQry += "nombre      varchar(40) default '', "

   cQry += "PRIMARY KEY (id) , INDEX (codigo), INDEX (nombre) ) "
   
   cQry += "ENGINE = InnoDB"

   oCon:Execute( cQry )

Return nil

FUNCTION CreaDb( oCon,cDbName )
   oCon:Execute( "CREATE DATABASE IF NOT EXISTS "+cDbName ) && crea el contenedor si no existe
   oCon:selectdb( cDbName ) && ponemos en uso la base de datos
   IF oCon:lError
      Return .f.
   ENDIF
return .t.
 
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Armando » Tue Feb 17, 2015 7:04 pm

Carlos:

Probar no cuesta, intenta agregando la conexión
Code: Select all  Expand view

oRecordSet:Open(cQuery,oMiConexion)  // <<<===>>> Aquí truena con MariaDB
 


Y cuentas que pasa.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Adolfo » Tue Feb 17, 2015 10:39 pm

Yo me cambie a MARIADB precisamente por la ambiguedad en la interpretacion de algunos puntos por ORACLE.

Y feliz y gratamente sorprendido que en algunos procesos es bastante mas rapido. y obviamente 100% compatible con MYSQL.

A proposito.. se llama Maria Db por ser el nombre de la segunda hija de Monty,Maria
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby acuellar » Wed Feb 18, 2015 10:28 am

Yo también uso MariaDB 10.0.16 Estable con TDolphin y todo 100 puntos.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Cgallegoa » Wed Feb 18, 2015 5:17 pm

Solucionado !!!

Me toca mantenerme con ADO, ( por asuntos de portabilidad entre MariaDB y Postgresql), por eso dejo de lado TDolphin pues por lo que entiendo sólo va para MySql y MariaDB.

La solución estuvo en usar el conector de Mysql y no el de MariaDB (parece que éste tiene un bug). Con el de MySql funciona perfecto.

En resumen, montar el Servidor MariaDB y el conector 5.3 de MySQL. (espero que no toque pasar por caja de oracle :D )

Abrazos,
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Armando » Wed Feb 18, 2015 6:04 pm

Carlos:

En principio que bueno que hayas solucionado el problema, solo como breviario
cultural, cual fue el resultado de las sugerencias del foro?

Por otro lado, no vaya a ser que estés construyendo a Frankeistein (con pedazos
de aquí y pedazos de allá) :)

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: MariaDB - Campos tipo TEXT (MEMO), BLOB

Postby Cgallegoa » Wed Feb 18, 2015 9:09 pm

Armando,

En principio que bueno que hayas solucionado el problema, solo como breviario
cultural, cual fue el resultado de las sugerencias del foro?


Super positivo :D

Como indiqué en el post anterior, no probé TDolphin porque sólo va para MySql y MariaDB, y la aplicación que estoy terminando va a ser usada por clientes que tienen MySQl (los pasaré a MariaDB) y otros que tienen Postgresql. Entonces con ADO, solo cambio el string de conexión y algún par de cosillas (por las sintaxis SQL de Postgresql), y listo.

A todos muy agradecido por sus guías, que como siempre, nos solucionan el problema o nos ponen en el camino correcto.

En cuanto a Frankenstein, he hecho todo tipo de pruebas y parece que el monstruo se está portando muy bien :D. Tanto odbc.conexion, como odbc.command, odbc.recordset, etc, funcionan perfecto. Y en realidad debería ser así dada la filosfía de MariaDB: Absorber sin restricciones toda la arquitectura MySQL. De hecho, si revisas la carpeta donde se instala MariaDB verás una buena cantidad de archivos propios de MySQl.

Sin embargo, más adelante, con un poco más de tiempo, le volveré a meter el diente al conector de MariaDB.

Nuevamente, un millón de gracias a todos por su invaluable ayuda.

Abrazos,
Saludos,

Carlos Gallego

*** FWH-23.10, xHarbour 1.2.3 Build 20190603, Borland C++7.30, PellesC ***
Cgallegoa
 
Posts: 414
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 93 guests