FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour MariaDB - Campos tipo TEXT (MEMO), BLOB
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Tue Feb 17, 2015 04: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 (fw): Select all Collapse
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 (fw): Select all Collapse
#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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: 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, 2 * 1 TB NVME M.2, GTX 1650
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Tue Feb 17, 2015 05: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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Tue Feb 17, 2015 06:40 PM
Como dice el amigo ADOlfo,
el problema puede ser de ADO,
yo uso dolphin sin problemas, con mysql o mariaDB,

Code (fw): Select all Collapse
#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 "
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Tue Feb 17, 2015 07:04 PM
Carlos:

Probar no cuesta, intenta agregando la conexi贸n
Code (fw): Select all Collapse
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
Posts: 883
Joined: Tue Oct 11, 2005 11:57 AM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: 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, 2 * 1 TB NVME M.2, GTX 1650
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: 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.
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Wed Feb 18, 2015 05: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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Wed Feb 18, 2015 06: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
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: MariaDB - Campos tipo TEXT (MEMO), BLOB
Posted: Wed Feb 18, 2015 09: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 :-)

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 :-). 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-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Continue the discussion