Error con MariaDB

154 views
Skip to first unread message

Pablo Flores

unread,
May 12, 2020, 2:12:14 PM5/12/20
to Comunidad de Visual Foxpro en Español

Hola a Todos..

                Estoy empezando a investigar un poco (en la medida que me da el tiempo) como trabajar con visual fox y

Mariadb. Se que hay librerias como FoxyDb y otras  que ayudan mucho, pero antes de meterme con la librería quería saber por lo menos como trabaja.

Algo que me tiene desconcertado es que cuando utilizo las sentencias a continuación anda bien:

 

lcCadena="Driver={MariaDB ODBC 3.0 Driver};Server=127.0.0.1;UID=root;PWD=admin;DATABASE=test;Port=3306;"

lnHandle=SQLSTRINGCONNECT(lcCadena)

if lnHandle>0

SQLEXEC(Handle,"Select * from cliente”,"curCliente")

endif

….etc..

***************************************

Pero cuando utilizo:

lnHandle=SQLSTRINGCONNECT(lcCadena,.t.)   && conecta correctamente

SQLEXEC(lnHandle, "Select * from cliente”,"curCliente") && aquí me cierra el vfp con un error de excepcion

 

 

 

Porque puede pasar eso y cual es el inconveniente si utilizaría siempre el SQLSTRINGCONNECT(lcCadena) sin .t.?

Gracias de antemano!

Pablo Flores

Enviado desde Correo para Windows 10

 

xor...@hotmail.com

unread,
May 12, 2020, 2:37:52 PM5/12/20
to Comunidad de Visual Foxpro en Español
Lo hago asi y hasta la fecha no e tenido problemas;
LcDNS="DRIVER={MySQL ODBC 3.51 Driver};DESC=;DATABASE=";
+LcBase+";SERVER="+LcIp+";UID="+LcUsuario+;
";PASSWORD="+LcContra+";PORT=3306;OPTION=;"

SQLSETPROP(0,"DispLogin",3)
cConexion=Sqlstringconnect(LcDNS)
If cConexion=<0
   Messagebox("Fallo la conexion al servidor intentelo de nuevo o solicite asesoria",64,"Aviso")
   QUIT
ELSE
MESSAGEBOX("Bienvenido a la base de "+LcBase,64,"Bienvenido")
   SQLEXEC(cConexion,"select * from usuarios ","usuarios")
Endif

Antonio Meza

unread,
May 12, 2020, 3:22:00 PM5/12/20
to Comunidad de Visual Foxpro en Español
Si checas la ayuda de VFP sobre SQLSTRINGCONNECT, te indica que el segundo parámetro sirve para compartir la conexión, de hecho no debes usarlo, salvo que realmente quieras compartirla.

Nota: He visto varios detalles con los drivers de MariaDb, mi recomendación personal es que uses el driver 5.1 de mysql

saludos
Antonio Meza

Pablo Flores

unread,
May 12, 2020, 4:00:24 PM5/12/20
to publice...@googlegroups.com

Gracias Antonio..

                Pero el driver 5.1 de MySQL anda bien para mariaDB?

                Que motor me recomendas?

Actualmente estoy trabajando con tablas nativas de vfp.

Cuando hago select xxx from mitabla, muchas veces les hago un join contra cursores ya en memoria.

Lo mismo para los Update.. Actualizo las tablas mediante los comandos sql pero haciendo join o usando la clausula IN

De cursores indexados y esto me deba una respuesta muy buena en tiempos.

El foxydb trabaja de esta manera para los Select y update  o lo hace registro a registro?

Se puede hacer lo mismo en un sgbd (actualizarlo mediante join a cursores de vfp)?

Gracias nuevamente por su tiempo

Saludos

Pablo Flores

 

 

Enviado desde Correo para Windows 10

 

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/d6b87b7e-0aef-4c9b-81ea-29c657469ef5%40googlegroups.com.

 

Antonio Meza

unread,
May 12, 2020, 4:18:16 PM5/12/20
to Comunidad de Visual Foxpro en Español
En mi caso uso MariaDb 10.0, 10.1, 10,2, 10.3 y 10.4 con el driver Mysql 5.1 sin problema.

En cuanto a tus preguntas necesitaría ver un ejemplo para ver si hablamos de lo mismo sobre los Join

Para un servidor de base de datos ya no te tienes que traer todos los registros, solo te traes el o los que vas a trabajar, por lo que ya no debes necesitar los indices de VFP de forma local.

La ventaja de FoxyDb entre muchas otras es que tu haces una consulta al servidor que te va a devolver un cursor, si esa consulta tiene uno o varios Join a la hora que se van a actualizar los cambios FoxyDb busca los registros y campos que fueron cambiados y que coincidan con la tabla a actualizar en el servidor y de esta forma generar el comando SQL Update, Insert o Delete a ejecutar, sin que tengas que preocuparte por ello, como son las transacciones que la mayoría que usa SqlExec() directamente no tiene ni idea de que es un tema delicado.

No he visto una librería que administre los cursores tan fácil como lo hace FoxyDb.

saludos
Antonio Meza

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Cesar Luque

unread,
May 12, 2020, 4:29:29 PM5/12/20
to Comunidad de Visual Foxpro en Español
Hola Pablo

SQLEXEC(lnHandle, "Select * from test..cliente”,"curCliente") 

o como sabe cual es la BD sobre la cual hacés el select de cliente?

Saludos.

Cèsar.-

Pablo Flores

unread,
May 12, 2020, 6:22:55 PM5/12/20
to publice...@googlegroups.com

Hoy por hoy estoy trabajando asi con base de dato nativa en vfp

Por ej:

Select xxx from t1 where … && me regresa un cursor

Luego a ese cursor le hago modificaciones varias por medio del usuario, sea manual o por procesos

Por lo general (y con buenos resultados) elimino todos los registros que no se deben actualizar del cursor

Y después, sea una modificación u otra consulta realizo otro sentencia sql con un “join” sobre ese cursor o usando la clausula “in” que referencia al cursor.

Ej1:

SELECT * FROM cliente INNER JOIN curAuxi ON cliente.id=curAuxi.id INTO CURSOR c1  && este curauxi sale de otros Cursores

 

Cuando indexo estos cursores por el campo de coneccion, los resultados son muy rapidos

Lo mismo para los Update:

UPDATE pre_art

                SET precio= precio*(100/curArt.mon_costo)

                from pre_art

                inner join 

                               (Select id, mon_costo from articulo WHERE id_moneda=xx ) curArt

                on pre_art.id_articulo=curArt.id

 

En esta instrucción también es rápida y esos cursor (curArt) puede ser resultado de un select de cursores o sobre las mismas tablas

De esta manera actualizo en bloque y no mediante un scan que lo haga registro por registro

 

No se si esta técnica es buena o no, pero me soluciono temas de demoras.. lo que no se si se puede hacer lo mismo con mariadb u otros motores.

 

Saludos

Pablo Flores

 

Enviado desde Correo para Windows 10

 

De: Cesar Luque
Enviado: martes, 12 de mayo de 2020 17:29
Para: Comunidad de Visual Foxpro en Español
Asunto: [vfp] Re: Error con MariaDB

 

Hola Pablo

--

Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/1be9ee90-90ac-41c8-b1c9-87b3669de523%40googlegroups.com.

 

HernanCano

unread,
May 13, 2020, 2:36:20 AM5/13/20
to Comunidad de Visual Foxpro en Español
César:
Aquella sobre la que se haya hecho el SQLSTRINGCONNECT (o el SQLCONNECT) que devolvió el lnHandle.

Francisco Lorente

unread,
May 13, 2020, 3:43:03 AM5/13/20
to Comunidad de Visual Foxpro en Español
Buenos días, comunidad.

Pablos, siempre pudes trabajar con sentencias "directas" a MariaDb a través de las funciones SQLStringConnect, SQLExec y SQLDisconnect, pero también puedes accedar a los datos mediante una conexión a MariaDB y vistas remotas actualilzables almacenadas en una base de datos de VFP. De hecho, en mis aplicaciones combinos las dos maneras.

Saludos.
Francisco Lorente.
Murcia. España.

Pablo Flores

unread,
May 13, 2020, 9:28:40 AM5/13/20
to publice...@googlegroups.com
Hola Francisco... y cuál te da mejor resultado para la actualización en grupos de registros? En ese caso sólo se puede hacer con vistas remotas?

Enviado desde Outlook Mobile


From: publice...@googlegroups.com <publice...@googlegroups.com> on behalf of Francisco Lorente <kiska...@gmail.com>
Sent: Wednesday, May 13, 2020 4:43:02 AM
To: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Subject: [vfp] Re: Error con MariaDB
 
--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Antonio Meza

unread,
May 13, 2020, 10:41:18 AM5/13/20
to Comunidad de Visual Foxpro en Español
Las vistas locales son una maravilla en VFP pero las vistas remotas tiene muchos detalles negativos y no te recomiendo que uses.

saludos
Antonio Meza
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Antonio Meza

unread,
May 13, 2020, 10:48:44 AM5/13/20
to Comunidad de Visual Foxpro en Español
La verdad esta muy raro lo que haces, pero al ser tablas dbf se puede hacer muchas cosas, pero al usar un servidor de base de datos sea cual sea TODO cambia, aunque pudieras replicar tu proceso actual con un servidor de base de datos estarías desaprovechando las ventajas del servidor.

saludos
Antonio Meza

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Francisco Lorente

unread,
May 13, 2020, 11:14:35 AM5/13/20
to Comunidad de Visual Foxpro en Español
Hola de nuevo.

Si manejo grupos de registros lo hago con las "directas" (SQLStringConnect, SQLExec y SQLDisconnect), pero para un solo registro suelo utilizar la vista remota de VFP (aunque he de confesar que cada vez utilizo más las "directas"). Manejo los dos métodos porque la aplicación desarrollada viene heredada de una antigua aplicación de VFP con tablas nativas y era bastante engorroso reescribir todo el código para utilizar SQLConnect y fue mas fácil transformar las vistas locales en remotas.

Saludos.
Francisco Lorente.
Murcia. España.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Pablo Flores

unread,
May 13, 2020, 1:33:46 PM5/13/20
to publice...@googlegroups.com
Muchas gracias por sus comentarios.
Antonio, donde puedo obtener información sobre foxydb? Me refiero a que si no mal recuerdo la versión 3.01 tiene algunos cambios con la 2.5.
Y donde habías dejado unos ejemplos.
Desde ya muchas gracias a todos

Saludos
Pablo Flores

Enviado desde Outlook Mobile


Sent: Wednesday, May 13, 2020 12:14:34 PM

To: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Subject: Re: [vfp] Re: Error con MariaDB
 
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/c4fbc2aa-f508-4ac4-8859-571787066626%40googlegroups.com.

Antonio Meza

unread,
May 13, 2020, 3:05:12 PM5/13/20
to Comunidad de Visual Foxpro en Español
https://foxydb.wordpress.com/

Ya esta actualizado el blog a la versión 3, también los ejemplos. hace falta mucha documentación pero el archivo PRG de la librería esta documentado, si tienes duda sobre las funciones en cada función tiene documentación.

Y cualquier duda puedes abrir un hilo nuevo y preguntar.

saludos

Pablo Flores

unread,
May 13, 2020, 3:49:53 PM5/13/20
to publice...@googlegroups.com
Muchas gracia!
Saludos
Pablo Flores

Enviado desde Outlook Mobile


From: publice...@googlegroups.com <publice...@googlegroups.com> on behalf of Antonio Meza <solv...@gmail.com>
Sent: Wednesday, May 13, 2020 4:05:11 PM
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/bf99e15a-84af-471a-b905-fd8def1d4055%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages